API REFERENCE
Notifications asynchrones
Pendant tout le cycle de vie d’une commande, nous envoyons une notification asynchrone à notify_url à chaque changement de statut. Le point de terminaison de réception doit utiliser HTTPS. Les notifications contiennent une signature et les paramètres de paiement (au format JSON).
Conseil
- L’URL de notification est l’notify_url fournie. Une fois le paiement terminé, YabandPay envoie à cette URL les informations pertinentes sur le paiement et l’utilisateur. L’établissement acquéreur tiers doit recevoir la notification et en vérifier la signature avant toute autre action.
- Lors des échanges de notifications serveur, si l’établissement acquéreur tiers renvoie une réponse autre qu’un succès ou si la requête expire, YabandPay considère la notification comme échouée. YabandPay réessaie périodiquement d’envoyer les notifications selon sa stratégie de nouvelle tentative afin d’optimiser leur remise, sans toutefois garantir qu’elles seront finalement délivrées.
- Les notifications serveur pouvant être réessayées, une même notification peut être envoyée plusieurs fois au système partenaire. Celui-ci doit gérer correctement les doublons. Lors du traitement d’une notification, nous recommandons de vérifier d’abord l’état des données métier correspondantes afin de déterminer si elles ont déjà été traitées. Ne les traitez que si ce n’est pas le cas ; sinon, renvoyez immédiatement une réponse de succès. Avant de vérifier et de traiter les données métier, utilisez des verrous de données pour gérer la concurrence et éviter les incohérences causées par une réentrée de fonction.
- YabandPay envoie les notifications asynchrones depuis les adresses IP suivantes. Nous vous recommandons de les ajouter à la liste d’autorisation de votre pare-feu. 8.211.41.31 8.211.10.244 8.211.8.123
1. Notifications de paiement asynchrones
| Paramètre | Type | Description |
|---|---|---|
| sign | String | Signature |
| type | String | payment |
| user | String | UID ou adresse e-mail du compte caissier |
| amount | String | Montant du paiement soumis |
| tip_amount | String | Pourboire inclus dans le montant total |
| trade_id | String | Numéro de transaction YabandPay |
| currency | String | Devise du paiement soumis |
| settlement_amount | String | Montant dans la devise de règlement |
| settlement_currency | String | Devise de règlement |
| exchange_rate | String | Montant du paiement/montant du règlement |
| amount_cny | String | Montant du paiement en CNY |
| settlement_rate | String | Taux de change de règlement CNY |
| order_id | String | Numéro de commande du marchand |
| transaction_id | String | Numéro de commande renvoyé par le moyen de paiement, par exemple le numéro de transaction WeChat Pay ou Alipay+. Dans la plupart des cas, il est identique à acquirer_id. |
| acquirer_id | String | Acquirer Reference Number (ARN) |
| description | String | Description de la commande |
| createDate | String | Heure de création de la commande |
| state | String | Statut du paiement : Processing, Paid, Cancelled, Expired, Verify, Authorized, Declined, Failed |
| demo | String | Champ défini par le client |
| out_trade_no | String | Numéro de commande interne du système de transaction |
| sub_pay_method | String | Moyen de paiement : WeChat Pay, Alipay+, etc. (voir la description des moyens de paiement) |
| pay_method | String | Type de paiement : offline, online |
| paid_time | String | Heure du paiement |
| yb_transaction_id | String | ID de transaction YabandPay unique |
| 3ds_status | String | Statut 3DS |
| 3ds_trxid | String | ID 3DS unique |
| 3ds_version | String | Version 3DS |
Statuts de réponse 3DS :
| Paramètre | Type | Description |
|---|---|---|
| A | String | Traitement des tentatives effectué ; authentification/vérification non effectuée, mais une preuve de la tentative est fournie. |
| C | String | Authentification supplémentaire requise. |
| D | String | Authentification décentralisée confirmée ; authentification supplémentaire requise. |
| I | String | À titre informatif uniquement ; la préférence du marchand concernant le challenge est prise en compte. |
| N | String | Non authentifié/compte non vérifié ; transaction refusée. |
| R | String | Authentification/vérification du compte rejetée ; l’émetteur refuse l’authentification/la vérification et demande de ne pas tenter l’autorisation. |
| U | String | Authentification/vérification du compte impossible ; problème technique ou autre. |
| Y | String | Authentification/vérification du compte réussie. |
Exemple de notification asynchrone :
{
"sign": "YOUR_SIGNATURE",
"data": {
"type": "payment",
"user": "YOUR_CASHIER_UID",
"order_id": "YOUR_ORDER_ID",
"trade_id": "8a8aa7c7-66d7-e2cc-e2a6-fff7c77aaefd",
"transaction_id": "4200000298201905227377147799",
"acquirer_id": "4200000298201905227377147799",
"yb_transaction_id": "c8823612-383f-35fc-f28d-c0eae039e870",
"amount": "1.00",
"tip_amount": "0.10",
"currency": "EUR",
"settlement_amount": "1.00",
"settlement_currency": "EUR",
"exchange_rate": "1",
"amount_cny": "0.77",
"settlement_rate": "7.779779",
"description": "yaband test",
"createDate": "1558510731",
"pay_method": "online",
"state": "paid",
"demo": "test",
"out_trade_no": "a4d7684a-e326-44c1-bea5-0601f7a9b191",
"sub_pay_method": "WeChat Pay",
"paid_time": "1603355159",
"3ds_status": "Y",
"3ds_trxid": "1d0c6eb3-6282-4cf9-9549-884410918d2d",
"3ds_version": "2.2.0"
}
}
2. Notifications de remboursement asynchrones
| Paramètre | Type | Description |
|---|---|---|
| sign | String | Signature |
| type | String | refund |
| user | String | UID ou adresse e-mail du compte caissier |
| pay_method | String | paiement en ligne ou hors ligne pour la commande d’origine |
| sub_pay_method | String | Moyen de paiement de la commande d’origine : WeChat Pay, Alipay+, etc. (voir la description des moyens de paiement) |
| refund_id | String | Numéro de remboursement |
| m_refund_id | String | Numéro de remboursement défini par le marchand et fourni lors de la demande |
| transaction_id | String | Numéro de transaction |
| acquirer_id | String | Numéro de transaction de l’établissement de règlement |
| refund_amount | String | Montant du remboursement soumis |
| refund_currency | String | Devise du remboursement |
| order_id | String | Numéro de commande du marchand |
| refund_description | String | Description de la commande |
| refund_time | String | Heure du remboursement |
| state | String | Statut du remboursement : to-be-approval, refund pending, refund processing, refunded, refund error, refund failed, refund cancelled |
Informations de notification :
{
"sign": "YOUR_SIGNATURE",
"data": {
"type": "refund",
"user": "YOUR_CASHIER_UID",
"refund_id": "b20d3668-d71f-432f-8809-f84f0d9139d4",
"m_refund_id":"20240301143029616187",
"transaction_id":"cf483d9e-637c-a92d-0716-5b8199d10f8c",
"refund_amount": "1.00",
"refund_currency": "EUR",
"order_id": "YOUR_ORDER_ID",
"refund_description": "test",
"refund_time": "0",
"state": "refunded",
"pay_method": "online",
"sub_pay_method": "WeChat Pay"}
}
Conseil
- Après l’envoi d’une demande de remboursement, nous renvoyons le statut refund processing.
- Une fois le remboursement terminé, nous envoyons une notification avec le statut refunded.
3. Fréquence des notifications asynchrones
Remarque : la réponse à une notification doit renvoyer le code de statut 200 et le texte « ok » dans le corps. Si le texte « ok » n’est pas renvoyé, nous renverrons la notification.
La fréquence des notifications est la suivante :
| Tentative de notification | Intervalle |
|---|---|
| 1 | 10s |
| 2 | 30s |
| 3 | 60s |
| 4 | 300s |
| 5 | 3600s |
| ... | 3600s |
| 15 | 3600s |
Si nous ne recevons pas la réponse « ok » correcte, nous cessons d’envoyer des notifications après 15 tentatives.
4. Descriptions des statuts de paiement dans les notifications asynchrones
1. Statuts de paiement :
| Code | Champ | Description |
|---|---|---|
| 00 | paid | Paiement réussi |
| 01 | authorized | Autorisation réussie |
| 02 | pending | Paiement créé |
| 03 | processing | En attente de paiement |
| 04 | verify | Le client a payé et le paiement est en cours d’examen pour des raisons de contrôle des risques. |
| 05 | declined | Paiement refusé |
| 06 | failed | Paiement échoué |
| 07 | expired | Paiement expiré |
| 08 | cancelled | Paiement annulé |
2. Statuts de remboursement :
| Code | Champ | Description |
|---|---|---|
| 20 | to-be-approval | En attente de l’approbation d’un administrateur. |
| 21 | refund pending | Le solde actuel est insuffisant. Le remboursement sera soumis automatiquement lorsque les fonds seront suffisants. |
| 22 | refund processing | La demande de remboursement a été soumise et est en cours de traitement par le système. |
| 23 | refunded | Le remboursement a été effectué avec succès. |
| 24 | refund failed | Le remboursement a échoué. Veuillez réessayer. |
| 25 | refund error | Le remboursement a échoué. Veuillez contacter notre service client en ligne. |
| 26 | refund cancelled | L’ordre de remboursement a été annulé. |
