Notification

交易异步通知

交易完成/退款完成/产生拒付的时候会往交易请求的参数notificationUrl的地址发送异步的 HTTP 通知,接收到通知无需返回任何信息,当请求返回的 HTTP CODE 是 200 的时候认为接受成功,HTTP CODE 是其他值的时候系统会在第一次发送失败后的 5s,5m,15m,30m再次发送通知

通知请求格式为: HTTP POST application/json

通知实例

{
    "code": 100,
    "appId": 3,
    "isTest": true,
    "uniqueId": "1867098610731065345",
    "transactionType": "Sale",
    "transactionCurrency": "USD",
    "transactionAmount": "94.93",
    "transactionId": "1733985972",
    "billDescription": "description.com",
    "transactionCardNumber": "485023******9618",
    "transactionMessage": "Approved",
    "message": "successful transaction",
    "timestamp": 1733985979185,
    "sign": "82647d814560b4104db20f65388068ee576036e155d7b9964b9f7fe3c12c8d77"
}

通知签名 Sign

签名规则 :按照返回报文除 sign 以外所有参数,按照ASCII从小到大的顺序排序,取出非空的值组合成字符串,在末尾加上SecretKey,使用 SHA256 加密得到

注意:1. 返回参数并非固定,随时可能增加或减少,请按上述规则验签。

2.如果使用 PHP 语言,在接受 boolean 的时候 可能会把 true/false 转换成 1/0,注意需要还原成 ture/false.再进行验签操作

  • 以上面通知实例-Sale为例,参数排序后顺序如下

appId,billDescription,code,isTest,message,timestamp,transactionAmount,transactionCardNumber, transactionCurrency,transactionId,transactionMessage,transactionType,uniqueId

  • 取出非空字符串,组合字符串如下

3description.com100truesuccessful transaction173398597918594.93485023******9618USD 1733985972ApprovedSale1867098610731065345

  • 最后添加 Secret Key 到末尾,测试用例 Secret Key 为 000000

3description.com100truesuccessful transaction173398597918594.93485023******9618USD 1733985972ApprovedSale1867098610731065345000000

  • 使用 SHA256 加密得到 sign 参数

82647d814560b4104db20f65388068ee576036e155d7b9964b9f7fe3c12c8d77

参考 Demo (Java)

Map<String, Object> map = 通知返回报文 JSON 格式
StringBuffer buffer = new StringBuffer();
map.entrySet().stream().sorted(Map.Entry.comparingByKey())
        .map(x -> x.getValue())
        .filter(x -> ObjectUtils.isNotEmpty(x))
        .forEachOrdered(x -> buffer.append(x));
buffer.append("商户交易 Secret Key");
String sign = Sha256.encode(buffer.toString());

Last updated