Appearance
异步通知
说明:
当交易完成/退款完成/产生拒付的时候会往交易请求的参数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加密得到
82647d814560b4104db20f65388068ee576036e155d7b9964b9f7fe3c12c8d77JAVA 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);