Documentation/Référence API

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

  1. 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.
  1. 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.
  1. 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.
  1. 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ètreTypeDescription
signStringSignature
typeStringpayment
userStringUID ou adresse e-mail du compte caissier
amountStringMontant du paiement soumis
tip_amountStringPourboire inclus dans le montant total
trade_idStringNuméro de transaction YabandPay
currencyStringDevise du paiement soumis
settlement_amountStringMontant dans la devise de règlement
settlement_currencyStringDevise de règlement
exchange_rateStringMontant du paiement/montant du règlement
amount_cnyStringMontant du paiement en CNY
settlement_rateStringTaux de change de règlement CNY
order_idStringNuméro de commande du marchand
transaction_idStringNumé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_idStringAcquirer Reference Number (ARN)
descriptionStringDescription de la commande
createDateStringHeure de création de la commande
stateStringStatut du paiement : Processing, Paid, Cancelled, Expired, Verify, Authorized, Declined, Failed
demoStringChamp défini par le client
out_trade_noStringNuméro de commande interne du système de transaction
sub_pay_methodStringMoyen de paiement : WeChat Pay, Alipay+, etc. (voir la description des moyens de paiement)
pay_methodStringType de paiement : offline, online
paid_timeStringHeure du paiement
yb_transaction_idStringID de transaction YabandPay unique
3ds_statusStringStatut 3DS
3ds_trxidStringID 3DS unique
3ds_versionStringVersion 3DS
Statuts de réponse 3DS :
ParamètreTypeDescription
AStringTraitement des tentatives effectué ; authentification/vérification non effectuée, mais une preuve de la tentative est fournie.
CStringAuthentification supplémentaire requise.
DStringAuthentification décentralisée confirmée ; authentification supplémentaire requise.
IStringÀ titre informatif uniquement ; la préférence du marchand concernant le challenge est prise en compte.
NStringNon authentifié/compte non vérifié ; transaction refusée.
RStringAuthentification/vérification du compte rejetée ; l’émetteur refuse l’authentification/la vérification et demande de ne pas tenter l’autorisation.
UStringAuthentification/vérification du compte impossible ; problème technique ou autre.
YStringAuthentification/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ètreTypeDescription
signStringSignature
typeStringrefund
userStringUID ou adresse e-mail du compte caissier
pay_methodStringpaiement en ligne ou hors ligne pour la commande d’origine
sub_pay_methodStringMoyen de paiement de la commande d’origine : WeChat Pay, Alipay+, etc. (voir la description des moyens de paiement)
refund_idStringNuméro de remboursement
m_refund_idStringNuméro de remboursement défini par le marchand et fourni lors de la demande
transaction_idStringNuméro de transaction
acquirer_idStringNuméro de transaction de l’établissement de règlement
refund_amountStringMontant du remboursement soumis
refund_currencyStringDevise du remboursement
order_idStringNuméro de commande du marchand
refund_descriptionStringDescription de la commande
refund_timeStringHeure du remboursement
stateStringStatut 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

  1. Après l’envoi d’une demande de remboursement, nous renvoyons le statut refund processing.
  1. 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 notificationIntervalle
110s
230s
360s
4300s
53600s
...3600s
153600s

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 :
CodeChampDescription
00paidPaiement réussi
01authorizedAutorisation réussie
02pendingPaiement créé
03processingEn attente de paiement
04verifyLe client a payé et le paiement est en cours d’examen pour des raisons de contrôle des risques.
05declinedPaiement refusé
06failedPaiement échoué
07expiredPaiement expiré
08cancelledPaiement annulé
2. Statuts de remboursement :
CodeChampDescription
20to-be-approvalEn attente de l’approbation d’un administrateur.
21refund pendingLe solde actuel est insuffisant. Le remboursement sera soumis automatiquement lorsque les fonds seront suffisants.
22refund processingLa demande de remboursement a été soumise et est en cours de traitement par le système.
23refundedLe remboursement a été effectué avec succès.
24refund failedLe remboursement a échoué. Veuillez réessayer.
25refund errorLe remboursement a échoué. Veuillez contacter notre service client en ligne.
26refund cancelledL’ordre de remboursement a été annulé.