API REFERENCE
Notificações assíncronas
Durante todo o ciclo de vida de um pedido, enviamos uma notificação assíncrona para notify_url a cada alteração de status. O endpoint receptor deve usar https. As notificações incluem uma assinatura e parâmetros de pagamento (no formato json).
Dica
- O URL de notificação é o notify_url enviado. Após a conclusão do pagamento, a YabandPay envia para esse URL as informações relevantes sobre o pagamento e o usuário. A instituição adquirente terceirizada deve receber a notificação e verificar a assinatura antes de realizar qualquer outra ação.
- Durante as trocas de notificações entre servidores, se a instituição adquirente terceirizada retornar uma resposta que não indique sucesso ou se a solicitação expirar, a YabandPay considerará a notificação malsucedida. A YabandPay tentará reenviar notificações periodicamente de acordo com sua estratégia de novas tentativas para maximizar a probabilidade de entrega, mas não garante a entrega final.
- Como as notificações do servidor podem ser reenviadas, o mesmo aviso pode chegar várias vezes ao sistema parceiro. O sistema parceiro deve tratar corretamente as notificações duplicadas. Recomendamos verificar primeiro o estado dos dados comerciais correspondentes para determinar se a notificação já foi processada. Processe-a apenas se ainda não tiver sido tratada; caso contrário, retorne sucesso imediatamente. Antes de verificar e processar os dados comerciais, use bloqueios de dados para controlar a concorrência e evitar inconsistências causadas pela reentrada da função.
- A YabandPay envia notificações assíncronas a partir dos endereços IP abaixo. Recomendamos adicioná-los à lista de permissões do firewall. 8.211.41.31 8.211.10.244 8.211.8.123
1. Notificações assíncronas de pagamento
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sign | String | Signature |
| type | String | payment |
| user | String | UID ou e-mail da conta de caixa |
| amount | String | Valor do pagamento enviado |
| tip_amount | String | Gorjeta incluída no valor total |
| trade_id | String | Número de transação YabandPay |
| currency | String | Moeda de pagamento enviada |
| settlement_amount | String | Valor na moeda de liquidação |
| settlement_currency | String | Moeda de liquidação |
| exchange_rate | String | Valor do pagamento/valor de liquidação |
| amount_cny | String | Valor do pagamento em CNY |
| settlement_rate | String | Taxa de câmbio de liquidação CNY |
| order_id | String | Número do pedido do estabelecimento |
| transaction_id | String | Número do pedido retornado pelo método de pagamento, por exemplo, número da transação WeChat Pay ou Alipay+. Na maioria dos casos, é igual a acquirer_id. |
| acquirer_id | String | Acquirer Reference Number (ARN) |
| description | String | Descrição do pedido |
| createDate | String | Hora de criação do pedido |
| state | String | Status do pagamento: Processing, Paid, Cancelled, Expired, Verify, Authorized, Declined, Failed |
| demo | String | Campo definido pelo cliente |
| out_trade_no | String | Número interno do pedido no sistema de transações |
| sub_pay_method | String | Método de pagamento: WeChat Pay, Alipay+ etc. (consulte as descrições dos métodos de pagamento) |
| pay_method | String | Tipo de pagamento: offline, online |
| paid_time | String | Horário do pagamento |
| yb_transaction_id | String | ID exclusivo da transação YabandPay |
| 3ds_status | String | status 3ds |
| 3ds_trxid | String | ID exclusivo 3ds |
| 3ds_version | String | versão 3ds |
3DS response statuses:
| Parâmetro | Tipo | Descrição |
|---|---|---|
| A | String | Tentativa de processamento realizada; não autenticado/verificado, mas há comprovante de tentativa de autenticação/verificação. |
| C | String | Desafio necessário; é necessária autenticação adicional. |
| D | String | Desafio necessário; autenticação desacoplada confirmada. |
| I | String | Apenas informativo; preferência do estabelecimento por desafio reconhecida. |
| N | String | Não autenticado/conta não verificada; transação negada. |
| R | String | Autenticação/verificação da conta rejeitada; o emissor rejeita a autenticação/verificação e solicita que não se tente a autorização. |
| U | String | Não foi possível realizar a autenticação/verificação da conta devido a um problema técnico ou outro problema. |
| Y | String | Autenticação/verificação da conta bem-sucedida. |
Exemplo de notificação assíncrona:
{
"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. Notificações assíncronas de reembolso
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sign | String | Signature |
| type | String | refund |
| user | String | UID ou e-mail da conta de caixa |
| pay_method | String | online ou offline para o pedido de pagamento original |
| sub_pay_method | String | Método de pagamento do pedido original: WeChat Pay, Alipay+ etc. (consulte as descrições dos métodos de pagamento) |
| refund_id | String | Número do reembolso |
| m_refund_id | String | Número do pedido de reembolso do estabelecimento informado ao iniciar o reembolso |
| transaction_id | String | Número da transação |
| acquirer_id | String | Número da transação da instituição de liquidação |
| refund_amount | String | Valor do reembolso enviado |
| refund_currency | String | Moeda do reembolso |
| order_id | String | Número do pedido do estabelecimento |
| refund_description | String | Descrição do pedido |
| refund_time | String | Hora do reembolso |
| state | String | Status do reembolso: to-be-approval, refund pending, refund processing, refunded, refund error, refund failed, refund cancelled |
Notification information:
{
"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"}
}
Dica
- Após o envio de um reembolso, retornamos o status refund processing.
- Quando o reembolso for concluído, enviaremos uma notificação com o status refunded.
3. Frequência das notificações assíncronas
Atenção: a resposta à notificação deve retornar o status-code 200 e “ok” no corpo. Se “ok” não for retornado, enviaremos a notificação novamente.
A frequência das notificações é a seguinte:
| Notification attempt | Interval |
|---|---|
| 1 | 10s |
| 2 | 30s |
| 3 | 60s |
| 4 | 300s |
| 5 | 3600s |
| ... | 3600s |
| 15 | 3600s |
Se não recebermos a resposta “ok” correta, interromperemos o envio de notificações após 15 tentativas.
4. Descrições dos status de pagamento nas notificações assíncronas
1. Status de pagamento:
| Code | Campo | Descrição |
|---|---|---|
| 00 | paid | Pagamento bem-sucedido |
| 01 | authorized | Autorização bem-sucedida |
| 02 | pending | Pagamento criado |
| 03 | processing | Aguardando pagamento |
| 04 | verify | O cliente efetuou o pagamento, que está sob análise por motivos de controle de risco. |
| 05 | declined | Pagamento recusado |
| 06 | failed | Pagamento falhou |
| 07 | expired | Tempo limite do pagamento esgotado |
| 08 | cancelled | Pagamento cancelado |
2. Status de reembolso:
| Code | Campo | Descrição |
|---|---|---|
| 20 | to-be-approval | Aguardando aprovação do administrador. |
| 21 | refund pending | O saldo atual é insuficiente. O reembolso será enviado automaticamente quando houver fundos suficientes. |
| 22 | refund processing | A solicitação de reembolso foi enviada e está sendo processada pelo sistema. |
| 23 | refunded | O reembolso foi concluído com sucesso. |
| 24 | refund failed | O reembolso falhou. Tente novamente. |
| 25 | refund error | O reembolso falhou. Entre em contato com o suporte ao cliente online. |
| 26 | refund cancelled | O pedido de reembolso foi cancelado. |
