Download the PHP package senndo/senndo-php without Composer
On this page you can find all versions of the php package senndo/senndo-php. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package senndo-php
senndo — SDK PHP officiel
Messagerie multicanale et vérification : SMS, WhatsApp, e-mail, voix, OTP. Une seule API, un seul solde, un verdict de livraison par message.
PHP ≥ 8.1, extensions curl et json. Aucune dépendance Composer.
Premier envoi
sendMessage rend l'état au moment de l'acceptation, pas le verdict final. Un sent dit que
l'opérateur a pris le message ; il ne dit pas qu'il est arrivé. Le verdict se lit sur un webhook, ou
en relisant le message.
La clé d'idempotence : le SDK n'en fabrique pas à votre place
idempotencyKey est obligatoire sur tout envoi, et c'est délibéré. Rejouer la même clé renvoie
le message déjà créé — sans jamais redébiter le compte.
Le SDK n'en pose jamais une pour vous. Une clé inventée au moment de l'appel serait perdue si le processus meurt entre l'envoi et la réponse : exactement le cas où l'idempotence sert. La bonne clé vient de votre domaine.
Http::newIdempotencyKey() existe pour les cas où il n'y a vraiment rien à dériver — un envoi
manuel depuis un script, un test :
Les erreurs se branchent sur une classe, jamais sur un message
$erreur->errorCode est stable ; $erreur->apiMessage est un libellé humain qui évolue. Ne
branchez jamais sur le second.
Pourquoi
errorCodeet noncode.Exception::$codeexiste déjà en PHP, il est de typeintet il n'est pas en lecture seule : le redéclarer enstringest refusé par le moteur. C'est la seule asymétrie de nommage entre les SDK TypeScript, Python et PHP, et elle est imposée par le langage.
Le code d'échec d'un message est en union ouverte : senndo ajoute des valeurs, n'en retire pas.
Les montants sont des chaînes décimales
Un NUMERIC(18,6) passé par un flottant perd des unités sur les longues traînes, et un prix
unitaire sub-centime arrondi à deux décimales devient zéro. Le SDK ne convertit rien : les montants
arrivent en string et se somment avec bcadd.
Retentatives : ce qui est rejoué, et ce qui ne l'est jamais
Le SDK retente uniquement ce qui peut l'être sans conséquence :
| Appel | Retenté ? |
|---|---|
GET, DELETE |
oui — sur échec de transport, 429, 5xx |
sendMessage (porte une clé d'idempotence) |
oui |
createWebhook, estimateMessage, revokeWebhook |
jamais |
tout 4xx autre que 429 |
jamais |
createWebhook crée une ressource à chaque exécution : une retentative aveugle produirait deux
endpoints, donc deux livraisons pour chaque événement.
Téléverser un média
Brancher votre propre client HTTP
Le transport par défaut est cURL — zéro dépendance. Un projet qui a déjà Guzzle, Symfony HttpClient, un proxy d'entreprise ou du mTLS injecte le sien, et garde la validation, les erreurs typées et la politique de retentative.
Le transport doit lever TimeoutException sur dépassement de délai et ConnectionException sur
échec de transport, et ne jamais lever sur un statut d'erreur HTTP — sinon le code stable de
l'enveloppe est perdu.
La clé API ne s'imprime pas
Il n'existe aucun accesseur qui rende la clé en clair, et __debugInfo masque également : un
var_dump ou un dumper de framework ne peut pas la révéler.
Webhooks
Le secret n'est lisible qu'à la création. Il signe chaque livraison : vérifiez la signature avant de faire quoi que ce soit du corps.
Licence
MIT. Voir CHANGELOG.md pour les changements de version.
All versions of senndo-php with dependencies
ext-curl Version *
ext-json Version *