传输方式:采用HTTP传输(生产环境建议HTTPS)
提交方式:采用POST/GET方式提交
字符编码:UTF-8
签名算法:MD5
交易金额:默认为人民币交易,单位为分,参数值不能带小数。
签名生成的通用步骤如下
第一步: 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步: 在stringA最后拼接上key[即 StringA + "&key=" + 私钥 ] 得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
如请求支付系统参数如下:
Map signMap = new HashMap<>(); signMap.put("userId", "test01"); signMap.put("type", "wechat"); signMap.put("money", Double.valueOf(2)); signMap.put("remark", ""); signMap.put("outTradeNo", "P12312321123");待签名值:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&key=EWEFD123RGSRETYDFNGFGFGSHDFGH签名结果:5E0AA05DD4BB4FE5AB65608123EBA591最终请求支付系统参数:money=2.0&outTradeNo=P12312321123&type=wechat&userId=test01&sign=5E0AA05DD4BB4FE5AB65608123EBA591
接口描述
当预制码支付成功, 如果系统有配置代理商的通知地址, 则系统会按照约定通过HTTP协议推送消息到指定地址。
通知参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户订单号 |
tradeOrderId |
是 | String(30) |
E01202112220337586800004
|
商户订单号 |
| 支付系统订单号 |
payOrderId |
是 | String(30) |
P01202112220337587810004
|
支付系统订单号 |
| 商户ID |
mchId |
是 | Long |
20000000
|
商户ID |
| 商户应用ID |
appId |
否 | String(24) | 应用ID | |
| 订单金额 |
orderAmount |
是 | String(30) |
100
|
订单金额,单位分 |
| 优惠金额 |
discountAmount |
是 | int | 0 | 优惠金额,单位分 |
| 支付金额 |
amount |
是 | int | 100 | 支付金额,单位分 |
| 渠道用户ID |
channelUserId |
否 | Stirng |
2088102175745711
|
渠道用户标识 |
| 状态 |
status |
是 | int | 2 | 2-支付成功 |
| 支付产品ID |
productId |
否 | int | 8001 | 支付产品ID |
| 支付产品类型 |
productType |
否 | int | 4 | 支付产品类型: 1-现金收款, 2-会员卡支付, 3-微信支付, 4-支付宝支付,5-云闪付 |
| 门店ID |
storeId |
否 | Long | 1001 | 门店ID |
| 交易成功时间 |
tradeSuccTime |
是 | Long |
1640160410000
|
1640160410000 格式
|
| 预制码ID |
preQrcodeId |
是 | String |
100027
|
预制码ID |
| 签名 |
sign |
是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法 |
返回结果
业务系统处理后同步返回给支付中心,返回字符串 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。(通知频率为 0/5/10/15/20,单位:秒)最多发送5次。
注意:返回的字符串必须是小写,且前后不能有空格。
| 产品ID | 产品名称 |
|---|---|
| 8004 | 微信公众号支付 |
| 8020 | 微信条码支付 |
| 8023 | 微信小程序支付 |
| 8008 | 支付宝服务窗支付 |
| 8021 | 支付宝条码支付 |
| RetCode | 描述 |
|---|---|
| 0 | 成功 |
| 9999 | 业务异常,具体错误详见RetMsg字段 |
| 0100 | 商户签名异常 |
| 0010 | 系统错误 |
| 0011 | 请使用post方法 |
| 0012 | post数据为空 |
| 0013 | 签名错误 |
| 0014 | 参数错误 |
| 0015 | 商户不存在 |
| 0110 | 第三方超时 |
| 0111 | 第三方异常 |
| 0112 | 订单不存在 |
| 0113 | 订单已支付 |
| 0114 | 商品不存在 |
| 0115 | 价格不对 |
| 0116 | 物品数量不对 |
| 0117 | 过程返回255 |
| 0118 | DB错误 |
| 0119 | 支付中心没有对应的渠道 |
| 0120 | 修改订单状态失败 |