Appearance
交易接口规范
交易报文规范
交易报文遵循JSON规范。
请求报文
示例:
java
{
"body":{
…
},
"head":{
"merchantId":"451015200007",
"tranCode":"TD1004",
"tranFlowid":"451015200007799290507578646821",
"tranDate":"20240930",
"tranTime":"101752",
"tranType":"01",
"version":"1.0.1"
}
}
- 请求报文由两部分组成:请求报文头(信息在head节点内)和请求报文体(信息在body节点内)。
- 报文头是每个交易都相同的。请求报文头信息的填写标准请参看“交易公共报文”章节。
- 根据每个交易接口定义的不同,请求报文体的定义请参看“业务交易接口”章节。需按照每个交易接口的定义组装请求报文。
- 客户端请求报文上送时,HTTP POST提交五个参数:
java
merchant_id=商户号;
msg_enc=报文密文(16进制表示);
key_enc=会话密钥密文(16进制表示);
sign=报文签名(16进制表示);
mer_order_id=商户订单号(可与请求报文头的tranflowid一致);
服务器端收到请求后按照HTTP的方式获取参数后,按如下步骤处理:
步骤1:使用解密会话密钥
步骤2:对密文报文解密,得到报文明文;
步骤3:验证签名,签名通过后在解析报文内容。
报文加密、签名方式请参看“加密及签名规范”章节
响应报文
示例:
java
{
"body":{
…
},
"head":{
"merchantId":"451015200007",
"tranType":"02",
"tranCode":"TD1004",
"tranDate":"20240930",
"tranFlowid":"451015200007799290507578646822",
"tranTime":"101855",
"respCode":"S0000000",
"respDesc":"交易成功",
"version":"1.0.1"
}
}
- 交易应答报文由两部分组成:应答报文头(信息在head节点内)和应答报文体(信息在body节点内)。
- 报文头是每个交易都相同的。应答报文头信息的填写标准请参看“交易公共报文”章节。
- 根据每个交易接口定义的不同,应答报文体的定义请参看“业务交易接口”章节。需按照每个交易接口的定义解析应答报文。
- 响应报文Http返回的字符串格式,请参看“交易公共报文/http参数格式”章节
- 服务器端响应报文返回时,处理步骤:
- 将商户号、报文密文、会话密钥和签名解析出来,分隔符“&”,
- 解密会话密钥
- 对密文报文解密,得到报文明文
- 验证签名,签名通过后在解析报文内容
- 报文解密、验签方式请参看“加密及签名规范”章节。
接口响应码说明
- 对于交易接口和查询接口respCode的意义是不同的
- 业务接口中respCode与报文体内tranState直接代表交易是否成功(respCode=S0000000且tranState=01代表成功)
- 查询交易中,只代表查询的结果被正常返回,具体查询的交易是否成功还需要看报文体中的描述。
业务接口
respCode代表交易成功是否成功,对于支付交易,成功又分为同步交易成功和异步交易受理成功(同步或异步成功由后端渠道决定),所以需要通过tranState状态进一步区分。
举例说明:
下单:
- 鉴权通过,respCode返回 S0000000 , tranState 为01;(短信发送成功)
- 下单失败,respCode返回 E开头且非E0000000;(下单失败,鉴权未通过或者其他错误)
支付:
- 交易成功,respCode返回 S0000000 , tranState 为00;
- 交易失败,respCode返回 E开头且非E0000000;
查询接口
respCode代表查询的动作是否成功,tranRespCode代表被查询的交易的是否成功,但是交易成功又分为同步交易成功和异步交易受理成功,所以需要通过tranState状态进一步区分。
出现tranState=01时可能是因为交易走的异步处理机制后端渠道,无法实时获得交易结果。
举例说明:
- 查询交易失败,如:查询条件错误,respCode返回一个错误码。
- 查询交易成功,订单交易成功,respCode返回 S0000000, tranRespCode 为S0000000, tranState 为00 (交易成功)。
- 查询交易成功,订单交易受理成功,respCode返回 S0000000, tranRespCode 为S0000000, tranState 为01/02 (处理中)。
- 查询交易成功,订单交易失败,respCode返回 S0000000, tranRespCode 为任意值,tranState 为03。
交易结果判断逻辑
- 支付请求鉴权接口(TD1004/TD1005)
head->respCode | body->tranState | 判断结果 |
---|---|---|
S0000000 | 01 | 短信发送成功 |
其他 | 任意或节点不存在 | 下单失败 |
- 支付消费交易接口(TD4005/TD4006/TD4007)
head->respCode | body->tranState | 判断结果 |
---|---|---|
S0000000 | 00 | 交易成功 |
S0000000 | 01/02 | 交易处理中 |
E0000000 | 任意(有可能节点不存在) | 处理中 |
ERN00000 ERN00007 ERN00009 | 任意(有可能节点不存在) | 交易状态未知,待查询 |
EB000016 | 01 | 可再次发起支付(或待查询) |
除以上响应码,E开头非E0000000 | 任意(有可能节点不存在) | 交易失败 |
其他 | 处理中 |
- 单笔支付查询接口(TD2001)
head->respCode | body->tranRespCode | body->tranState | 判断结果 |
---|---|---|---|
非S0000000 | 任意 | 任意 | 本次查询失败,请再次查询 |
S0000000 | S0000000 | 00 | 交易成功 |
S0000000 | 任意 | 03 | 交易失败 |
S0000000 | S0000000 | 01/02 | 交易处理中 |
其它 | 任意 | 任意 | 处理中 |