统一支付下单
注意对接银通在线系统 地址改成:pay.yintongzaixian.com
统一下单
商户业务系统通过统一下单接口发起支付收款订单,店来宝支付网关会根据商户配置的支付通道路由支付通道完成支付下单。支付网关根据不同的支付方式返回对应的支付参数,业务系统使用支付参数发起收款。
接口说明
适用对象:普通商户 特约商户
请求URL:https://pay.yintongzaixian.com/api/pay/unifiedOrder
请求方式:POST
请求类型:application/json 或 application/x-www-form-urlencoded
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号 |
| 应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID |
| 商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的订单号 |
| 支付方式 | amount | 是 | int | 100 | 支付金额,单位分 |
| 货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny |
| 客户端IP | clientIp | 否 | String(32) | 210.73.10.148 | 客户端IPV4地址 |
| 商品标题 | subject | 是 | String(64) | 店来宝商品标题测试 | 商品标题 |
| 商品描述 | body | 是 | String(256) | 店来宝商品描述测试 | 商品描述 |
| 门店编号 | storeId | 否 | int | 10010 | 商户的门店ID |
| 码牌ID | qrcId | 否 | long | 10010432445333 | 商户的码牌ID |
| 终端设备信息 | deviceInfo | 否 | String(256) | {“deviceType”:“auto_pos”,“deviceNo” :“abcde12345”} | 智能POS、收银插件下单必填,json格式字符串,详见终端设备信息说明 |
| 异步通知地址 | notifyUrl | 否 | String(128) | https://pay.yintongzaixian.com/notify.htm | 支付结果异步回调URL,只有传了该值才会发起回调 |
| 跳转通知地址 | returnUrl | 否 | String(128) | https://pay.yintongzaixian.com/return.htm | 支付结果同步跳转通知URL |
| 失效时间 | expiredTime | 否 | int | 3600 | 订单失效时间,单位秒,默认2小时.订单在(创建时间+失效时间)后失效 |
| 渠道参数 | channelExtra | 否 | String(256) | {“auth_code”:”13920933111042”} | 特定渠道发起的额外参数,json格式字符串.详见渠道参数说明 |
| 分账模式 | divisionMode | 否 | int | 0 | 分账模式: 0-该笔订单不允许分账[默认], 1-支付成功按配置自动完成分账支付完成自动分账【需包含自动分账接收方,否则自动更新为0(V3.0.0新增)】 , 2-商户手动分账(解冻商户金额) |
| 扩展参数 | extParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回 |
| 请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳 |
| 接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0 |
| 签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法 |
| 签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式 |
终端设备信息说明
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 设备类型 | deviceType | 是 | String(20) | auto_pos | 智能POS:auto_pos,收银插件:cash_plugin |
| 设备号 | deviceNo | 是 | String(128) | abcde12345 | 设备号必填。设备类型为收银插件时传激活码;其他传设备号 |
| 设备厂商 | provider | 否 | String(20) | abc | 除智能POS外的其他设备类型,设备厂商必填 |
请求示例数据JSON
{
"amount": 8,
"extParam": "",
"mchOrderNo": "mho1624005107281",
"subject": "商品标题",
"wayCode": "ALI_BAR",
"sign": "84F606FA25A6EC4783BECC08D4FDC681",
"reqTime": "1624005107",
"body": "商品描述",
"version": "1.0",
"channelExtra": "{\"authCode\":\"280812820366966512\"}",
"appId": "60cc09bce4b0f1c0b83761c9",
"clientIp": "192.166.1.132",
"notifyUrl": "https://www.yintongzaixianpay.cn",
"signType": "MD5",
"currency": "cny",
"returnUrl": "",
"mchNo": "M1623984572",
"divisionMode": 1
}
返回参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码 |
| 返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误 |
| 签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回 |
| 返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据 |
data数据格式
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 支付订单号 | payOrderId | 是 | String(30) | U12021022311124442600 | 返回支付系统订单号 |
| 商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 返回商户传入的订单号 |
| 订单状态 | orderState | 是 | int | 2 | 支付订单状态 0-订单生成 1-支付中 2-支付成功 3-支付失败 4-已撤销 5-已退款 6-订单关闭 |
| 支付数据类型 | payDataType | 是 | String | payUrl | 支付参数类型 payUrl-跳转链接的方式 form-表单方式 wxapp-微信支付参数(微信公众号,小程序,app支付时) aliapp-支付宝app支付 ysfapp-云闪付app支付参数 codeUrl-二维码地址 codeImgUrl-二维码图片地址 payargs-字符串参数 none-空支付参数 |
| 支付数据 | payData | 否 | String | http://www.yintongzaixian.cn/pay.html | 发起支付用到的支付参数,如微信公众号和小程序发起支付使用的参数等 |
| 订单信息数据 | payOrderInfo | 否 | String | {} | 订单信息, 当直接支付成功时会返回此数据 |
| 渠道错误码 | errCode | 否 | String | ACQ.PAYMENT_AUTH_CODE_INVALID | 上游渠道返回的错误码 |
| 渠道错误描述 | errMsg | 否 | String | Business Failed 失败 | 上游渠道返回的错误描述 |
返回示例数据JSON
{
"code": 0,
"data": {
"errCode": "ACQ.PAYMENT_AUTH_CODE_INVALID",
"errMsg": "Business Failed【支付失败,获取顾客账户信息失败,请顾客刷新付款码后重新收款,如再次收款失败,请联系管理员处理。[SOUNDWAVE_PARSER_FAIL]】",
"mchOrderNo": "mho1624005752661",
"orderState": 3,
"payOrderId": "P202106181642329900002"
},
"msg": "SUCCESS",
"sign": "F4DA202C516D1F33A12F1E547C5004FD"
}
支付方式
| WayCode | 支付方式 | 说明 |
|---|---|---|
| WEB_CASHIER | WEB收银台 | pc和h5端收银台。web收银台支付指引 |
| QR_CASHIER | 聚合扫码(用户扫商家) | 生成聚合码,支持用户微信/支付宝/云闪付扫码。动态码支付指引 |
| AUTO_BAR | 聚合条码(商家扫用户) | 商户使用扫码设备收款,支持扫微信/支付宝/云闪付付款码。付款码支付指引文档 |
| TG_PAY | 托管支付 | app支付、h5支付、半屏小程序支付等场景。托管支付接入指引 |
| ALI_BAR | 支付宝条码 | |
| ALI_JSAPI | 支付宝生活号 | |
| ALI_LITE | 支付宝小程序 | |
| ALI_APP | 支付宝APP | |
| ALI_WAP | 支付宝WAP | |
| ALI_PC | 支付宝PC网站 | |
| ALI_QR | 支付宝二维码 | |
| ALI_OC | 支付宝订单码 | |
| ALI_PREJSAPI | 支付宝预授权生活号支付 | |
| ALI_PREBAR | 支付宝预授权条码支付 | |
| ALI_PREQR | 支付宝预授权二维码支付 | |
| WX_BAR | 微信条码 | |
| WX_JSAPI | 微信公众号 | |
| WX_LITE | 微信小程序 | |
| WX_APP | 微信APP | |
| WX_H5 | 微信H5 | |
| WX_NATIVE | 微信扫码 | |
| YSF_BAR | 云闪付条码 | |
| YSF_JSAPI | 云闪付jsapi | |
| AUTO_POS | 智能POS | 智能POS支付指引 |
| DCEP_BAR | 数字人民币条码 | |
| DCEP_QR | 数字人民币二维码 | |
| BANK_B2C | 网银B2C | |
| BANK_B2B | 网银B2B | 网银B2B支付指引 |
| BANK_QUICK | 快捷支付收银台 | 快捷支付接入指引 |
| BANK_AGREE | 快捷支付 | 协议支付接口形式。协议支付接入指引 |
| BANK_TRANSFERCASHIER | 银行卡转账收银台 | 银行卡转账接入指引 |
| BANK_TRANSFER | 银行卡转账 | 银行卡转账接入指引 |
channelExtra参数说明
当 wayCode=AUTO_BAR 或 wayCode=ALI_BAR 或 wayCode=WX_BAR 或 wayCode=YSF_BAR 时,channelExtra必须传auth_code,为用户的付款码值,channelExtra示例数据如:
{"authCode": "13920933111042"}
如需要获取对应微信appId的openId请传入(仅支持渠道):
{"authCode": "13920933111042","subAppId": "wx9d8ff0300000"}
当 wayCode=ALI_JSAPI或 wayCode=ALI_LITE 时,channelExtra必须传buyerUserId,为支付宝用户ID(当前不支持openid方式),channelExtra示例数据如:
{"buyerUserId": "2088702585070844"}
当 wayCode=WX_JSAPI 或 wayCode=WX_LITE 时,channelExtra必须传openid,为微信OpenId, channelExtra示例数据如:
{"openid": "o6BcIwvSiRpfS8e_UyfQNrYuk2LI"}
注意: 若当前为特约商户,并且商户使用的自己的公众号或者小程序获取到的openId时:
需要:
1.商户自己的公众号或者小程序的AppId需要在服务商里进行关联, 请联系运营平台进行配置;
2.channelExtra参数中添加 subAppId 参数,该参数为商户的公众号或小程序的AppId,示例:
{ "openid": "o6BcIwvSiRpfS8e_UyfQNrYuk2LI", "subAppId":"wx08b5a41f7a27abf1" }
当 wayCode=ALI_QR 或 wayCode=WX_NATIVE 时,channelExtra可以传payDataType设置返回支付数据支付类型。此时payDataType可以为:codeUrl-二维码地址,codeImgUrl-二维码图片地址,不传payDataType默认返回codeUrl类型, channelExtra示例数据如:
{"payDataType": "codeImgUrl"}
当 wayCode=QR_CASHIER 时,channelExtra可以传payDataType和entryPageType。
entryPageType指定聚合码扫码时进入H5或小程序页面,默认为H5页面。h5-h5页面,lite-小程序页面。
payDataType设置返回支付数据支付类型,此时payDataType可以为:codeUrl-二维码地址,codeImgUrl-二维码图片地址,不传payDataType默认返回codeUrl类型, channelExtra示例数据如:
{"entryPageType": "lite", "payDataType": "codeImgUrl"}
当 wayCode=ALI_WAP 时,channelExtra可以传payDataType设置返回支付数据支付类型。此时payDataType可以为:form-返回自动跳转的支付表单,codeImgUrl-返回一个二维码图片URL,payUrl-返回支付链接,不传payDataType默认返回payUrl类型, channelExtra示例数据如:
{"payDataType": "form"}
当 wayCode=ALI_PC 时,channelExtra可以传payDataType设置返回支付数据支付类型。此时payDataType可以为:form-返回自动跳转的支付表单,payUrl-返回支付链接,不传payDataType默认返回payUrl类型, channelExtra示例数据如:
{"payDataType": "form"}
当 wayCode=BANK_QUICK 时,channelExtra可以传userType和userNo字段,通过设置用户标识,可以确保用户快捷支付时显示之前绑卡信息,快速完成支付。channelExtra示例数据如:
{
"userType": "PHONE", // userType: IMEI:IMEI、MAC:MAC地址、USER_ID:用户ID、EMAIL:用户Email、PHONE:用户手机号、ID_CARD:用户身份证号
"userNo": "18611727422", // userNo: 用户标识,用户在商户的唯一标识。(首次支付成功再支付时传相同的用户标识可实现快捷绑卡支付)
}
当 wayCode=TG_PAY 时,channelExtra可以传userPayType和invokeType字段,指定支付方式和调起方式。托管支付的详细接入,请查看托管支付接入指引。
托管支付
以下为userPayType和invokeType参数说明:
| 字段名 | 变量名 | 必填 | 类型 | 示例 | 描述 |
|---|---|---|---|---|---|
| 支付方式 | userPayType | 是 | String(30) | wx | 支付方式:wx - 微信, zfb - 支付宝 |
| 调起方式 | invokeType | 是 | String(30) | app2lite | app2lite:sdk调用方式, 返回调起小程序所需参数。支持 wx、zfb;h52lite:h5跳小程序支付,返回跳转url地址。支持 wx、zfb;h52jsapi:h5跳支付宝内浏览器打开网页收银台支付,返回跳转url地址。支持 zfb;h52qr:h5跳支付宝内打开当面付收银台支付,返回跳转url地址。支持 zfb;lite2lite:小程序跳转小程序支付,返回跳转小程序所需参数。支持 wx、zfb |
channelExtra示例数据如:
{"userPayType":"wx", "invokeType":"app2lite"}
返回跳转小程序所需参数示例数据如:
```json
{
"code": 0,
"data": {
"mchOrderNo": "mho1766095729849",
"orderState": 0,
"payData": "{\"path\":\"pages/hub/lite\",\"qrUrl\":\"https://pay.yintongzaixian.com/cashier/pages/hub/h5/?jeepayToken=8d6f6088eaf746d2157aa14c142d96ba0cea998014adefc56f841d31998e5a5d59bb32e81e898e9f309d072824220eb7\",\"appid\":\"wxfaff9394a9a745f0\",\"ghid\":\"gh_5ea8094c2d68\",\"env\":\"release\"}",
"payDataType": "payurl",
"payOrderId": "P2001776698797350913"
},
"msg": "SUCCESS",
"sign": "9FB1BC4EFA0CED891CA40175864BEF74"
}
返回跳转url地址参数示例数据如:
```json
{
"code": 0,
"data": {
"mchOrderNo": "mho1766096933730",
"orderState": 0,
"payData": "alipays://platformapi/startapp?appId=2021002172669744&page=pages/hub/lite&query=qrCode=https://pay.yintongzaixian.com/cashier/pages/hub/h5/?jeepayToken=8d6f6088eaf746d2157aa14c142d96baea03c39661283761d19ffeded32087c5d7049370b4849b44f5259ff61bbbe7d2",
"payDataType": "payurl",
"payOrderId": "P2001781748129406978"
},
"msg": "SUCCESS",
"sign": "614455EA32D95E901AE33A4DD98B5B09"
}
SDK调用示例(Java):
JeepayClient jeepayClient = JeepayClient.getInstance(Jeepay.appId, Jeepay.apiKey, Jeepay.getApiBase());
PayOrderCreateRequest request = new PayOrderCreateRequest();
PayOrderCreateReqModel model = new PayOrderCreateReqModel();
model.setMchNo(Jeepay.mchNo); // 商户号
model.setAppId(jeepayClient.getAppId()); // 应用ID
model.setMchOrderNo("mho" + new Date().getTime()); // 商户订单号
model.setWayCode("WX_BAR"); // 支付方式
model.setAmount(1L); // 金额,单位分
model.setCurrency("CNY"); // 币种,目前只支持cny
model.setClientIp("127.0.0.1"); // 发起支付请求客户端的IP地址
model.setSubject("商品标题"); // 商品标题
model.setBody("商品描述"); // 商品描述
model.setNotifyUrl("https://your-domain.com/notify"); // 异步通知地址
model.setReturnUrl("https://your-domain.com/return"); // 前端跳转地址
model.setExtParam(""); // 商户扩展参数,回调时原样返回
model.setChannelExtra(""); // 渠道扩展参数
request.setBizModel(model);
try {
PayOrderCreateResponse response = jeepayClient.execute(request);
_log.info("验签结果:{}", response.checkSign(Jeepay.apiKey));
if (response.isSuccess(Jeepay.apiKey)) {
_log.info("payOrderId:{}", response.get().getPayOrderId());
_log.info("mchOrderNo:{}", response.get().getMchOrderNo());
_log.info("payData:{}", response.get().getPayData());
} else {
_log.info("请求失败:mchNo={}, msg={}", Jeepay.mchNo, response.getMsg());
}
} catch (JeepayException e) {
_log.error(e.getMessage());
}