Skip to content

异步通知

说明:

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

通知签名 Sign

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


通知返回示例

交易响应实例

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"
}

退款响应实例

json
{
  "code": 111,
  "transactionType": "Refund",
  "appId": 3,
  "uniqueId": "1867098610731065345",
  "refundCurrency": "USD",
  "refundAmount": "8.88",
  "refundUniqueId": "1867098723574620161",
  "refundMessage": "退款成功",
  // 对应退款请求的refundTransactionId
  "merchantRefundId": "1733985999",
  "message": "Refund successful",
  "timestamp": 1733986022411,
  "sign": "9769300b6821e0e0fe6a8044a1456066c226762e17ba3f0e493fd12ed12da9b8"
}

拒付响应实例

json
{
  "appId": 1862433537316352001,
  "transactionType": "Chargeback",
  "chargebackCurrency": "HKD",
  "chargebackAmount": "11.00",
  "uniqueId": "1862437361955270657",
  "transactionId": "1732874641",
  "chargebackUniqueId": "1864601282577305601",
  "timestamp": 1733390573134,
  "sign": "614363d4c65c4d15f6ee52cdef770db057a3613ddc7f92f65201b09a853c271c"
}

签名示例

交易响应实例为例

text
参数排序后顺序如下
appId,billDescription,code,isTest,message,timestamp,transactionAmount,
transactionCardNumber,transactionCurrency,
transactionId,transactionMessage,transactionType,uniqueId

取出非空字符串,组合字符串如下
3description.com100truesuccessful transaction173398597918594.93485023******9618USD1733985972ApprovedSale1867098610731065345

添加Secret Key到末尾,以Secret Key为"000000"为例,添加完毕后
3description.com100truesuccessful transaction173398597918594.93485023******9618USD1733985972ApprovedSale1867098610731065345000000

最后使用SHA256加密得到
82647d814560b4104db20f65388068ee576036e155d7b9964b9f7fe3c12c8d77

JAVA Demo

Java
  Map<String, Object> map = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {
        });
        StringBuffer buffer = new StringBuffer();
        map.entrySet().stream().sorted(Map.Entry.comparingByKey())
                .filter(x -> !ObjectUtils.isEmpty(x.getValue()) && !"sign".equals(x.getKey()))
                .forEachOrdered(x -> buffer.append(x.getValue()));
        buffer.append("000000");
        String sign = DigestUtils.sha256Hex((buffer.toString()));
        System.out.println(sign);