protest_notify_url during paymentPOST your protest_notify_url
Content-Type: application/json
{
"encryptedData": "U2FsdGVkX1+ghi789...=",
"encryptedKey": "aZLW7pFrNgc+kJxsT2...=",
"signType": "RSA256"
}// 1. RSA decrypt encryptedKey with OnlinePay Public Key → get AES key
// 2. AES decrypt encryptedData with AES key → get plaintext JSON below| Parameter | Type | Required | Description |
|---|---|---|---|
| tradeNo | String | Yes | Platform transaction order number |
| merOrderNo | String | Yes | Merchant order number |
| code | String | Yes | Notification type code, fixed value 11 |
| message | String | Yes | Notification message |
| reason | String | No | Chargeback reason description |
| currency | String | Yes | Chargeback amount currency |
| amount | String | Yes | Chargeback amount |
| chargebackFee | String | Yes | Chargeback fee |
| chargebackCurrency | String | Yes | Chargeback currency |
| signType | String | Yes | MD5 or RSA256 |
| sign | String | Yes | Signature value for verifying notification authenticity |
{
"tradeNo": "T202309011234567890",
"merOrderNo": "MER20230901001",
"code": "11",
"message": "chargeback",
"reason": "Unauthorized transaction",
"currency": "USD",
"amount": "100.00",
"chargebackFee": "15.00",
"chargebackCurrency": "USD",
"signType": "RSA256",
"sign": "d4e5f6g7h8..."
}sign, signType, skip null/empty)key1=value1&key2=value2MD5(signString + md5Key).toUpperCase() == signRSA-SHA256-Verify(signString, sign, OnlinePay_PublicKey)Fields: tradeNo, merOrderNo, code, message, reason, currency, amount, chargebackFee, chargebackCurrency
Sign string: amount=100.00&chargebackCurrency=USD&chargebackFee=15.00&code=11¤cy=USD&merOrderNo=MER20230901001&message=chargeback&reason=Unauthorized transaction&tradeNo=T202309011234567890HTTP/1.1 200 OK
Content-Type: text/plain
success