传输方式:采用HTTP传输(生产环境建议HTTPS)
提交方式:采用POST form方式提交
字符编码:UTF-8
签名算法:MD5
交易金额:默认为人民币交易,单位为分,参数值不能带小数。
签名算法
签名生成的通用步骤如下
第一步:设所有发送或者接收到的数据为集合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。
接口描述
业务通过统一下单接口可以发起任意三方支付渠道的支付订单。业务系统不必关心该如何调用三方支付,统一下单接口会根据业务系统选择的支付渠道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的时候有返回 |
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户订单号 | mchOrderNo | 是 | String(50) | 20160427210604000490 | 商户生成的订单号 |
| 支付订单号 | payOrderId | 是 | String(50) | xw20230801981696064923 | 本渠道系统的订单号 |
| 支付参数 | payUrl | 是 | String(200) | http://xxx.com | 支付地址 |
| 签名 | sign | 是 | String(32) | 441237352144DB9FAEF68C4F4E07E88B | 签名值,详见签名算法 |
接口描述
业务系统通过查询支付订单接口获取最新的支付订单状态,并根据状态结果进一步处理业务逻辑。
接口链接
接口路径:/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的时候有返回 |
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 支付订单号 | 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 | 签名值,详见签名算法 |
接口描述
系统根据商户提交支付请求时上传的参数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,单位:秒)
| 产品ID | 产品名称 | 支付类型 |
|---|---|---|
| 1001 | 支付宝话费 | 支付宝 |
| 2001 | 微信话费 | 微信 |
具体对接支付产品请咨询客服人员
| 错误码值 | 描述 | 原因 | 解决方案 |
|---|---|---|---|
| 1 | 系统错误 | 系统维护中 | 系统异常,请用相同参数重新调用 |
| 40005 | 签名验证失败 | 签名验证失败 | 请检查上传参数或返回参数 |