API 回调 (POST 方法)
当商户系统调用了某些 支付 API 后,OTT Pay API 服务器在从支付通道获知成功支付后会将支付结果发送到指定的商户系统回调 URL(回调 URL 需要在 支付 API 的请求参数中指定,请参见特定 API 说明)。
回调信息 ( JSON 格式):
字段 | 描述 | 备注 |
---|---|---|
rsp_code | 通知码 | “SUCCESS” |
rsp_msg | 通知讯息 | “success” |
merchant_id | 商户编号 | |
data | 加密的回调数据 | |
md5 | 信息摘要 |
解密步骤
其中 data 为加密的回调数据,对其解密的步骤如下:
- 将回调信息中的 md5 字符串和 OTT Pay 提供的商家 signkey 按顺序拼接成一个字符串。
- 对这个字符串进行16位的 md5 计算(用大写方式表示结果),得到解密用的密钥。
- 对回调信息中的 data 字符串应用 Base64 解码并使用刚才得到的解密密钥进行标准AES解密(AES工作模式:ECB,密钥长度:128)。
解密后数据为 JSON 格式,内容如下:
字段 | 描述 | 备注 |
---|---|---|
finish_time | 交易时间 | yyyyMMddHHmmss(北京时间) |
order_id | 交易编号 | |
amount | 交易金额 | |
tip | 小费 | |
bizpay_order_id | 渠道订单编号 | |
remarks | 备注 | |
sale_num | 商户销售编号 | |
convenience_fee | 手续费 |
解密示例
这是带有交易数据( JSON 数据格式 )的回调消息,如下所示,
{
"data": "vg8LJmi7ryeVxUTVfPC6N1l5ebL9cgn4MdlyLFEL6eqZQN+XvkvNhZevFmRitDLTUTcAcRnKYs407K3ePY2pslEgZYDoa9x80PBh95s7aqAYCwUlY5j9IUtklLlzqNT0mFPS7Fn5p6cr1EkBRVh82QHueCdkWVoFhvVHVYYrwQqF5cmPO+JNuDOei6goomz1QTfvv7M8zc4TT+r/EwKIDm4eoV9EeTk98gSiUy4+2ThLRrtZOFHqVP7OAjJ318X2EIKoZRA5lp42kdRVmd/mXi8aZpTVEiAT2GK7p3TNXFNXuPLcl6DhEUK9FLMrHcl4",
"rsp_code": "SUCCESS",
"rsp_msg": "success",
"merchant_id": "ON00004652",
"md5": "5A917182659DE14DCB3022CA6518F34F"
}
步骤-1:将回调信息中的 md5 字符串和 OTT Pay 提供的商家 signkey 按顺序拼接成一个字符串。
md5 字符串:
5A917182659DE14DCB3022CA6518F34F
signkey:
A8B5FE540E38A5A9
拼接后:
5A917182659DE14DCB3022CA6518F34FA8B5FE540E38A5A9
步骤-2:对拼接后的字符串进行 16 位的 md5 计算(用大写方式表示结果),得到解密用的密钥
BFE59D83C221F217
步骤-3: 对回调信息中的 data 字符串应用 Base64 解码并进行 AES 解密,得到:
{
"amount": "3",
"bizpay_order_id": "AL5909918566288061",
"exchange_rate": "5.057030",
"tip": "1",
"merchant_id": "ON00004652",
"order_id": "16795056216014900",
"finish_time": "2023-03-23 01:21:53",
"remarks": "可以",
"sub_openId": "2088032832386722"
}