交易请求报文
JSON:
{
"request_type": "scanpay_jsapi_request",
"isspid": "39493002",
"pos_id": "1511300001",
"store_id": "1511300001",
"pos_seq": "2018121400000004",
"user_id": "user01",
"system_id": "8888",
"device_ip": "127.0.0.1",
"memo": "订单备注",
"scanpay_jsapi_request": {
"pay_type": "502",
"tx_amt": "1",
"buyer_id": "2088102838029704",
"pay_code": "",
"notify_url": "http://www.baidu.com/",
"goods_detail": [
{
"goods_id": "apple-01",
"payment_goods_id": "20010001",
"goods_name": "ipad",
"quantity": 1,
"price": 200000,
"goods_category": "34543238",
"body": "特价手机",
"show_url": "http://www.alipay.com/xxx.jpg"
},
{
"goods_id": "apple-02",
"payment_goods_id": "20010002",
"goods_name": "ipad2",
"quantity": 1,
"price": 200000,
"goods_category": "34543239",
"body": "特价手机2",
"show_url": "http://www.alipay.com/xxx2.jpg"
}
],
"extend_params": {
"hb_fq_num": "3",
"hb_fq_seller_percent": "100",
"split_flag": "R",
"plan_split_date": "20230418",
"split_info": {
"keep_amt": "800",
"split_list": [
{
"merchant_id": "10000000000001",
"div_amt": "150"
},
{
"merchant_id": "10000000000002",
"div_amt": "50"
}
]
}
}
},
"sign": "59B62BEBCA649C24DC25C44706677423"
}
XML:
<?xml version="1.0" encoding="GBK"?>
<business_trans>
<request_type>scanpay_jsapi_request</request_type>
<isspid>39493002</isspid>
<pos_id>1511300001</pos_id>
<store_id>1511300001</store_id>
<pos_seq>1511300000002</pos_seq>
<user_id> user01</user_id>
<system_id>8888</system_id>
<device_ip>127.0.0.1</device_ip>
<memo>订单备注</memo>
<scanpay_jsapi_request>
<pay_type>502</pay_type>
<tx_amt>1</tx_amt>
<buyer_id>2088************</buyer_id>
<pay_code></pay_code>
<notify_url><![CDATA[http://www.baidu.com/]]></notify_url>
<goods_detail><![CDATA[商品信息(JSON)]]></goods_detail>
<extend_params><![CDATA[扩展参数]]></extend_params>
</scanpay_jsapi_request>
</business_trans>
交易请求报文说明
节点名称 | 中文名称 | 类型 | 说明 | 是否必填 |
---|---|---|---|---|
sign | 报文签名 | String(32) | 请求报文格式为JSON时必填 计算签名方式请看2.1章节 | 可选 |
request_type | 请求类型 | String(32) | 固定值:scanpay_jsapi_request | 必填 |
isspid | 商户号 | String(8) | 翼码商户号,由翼码提供 | 必填 |
pos_id | 终端号 | String(20) | 商户自定义终端号 | 必填 |
store_id | 门店号 | String(20) | 商户自定义门店号 | 必填 |
pos_seq | 支付请求流水号 | String(32) | 同一个翼码商户号下唯一,不可重复使用,且大于12位 | 必填 |
user_id | 操作员标识 | String(20) | 操作员号 | 可空 |
system_id | 系统平台号 | String(4) | 由翼码提供 | 必填 |
device_ip | 设备IP | String(15) | 发起交易的门店或设备公网IP(仅支持IPv4) 根据央行要求必须传真实公网IP 否则商家会被风控!!! | 可空 |
memo | 订单备注 | String(128) | 可空 | |
scanpay_jsapi_request ->pay_type | 支付类型 | String(3) | 502:支付宝 503:微信支付 512:银联二维码 521:聚分期 | 必填 |
scanpay_jsapi_request ->buyer_id | 用户标识 | String(128) | 支付宝:必填,买家的支付宝唯一用户号(2088开头的16位纯数字) 微信:必填,用户在商户appid下的唯一标识(openid) 银联二维码:必填,银联授权码(userAuthCode) 聚分期:可空 | 可空 |
scanpay_jsapi_request ->pay_code | 支付标志 | String(128) | 银联二维码:必填,内容为银联支付标志 | 可空 |
scanpay_jsapi_request ->tx_amt | 交易金额 | Number(9) | 支付金额,单位为分,不支持小数点 | 必填 |
scanpay_jsapi_request ->notify_url | 异步通知地址 | String(256) | 异步通知文档见4.20 使用XML格式报文时,建议使用CDATA标签包裹内容 | 可空 |
scanpay_jsapi_request ->goods_detail | 商品信息 | JSONArray | 订单包含的商品信息列表,详细参数见下表 使用XML格式报文时,建议使用CDATA标签包裹内容 | 可空 |
scanpay_jsapi_request ->extend_params | 扩展参数 | JSON | 用于扩展一些特殊的支付参数字段,详细参数见下表 使用XML格式报文时,建议使用CDATA标签包裹内容 | 可空 |
自定义门店号(store_id)和自定义终端号(pos_id)需经过4.1终端绑定交易接口绑定成功过的值才可以调用,绑定一次即可不需要重复绑定。
goods_detail 商品信息 (JSONArray)
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
goods_id | String(32) | 商品的编号 | 必填 | apple-01 |
payment_goods_id | String(32) | 支付平台商品编号 | 可空 | 20010001 |
goods_name | String(256) | 商品名称 | 必填 | ipad |
quantity | Number(9) | 商品数量 | 必填 | 1 |
price | Number(8) | 商品单价,单位为分 | 必填 | 200000 |
goods_category | String(24) | 商品类目 仅支付宝时生效 | 可空 | 34543238 |
body | String(1000) | 商品描述信息 仅支付宝时生效 | 可空 | 特价手机 |
show_url | String(400) | 商品的展示地址 仅支付宝时生效 | 可空 | http://www.alipay.com/xxx.jpg |
goods_detail 样例:
[
{
"goods_id" : "apple-01",
"payment_goods_id" : "20010001",
"goods_name" : "ipad",
"quantity" : 1,
"price" : 200000,
"goods_category" : "34543238",
"body" : "特价手机",
"show_url" : "http://www.alipay.com/xxx.jpg"
},
{
"goods_id" : "apple-02",
"payment_goods_id" : "20010002",
"goods_name" : "ipad2",
"quantity" : 1,
"price" : 200000,
"goods_category" : "34543239",
"body" : "特价手机2",
"show_url" : "http://www.alipay.com/xxx2.jpg"
}
]
extend_params 扩展参数 (JSON)
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
hb_fq_num | String | 花呗分期数,仅支持传入3、6、12,其他期数暂不支持 仅支付宝时生效 hb_fq_num与hb_fq_seller_percent必须同时传入且使用花呗分期商品明细必传 | 可空 | 3 |
hb_fq_seller_percent | String | 花呗卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持 仅支付宝时生效 hb_fq_num与hb_fq_seller_percent必须同时传入且使用花呗分期商品明细必传 | 可空 | 100 |
split_flag | String | 分账标识 N:不分账 R:实时分账 D:延时分账 不传该节点时,将按控制台配置处理 该节点与分账功能相关具体联系业务确认开通功能 | 可空 | R |
plan_split_date | String | 预分账日期,格式:yyyymmdd 仅延时分账类型(split_flag=D)时支持传入 | 可空 | 20230418 |
split_info | JSON | 分账信息 仅支持请求实时分账split_flag=R 该节点与分账功能相关具体联系业务确认开通功能 | 可空 |
分账业务相关的特别说明:
1. split_flag=N 不分账时,split_info不允许传入;
2. split_flag=R 实时分账时,split_info必传,其中keep_amt与div_amt叠加必须全额分完整笔订单;
3. split_flag=D 延时分账时,split_info不允许传入,在后续流程中调用延迟交易确认接口完成分账,或使用翼码分账系统界面进行分账。
split_info 分账信息
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
is_clean_split | String | N:不使用净值分账 Y:使用净值分账 不传默认为N,即不使用净值分账 净值分账目前仅对部分通道开放,使用此能力前请先与技术支持确认 净值分账仅在交易手续费内扣时才起作用 当使用净值分账时,分账信息和分账明细必须要传分账比例,且分账方自留比例(keep_percentage)与所有分账比例(div_percentage)之和必须要为100% | 可空 | Y |
keep_amt | String | 分账方自留金额,单位为分,可传0表示不自留 不使用净值分账(is_clean_split=N)时,该节点必填,分账方自留比例(keep_percentage)节点无效 | 可空 | 1000 |
keep_percentage | String | 分账方自留比例,单位为%,最多支持小数点后两位,可传0表示不自留 使用净值分账(is_clean_split=Y)时,该节点必填,分账方自留金额(keep_amt)节点无效 | 可空 | 50.26 |
split_list | Array | 分账明细 | 必填 |
split_list 分账明细
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
merchant_id | String | 分账接收方的分账商户号 | 必填 | 10000000000001 |
div_amt | String | 分账金额,单位为分,必须大于0 不使用净值分账(is_clean_split=N)时,该节点必填,分账比例(div_percentage)节点无效 | 可空 | 1000 |
div_percentage | String | 分账比例,单位为%,最多支持小数点后两位,必须大于0 使用净值分账(is_clean_split=Y)时,该节点必填,分账金额(div_amt)节点无效 | 可空 | 23.55 |
若业务涉及100%分账给接收方,请于业务对接人联系申请使用净值分账功能。
extend_params 样例:
{
"hb_fq_num": "3",
"hb_fq_seller_percent": "100",
"split_flag": "R",
"plan_split_date": "20230418",
"split_info": {
"keep_amt": "800",
"split_list": [
{
"merchant_id": "10000000000001",
"div_amt": "150"
},
{
"merchant_id": "10000000000002",
"div_amt": "50"
}
]
}
}
交易返回报文
JSON:
{
"response_type": "scanpay_jsapi_response",
"isspid": "39493002",
"pos_id": "1511300001",
"pos_seq": "1511300000002",
"trans_time": "20190904100824",
"sys_seq": "ff7267efe2ecd9d6",
"pay_type": "503",
"pay_id": "wx1416111889934939a66b0e29d91ac20000",
"pay_info": "{\"appId\":\"wx688b665e1384f3d4\",\"nonceStr\":\"8lpqpovx2sg0q7d82yeg7ffwjiwlt4uc\",\"package\":\"prepay_id=wx1416111889934939a66b0e29d91ac20000\",\"signType\":\"MD5\",\"timeStamp\":1639469478,\"paySign\":\"B7666B47E178D9D675296C7FB5034E89\"}",
"extend": "",
"result": {
"id": "9998",
"comment": "下单成功,等待用户支付"
},
"sign": "F7FF3C26E8AB1D4B6EC382B90D6F7DEA"
}
XML:
<?xml version="1.0" encoding="GBK"?>
<business_trans>
<response_type>scanpay_jsapi_response</response_type>
<isspid>39493002</isspid>
<pos_id>1511300001</pos_id>
<pos_seq>1511300000002</pos_seq>
<sys_seq>0311095321465179</sys_seq>
<trans_time>20160311095321</trans_time>
<pay_type>503</pay_type>
<pay_id>wx14161130144714e11437d2e74409780000</pay_id>
<pay_info><![CDATA[{"appId":"wx688b665e1384f3d4","nonceStr":"587im0sil2i4eo5uqscw64hz4mmjqent","package":"prepay_id=wx14161130144714e11437d2e74409780000","signType":"MD5","timeStamp":1639469490,"paySign":"E39B34536B8597B3970DECEA3A6A2FD4"}]]></pay_info>
<extend><![CDATA[扩展字段(json格式)]]></extend>
<result>
<id>9998</id>
<comment>下单成功,等待用户支付</comment>
</result>
</business_trans>
交易返回报文说明
标准接口会因业务升级需要而新增节点,请在解析返回报文时避免新增未知节点产生的程序出错!
节点名称 | 中文名称 | 类型 | 说明 | 是否必填 |
---|---|---|---|---|
sign | 报文签名 | String(32) | 返回报文格式为JSON时必填 计算签名方式请看2.1章节 | 可选 |
response_type | 返回类型 | String(32) | 固定值:scanpay_jsapi_response | 必填 |
isspid | 商户号 | String(8) | 翼码商户号,由翼码提供 | 必填 |
pos_id | 终端号 | String(20) | 商户自定义终端号 | 必填 |
pos_seq | 支付请求流水号 | String(32) | 支付请求流水号,和请求报文相同 | 必填 |
sys_seq | 随机串号 | String(16) | 随机生成串号,仅用于日志跟踪用,不保存 | 必填 |
trans_time | 接口返回时间 | String(14) | 接口返回时间,格式:yyyyMMddHHmmss | 必填 |
pay_type | 支付类型 | String(3) | 502:支付宝 503:微信支付 512:银联二维码 521:聚分期 | 必填 |
pay_id | 交易标识id | String(64) | 下单成功时必填 用于调用翼码提供的H5支付页面 详见下文跳转翼码提供的H5页面完成支付的方法 | 可选 |
pay_info | 支付信息 | String | JSON字符串,下单成功时必填 用于直接调用支付宝JS控件/调用微信JS控件/跳转银联支付页面/跳转聚分期页面 格式详见本章交易返回参数附表 | 可选 |
extend | 扩展信息 | String | 扩展信息字段内容为json格式 预留字段后续业务扩展使用 | 可空 |
result ->id | 响应码 | String(4) | 9998 - 下单成功等待用户支付,需调用查询接口确认交易 其它失败,错误信息说明见“响应码解释”字段 | 必填 |
result ->comment | 响应码解释 | String(64) | 响应码对应中文注解,用于显示提示 | 必填 |
标准接口会因业务升级需要而新增节点,请在解析返回报文时避免新增未知节点产生的程序出错!
pay_info 支付信息 (JSON字符串)
支付宝:
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
tradeNo | String(64) | 支付宝交易号 | 必填 | 2015102600073002039000002D5O |
返回范例:
...
"pay_info": "{\"tradeNo\":\"2021121422001429701447645503\"}"
...
附1:调用支付宝JS支付文档:https://myjsapi.alipay.com/jsapi/native/trade-pay.html
附2:调用支付宝小程序支付文档:https://opendocs.alipay.com/mini/05xhsr
微信:
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
appId | String(16) | 公众号appid | 必填 | wx688b665e1384f3d4 |
nonceStr | String(32) | 随机字符串 | 必填 | 8lpqpovx2sg0q7d82yeg7ffwjiwlt4uc |
package | String(128) | 订单详情扩展字符串 | 必填 | prepay_id=wx1416111889934939a66b0e29d91ac20000 |
signType | String(32) | 签名方式 | 必填 | MD5 |
timeStamp | String(32) | 时间戳 | 必填 | 1639469478 |
paySign | String(64) | 签名 | 必填 | B7666B47E178D9D675296C7FB5034E89 |
返回范例:
...
"pay_info": "{\"appId\":\"wx688b665e1384f3d4\",\"nonceStr\":\"8lpqpovx2sg0q7d82yeg7ffwjiwlt4uc\",\"package\":\"prepay_id=wx1416111889934939a66b0e29d91ac20000\",\"signType\":\"MD5\",\"timeStamp\":1639469478,\"paySign\":\"B7666B47E178D9D675296C7FB5034E89\"}",
...
附:调用微信JS支付文档:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml
无需计算签名,仅需把接口返回的pay_info中字段直接调用微信api即可
银联二维码:
pay_info节点直接返回一个银联支付页的重定向URL
返回范例:
...
"pay_info": "https://qr.95516.com/UP03/qrcGtwWeb-web/front/confirmOrder?sessionId=f6eaaf224bb54b8d837c29a839f1939b",
...
聚分期:
pay_info节点直接返回一个聚分期支付页的重定向URL
返回范例:
...
"pay_info": "https://qr.95516.com/UP03/qrcGtwWeb-web/front/confirmOrder?sessionId=f6eaaf224bb54b8d837c29a839f1939b",
...
使用翼码提供的H5页面唤起支付的方法
以下是使用翼码提供的H5页面唤起支付的调用方法,请按需使用。
如果是自行开发唤起支付的页面只需要看前文中对pay_info的详细描述,有各个支付方式的唤起方式,不需要看以下内容。
测试环境跳转H5支付页面URL:https://ipos-sa.imageco.cn/jsapi_pay
生产环境跳转H5支付页面URL:https://ipos-sa-std.wangcaio2o.com/jsapi_pay
请求方式:GET
中文字符编码:UTF-8
请求参数:
参数名 | 中文名称 | 说明 | 是否必填 |
---|---|---|---|
pay_id | 交易标识id | JSAPI支付接口下单成功之后返回的参数(pay_id) | 必填 |
subject | 收款页标题 | 在支付页面展示的标题 | 可空 |
payee | 收款方名称 | 不传默认取商户在翼码系统的商户名称 | 可空 |
payment_process | 支付流程 | 01:直接支付(说明:用户扫码后无需确认支付信息,直接拉起支付宝/微信收银台进行支付) 02:确认支付(说明:用户扫码后会先打开支付确认页,用户点击支付确认页面中的支付按钮,在拉起支付宝/微信收银台完成支付) 说明:此支付流程仅对支付宝/微信支付有效,其它支付方式无效。 不传此节点系统默认按02:确认支付进行处理。 | 可空 |
参数名注意大小写,严格区分大小写,参数值注意使用urlencode处理。
调用范例:
https://ipos-sa.imageco.cn/jsapi_pay?pay_id=2018122923011429700544283355&payment_process=02&subject=%e6%94%b6%e6%ac%be%e6%a0%87%e9%a2%98&payee=%E6%94%B6%E6%AC%BE%E6%96%B9%E5%90%8D%E7%A7%B0
页面范例: