Skip to main content
Ce guide couvre les trois volets d’une intégration du paiement instantané :
  1. Gérer vos alias (mode live uniquement).
  2. Collecter un paiement instantané.
  3. Envoyer un paiement instantané.
Lisez d’abord l’introduction pour les concepts et les prérequis : le paiement instantané doit être activé par HUB2 pour votre compte marchand, et votre clé API doit disposer des permissions sur les alias pour utiliser les points de terminaison d’alias.

Gérer vos alias

Référence de l’API HUB2 - Lister les alias Référence de l’API HUB2 - Créer un alias Référence de l’API HUB2 - Supprimer un alias Les trois points de terminaison d’alias ciblent l’un de vos comptes via le paramètre de chemin accountType : collection (reçoit les paiements instantanés) ou transfer (les émet). Ils ne fonctionnent qu’en mode live : en sandbox, ils sont refusés avec une erreur 403 (instant_payment_live_only).

Lister les alias d’un compte

La liste contient tous les alias que l’annuaire détient pour le compte, y compris l’alias principal enregistré par HUB2.
Curl
aliasKey est la valeur à communiquer pour que les payeurs puissent joindre votre compte, et la valeur à envoyer comme payeeAlias lors d’une tentative de paiement.

Créer un alias

Curl
La requête n’a pas de corps : l’annuaire génère la clé SHID. Un compte détient un seul alias SHID : lorsque le compte en possède déjà un, l’API répond 201 et renvoie cet alias avec created à false au lieu d’en créer un second. Relancer une création est donc toujours sans risque.

Supprimer un alias

Curl
L’API répond 204 No Content. À partir de là, les payeurs ne peuvent plus joindre votre compte avec cet alias et HUB2 ne l’accepte plus comme votre propre alias lors d’un paiement.
  • L’alias principal enregistré par HUB2 ne peut pas être supprimé : la requête est refusée avec une erreur 409 (instant_payment_primary_alias_protected). Contactez le support HUB2 pour le retirer.
  • Un alias qui n’est pas le vôtre est refusé exactement comme un alias qui n’existe pas, avec une erreur 403 (instant_payment_alias_not_owned).

Erreurs sur les alias


Collecter un paiement instantané

Une collecte suit l’intégration des paiements : vous créez une intention de paiement, effectuez une tentative de paiement dessus, puis suivez son statut. Seule la tentative de paiement diffère pour le paiement instantané. L’intention de paiement doit être en XOF.

Obtenir les frais

Référence de l’API HUB2 - Récupérer les frais Pour afficher les frais avant que le client ne paie, appelez le point de terminaison des frais de l’intention de paiement avec paymentMethod=instant_payment et le country. Le paramètre provider n’est pas requis pour le paiement instantané, qui n’a qu’un seul opérateur. S’il est envoyé, il est ignoré.
Curl

Effectuer la tentative de paiement

Référence de l’API HUB2 - Tentative de paiement Effectuez une tentative de paiement sur l’intention de paiement avec le mode de paiement instant_payment.
Curl
Il n’y a ni champ provider ni objet mobileMoney. Les deux alias sont indiqués à chaque requête et ne sont jamais tronqués ni normalisés : envoyez-les exactement tels qu’ils sont enregistrés. HUB2 vérifie tout ce qu’il peut avant que la requête n’atteigne le rail, car un paiement envoyé sur le rail ne peut pas être rappelé :
  • le pays est servi et le paiement instantané est activé pour votre compte marchand ;
  • payeeAlias est bien formé et fait partie de vos alias de collecte actifs. Un alias enregistré pour un autre marchand, ou pour personne, est refusé de la même manière (403, instant_payment_alias_not_owned) ;
  • payerAlias est bien formé. HUB2 ne vérifie pas qu’il existe : le rail y répond, et un alias de payeur inexistant fait échouer le paiement.

Suivre le paiement

Le paiement est créé au statut created, reste ensuite pending pendant que le rail le traite, et l’intention de paiement est processing. Le résultat provient du rail et fait passer le paiement à successful ou failed, avec un objet failure qui contient la cause de l’échec. Utilisez les webhooks pour suivre le résultat, comme pour tout autre mode de paiement. Si vous ne pouvez pas, interrogez le statut de l’intention de paiement uniquement tant que le statut est processing. Lorsque HUB2 ne peut pas savoir si le rail a reçu une requête, le paiement reste pending au lieu d’être mis en échec. Ne créez pas de second paiement pour le même achat dans ce cas : attendez le webhook ou lisez le statut.

Erreurs de paiement


Envoyer un paiement instantané

Référence de l’API HUB2 - Créer un transfert Un transfert suit l’intégration des transferts. Pour le paiement instantané, définissez le type de destination à instant_payment et envoyez l’alias du bénéficiaire. La devise doit être XOF.
Curl
La requête ne contient pas d’alias de payeur. Le compte débité est toujours votre propre compte de transfert, et HUB2 sélectionne l’alias à utiliser parmi ceux enregistrés sur ce compte, en commençant par l’alias principal. La réponse renvoie dans l’objet destination le payerAlias utilisé et le payeeAlias que vous avez envoyé, ainsi que provider à pispi. Si votre compte de transfert n’a aucun alias actif, le transfert est refusé avec une erreur 400. Comme pour un paiement, HUB2 ne vérifie que la forme de l’alias du bénéficiaire : un alias de bénéficiaire inexistant fait échouer le transfert. Un transfert passe par les statuts habituels (created, pending, puis successful ou failed). Suivez-le avec les webhooks, comme pour les autres destinations. Lorsque HUB2 ne peut pas savoir si le rail a reçu la requête, le transfert reste pending : ne créez pas de second transfert pour le même bénéficiaire, attendez le webhook ou lisez le statut.

Erreurs de transfert


Causes d’échec

Lorsqu’un paiement ou un transfert échoue, le champ failure.code indique la cause. Les causes d’échec du rail sont traduites ainsi : Consultez aussi les listes complètes des causes d’échec des paiements et des causes d’échec des transferts.

Sandbox

En mode sandbox, aucune requête n’atteint le rail : HUB2 simule le résultat à partir des 8 derniers caractères de l’alias de la contrepartie, c’est-à-dire le payerAlias d’un paiement et le payeeAlias d’un transfert. L’alias doit tout de même être bien formé, par exemple +22500000001, et le pays doit être CI ou SN. Vos propres alias restent vérifiés en sandbox : le payeeAlias d’un paiement doit être un alias de collecte de votre compte marchand, et un transfert nécessite un alias sur votre compte de transfert. Les alias ne peuvent pas être créés en sandbox : listez-les donc au préalable en mode live (voir Gérer vos alias) et réutilisez-les en sandbox.

Paiements

Toute autre valeur fait échouer le paiement avec bad_parameters.

Transferts

Toute autre valeur fait échouer le transfert avec invalid_destination.