传输方式:采用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 | 修改订单状态失败 |