Aller au contenu

Référence

phil/standard-webhooks

Chaque type public de la bibliothèque, par sujet. Tous vivent dans Phil\StandardWebhooks, les exceptions dans Phil\StandardWebhooks\Exception. Les objets-valeurs sont immuables (final readonly), avec des constructeurs privés derrière des constructeurs nommés, sauf mention contraire.

Réception

TypeRôleÉtat
WebhookReceiverreceive(headers, rawBody, now) : horodatage, signature sous les clés en cache, un rechargement, audience. Constructeur public (VerificationKeyProvider, Tolerance, ?string $audience = null, Verifier = new Verifier()).Implémenté et testé
VerificationKeyProviderPort : keys() et refresh(), les clés de confiance du récepteur.Port
FixedKeysVerificationKeyProvider pour des clés connues d'avance : fromStrings(), un constructeur public ; refresh() les redonne.Implémenté et testé

Signature et vérification

TypeRôleÉtat
SchemeEnum adossée à des chaînes : V1 (v1, HMAC-SHA256, signatures de 32 octets) et V1a (v1a, Ed25519, signatures de 64 octets) ; signatureLength().Implémenté et testé
SignedContentof(id, timestamp, rawBody) : les octets que signent les deux schémas, {id}.{timestamp}.{body}.Implémenté et testé
Signersign(id, timestamp, rawBody, key, ...moreKeys) : les WebhookHeaders d'une tentative.Implémenté et testé
Verifierverify() (l'horodatage d'abord, puis les signatures) et signatureVerifies().Implémenté et testé
SigningKeyInterface : scheme(), sign().Interface, implémentée par Ed25519SecretKey et HmacSecret
VerificationKeyInterface : scheme(), verifies().Interface, implémentée par Ed25519PublicKey et HmacSecret
Base64Base64 strict avec remplissage : encodeSecret()/decodeSecret() à temps constant, encodePublic()/decodePublic() natifs.Implémenté et testé

Valeurs

TypeRôleÉtat
WebhookHeadersLes trois en-têtes : fromStrings(), toArray(), les constantes ID, TIMESTAMP, SIGNATURE ; constructeur public.Implémenté et testé
WebhookIdwebhook-id : ASCII imprimable sans espace ni point, au plus 255 octets ; fromString(), generate(), equals().Implémenté et testé
WebhookTimestampwebhook-timestamp : secondes Unix strictes ; fromHeader(), fromDateTime(), skewFrom(), isWithin(), toHeader().Implémenté et testé
ToleranceUn nombre positif de secondes, dans les deux sens ; ofSeconds().Implémenté et testé
SignatureUne entrée {version},{base64} : of(), tryFromHeaderEntry(), toHeaderEntry().Implémenté et testé
SignatureListwebhook-signature, au plus huit entrées : of(), fromHeader(), toHeader().Implémenté et testé
Ed25519SecretKeyClé whsk_, signe v1a : generate(), fromString(), fromBytes() (germe ou 64 octets), toString(), publicKey().Implémenté et testé contre la RFC 8032
Ed25519PublicKeyClé whpk_, vérifie v1a : fromString(), fromBytes(), toString(), equals().Implémenté et testé contre la RFC 8032
Keyssigning() et verification() : une clé lue par son préfixe.Implémenté et testé
HmacSecretSecret whsec_ de 24 à 64 octets, signe et vérifie v1 : generate(), fromString(), toString().Implémenté et testé contre le vecteur v1 de Standard Webhooks
EnvelopeLe corps JSON : type (obligatoire), timestamp, data, audience ; fromJson(), assertAddressedTo().Implémenté et testé
VerifiedWebhookUne livraison dont l'horodatage et la signature ont été vérifiés : id, timestamp, rawBody, envelope() ; constructeur public.Implémenté et testé

Déduplication

TypeRôleÉtat
ProcessedWebhookRepositoryPort : claim(id, processedAt) atomique, dans la transaction du traitement.Port

Exception

TypeRôleÉtat
WebhookExceptionInterface marqueur qui étend Throwable : un seul catch à la frontière HTTP.Implémenté
InvalidWebhookValueInvalidArgumentException : une entrée mal formée, typiquement 400 ; because(string).Implémenté et testé
WebhookRejectedRuntimeException : une livraison bien formée refusée ; RejectionReason $reason public ; timestampOutsideTolerance(), noValidSignature(), audienceMismatch().Implémenté et testé
RejectionReasonEnum adossée à des chaînes : TimestampOutsideTolerance, NoValidSignature, AudienceMismatch.Implémenté et testé

Hors de la bibliothèque

  • Une couche HTTP : un contrôleur, un analyseur de requêtes, un client sortant, un calendrier de nouvelles tentatives ou une file de lettres mortes.
  • Un stockage des identifiants traités.

phil/standard-webhooks-bundle apporte le câblage Symfony, l'argument de contrôleur, un expéditeur sur le client HTTP de Symfony et une table Doctrine.