支付接口文档

1. 协议规则

传输方式:采用HTTP传输(生产环境建议HTTPS)
提交方式:采用POST form方式提交
字符编码:UTF-8
签名算法:MD5

1.1 参数规范

交易金额:默认为人民币交易,单位为分,参数值不能带小数。

1.2 安全规范

签名算法

签名生成的通用步骤如下

第一步:设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:

◆ 参数名ASCII码从小到大排序(字典序);

◆ 如果参数的值为空也要参与签名;

◆ 参数名区分大小写;

◆ 验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步:在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

如请求支付系统参数如下:

    Map signMap = new HashMap<>();

        Integer mchId = 20000000;
        Integer amount = 50000;

        signMap.put("mchId", mchId);
        signMap.put("productId", "8020");
        signMap.put("mchOrderNo", "1234567899");
        signMap.put("amount", amount);
        signMap.put("notifyUrl", "http://123.com");
        signMap.put("sign", "C380BEC2BFD727A4B6845133519F3AD6");

待签名值:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&key=EWEFD123RGSRETYDFNGFGFGSHDFGH
签名结果:5E0AA05DD4BB4FE5AB65608123EBA591
最终请求支付系统参数:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&sign=5E0AA05DD4BB4FE5AB65608123EBA591

商户登录商户系统后,通过安全中心查看或修改私钥key。

2. 统一下单

接口描述

业务通过统一下单接口可以发起任意三方支付渠道的支付订单。业务系统不必关心该如何调用三方支付,统一下单接口会根据业务系统选择的支付渠道ID,选择对应支付渠道的支付产品,发起下单请求,然后响应给业务系统支付请求所需参数。

接口链接

接口路径:/api/v3/pay/order/create

请求参数

字段名 变量名 必填 类型 示例值 描述
商户ID mchId int 20001222 分配的商户号
支付产品ID productId int 1001 支付产品ID(联系客服)
商户订单号 mchOrderNo String(50) 20160427210604000490 商户生成的订单号
支付金额 amount int 10000 支付金额,单位分
支付结果后台回调URL notifyUrl String(200) 商户回调地址 支付结果回调URL
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 签名值,详见签名算法

返回结果

字段名 变量名 必填 类型 示例值 描述
返回状态码 code String(16) 200 200表示成功,否则失败,详见错误码
返回状态码说明 msg String(128) success success表示成功,否则失败,详见错误码
下单返回json数据 data JsonObject {"mchOrderNo":"20160427210604000490","payOrderId":"xw20230801981696064923",
"payUrl":"http://xxx.com","sign":"441237352144DB9FAEF68C4F4E07E88B"}
code为200的时候有返回
以下在code为200的时候有返回json数据字段 data 说明
字段名 变量名 必填 类型 示例值 描述
商户订单号 mchOrderNo String(50) 20160427210604000490 商户生成的订单号
支付订单号 payOrderId String(50) xw20230801981696064923 本渠道系统的订单号
支付参数 payUrl String(200) http://xxx.com 支付地址
签名 sign String(32) 441237352144DB9FAEF68C4F4E07E88B 签名值,详见签名算法

3. 查询支付订单

接口描述

业务系统通过查询支付订单接口获取最新的支付订单状态,并根据状态结果进一步处理业务逻辑。

接口链接

接口路径:/api/v3/pay/order/query

请求参数

字段名 变量名 必填 类型 示例值 描述
商户ID mchId String(30) 1000000010 本渠道分配的商户号
商户订单号 mchOrderNo String(50) 20160427210604000490 商户生成的订单号
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 签名值,详见签名算法

返回结果

字段名 变量名 必填 类型 示例值 描述
返回状态码 code String(16) 200 200表示成功,否则失败,详见错误码
返回状态码说明 msg String(128) success success表示成功,否则失败,详见错误码
查单返回json数据 data JsonObject {"payOrderId":"xw20230801981696064923","mchId":20001222,"productId":1001,
"mchOrderNo":"20160427210604000490","amount":10000,"status":2,
"payTime":"1690901759743","sign":"480FC39677A83D697CB6F5043CC26C48"}
code为200的时候有返回
以下在code为200的时候有返回json数据字段 data 说明
字段名 变量名 必填 类型 示例值 描述
支付订单号 payOrderId String(30) xw20230801981696064923 本渠道系统的订单号
商户ID mchId int 20001222 本渠道分配的商户号
支付产品ID productId int 1001 支付产品ID
商户订单号 mchOrderNo String(50) 20160427210604000490 商户生成的订单号
支付金额 amount int 10000 支付金额,单位分
状态 status int 1 支付状态,0-订单生成,1-支付中,2-支付成功,3-业务处理完成
支付成功时间 payTime Long 1505049094262 精确到毫秒
签名 sign String(32) 441237352144DB9FAEF68C4F4E07E88B 签名值,详见签名算法

4. 支付结果通知

接口描述

接口链接

系统根据商户提交支付请求时上传的参数notifyUrl的值(异步通知地址)返回支付结果,如无法收到支付结果,请检查上传的notifyUrl是否有效。

通知参数

字段名 变量名 必填 类型 示例值 描述
支付订单号 payOrderId String(30) xw20230801981696064923 本渠道系统的订单号
商户ID mchId String(30) 20001222 本渠道系统分配的商户号
支付产品ID productId int 1001 支付产品ID
商户订单号 mchOrderNo String(30) 20160427210604000490 商户生成并上传的订单号
支付金额 amount int 10000 支付金额,单位分
状态 status int 1 支付状态,0-订单生成,1-支付中,2-支付成功,3-业务处理完成
支付成功时间 payTime long 精确到毫秒
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 签名值,详见签名算法

返回结果

商户收到通知请求后,需返回字符串success给系统,系统收到success表示通知成功,商户返回非success则表示通知失败,系统会再次发送通知。(通知频率为60/120/180,单位:秒)

5. 支付产品

产品ID 产品名称 支付类型
1001 支付宝话费 支付宝
2001 微信话费 微信

具体对接支付产品请咨询客服人员

6. 错误码

错误码值 描述 原因 解决方案
1 系统错误 系统维护中 系统异常,请用相同参数重新调用
40005 签名验证失败 签名验证失败 请检查上传参数或返回参数