Fiat Currency Disbursement Asynchronous Notification
# Asynchronous Notification of Disbursement
This interface is provided by the merchant. The platform requests this interface when the collection is successful When an HTTP request is received, please respond with httpcode=200 (HTTP Response Status Code). Otherwise, 16 notifications will be repeatedly sent within 5 hours.
# Best Practice
- For determining success, orderStatus is 1.
- On refund determination: orderStatus is 2. This situation generally occurs in case of user complaints and bank risk control returns. Merchants should record related information and handle it according to their own business processes (a callback success will be received before getting this callback status).
- If the merchant's business logic fails to process, please change the HTTP response status code to 400 or 500 (non-200).
- Cheezeepay may send multiple callbacks with the same status. The merchant should handle this compatibility accordingly. If the merchant's own business has been processed successfully, they must return the HTTP response status code to 200.
- Please ensure to verify the callback IP➕signature verification.
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
merchantId | String | Y | Merchant ID | CH10001165 |
mchOrderNo | String | Y | Merchant Order Number | 20240109021317 |
platOrderNo | String | Y | Platform Order Number | 1746070852804415488 |
orderStatus | int | Y | Order Status | 1-Success 2-Refund 4-Failure |
payAmount | String | Y | Order Actual Payment Amount | 900 |
amountCurrency | String | Y | Order Amount Currency | INR |
fee | String | Y | Handling Fee | 90 |
feeCurrency | String | Y | Handling Fee Currency | INR |
gmtEnd | long | Y | Completion Time (Timestamp: Milliseconds) | 1705130760000 |
sign | String | Y | Signature | uoEdxeji3auJ0GwrBGTBZBqKw+kwrxIgomNI0 uaViTMSvzRZZcySg3LKs9t0G95ksPL89EqgA C9VVIclSLNulbJ+g3oQKD5OpEHS0X6M8BnS li+7tkesbpI7jcG6LvGF3r7PkfSImYFtVgK4Ink3T 11e6+slsLcjDHW5rYqxSkaFRHN049GgazsO82 UHwEntWQH50lGaaRIegVtf8ra3c9xo3pZ4TMlH 74Ce3kMffCw37D2trtuUQA9TBdHn6bWrNbpwv gKlxtb6HJBNDurdz74s1t4gl6g5YVnvS1EaOz3/M u0n1ipcJ5qfppzJZmr/unVfyumqfi8yJPDLPXSwug== |
# Asynchronous Notification Message Example
{
"merchantId":"CH10001165",
"mchOrderNo":"20240109021317",
"platOrderNo":"1746070852804415488",
"orderStatus":1,
"payAmount":"900",
"amountCurrency":"INR",
"fee":"90",
"feeCurrency":"INR",
"gmtEnd":1705130760000,
"sign":"uoEdxeji3auJ0GwrBGTBZBqKw+kwrxIgomNI0uaViTMSvzRZZcySg3LKs9t0G95ksPL89EqgAC9VVIclSLNulbJ+g3oQKD5OpEHS0X6M8BnSli+7tkesbpI7jcG6LvGF3r7PkfSImYFtVgK4Ink3T11e6+slsLcjDHW5rYqxSkaFRHN049GgazsO82UHwEntWQH50lGaaRIegVtf8ra3c9xo3pZ4TMlH74Ce3kMffCw37D2trtuUQA9TBdHn6bWrNbpwvgKlxtb6HJBNDurdz74s1t4gl6g5YVnvS1EaOz3/Mu0n1ipcJ5qfppzJZmr/unVfyumqfi8yJPDLPXSwug=="
}
# Asynchronous Notification Code Implementation Demo
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
@RestController
@RequestMapping("callback")
public class TestCallbackController {
/**
* Platform public key
*/
public static String PLATFORM_PUB_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB";
/**
* payOutCallback
* @param paramMap
* @param response
*/
@PostMapping("payOut")
public void payOutCallback(@RequestBody Map<String, Object> paramMap, HttpServletResponse response) throws Exception{
boolean verifyResult = CheeseTradeRSAUtil.verifySign(paramMap, PLATFORM_PUB_KEY);
if (verifyResult) {
//Signature verification successful
//Order notification business processing logic
String merchantId = (String)paramMap.get("merchantId");
String mchOrderNo = (String)paramMap.get("mchOrderNo");
String platOrderNo = (String)paramMap.get("platOrderNo");
Integer orderStatus = (Integer)paramMap.get("orderStatus");
String payAmount = (String)paramMap.get("payAmount");
String amountCurrency = (String)paramMap.get("amountCurrency");
String fee = (String)paramMap.get("fee");
String feeCurrency = (String)paramMap.get("feeCurrency");
Long gmtEnd = (Long)paramMap.get("gmtEnd");
} else {
//Signature verification failed
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
}