交易请求报文

JSON:

  1. {
  2. "request_type": "scanpay_jsapi_request",
  3. "isspid": "39493002",
  4. "pos_id": "1511300001",
  5. "store_id": "1511300001",
  6. "pos_seq": "2018121400000004",
  7. "user_id": "user01",
  8. "system_id": "8888",
  9. "device_ip": "127.0.0.1",
  10. "memo": "订单备注",
  11. "scanpay_jsapi_request": {
  12. "pay_type": "502",
  13. "tx_amt": "1",
  14. "buyer_id": "2088102838029704",
  15. "pay_code": "",
  16. "notify_url": "http://www.baidu.com/",
  17. "goods_detail": [
  18. {
  19. "goods_id": "apple-01",
  20. "payment_goods_id": "20010001",
  21. "goods_name": "ipad",
  22. "quantity": 1,
  23. "price": 200000,
  24. "goods_category": "34543238",
  25. "body": "特价手机",
  26. "show_url": "http://www.alipay.com/xxx.jpg"
  27. },
  28. {
  29. "goods_id": "apple-02",
  30. "payment_goods_id": "20010002",
  31. "goods_name": "ipad2",
  32. "quantity": 1,
  33. "price": 200000,
  34. "goods_category": "34543239",
  35. "body": "特价手机2",
  36. "show_url": "http://www.alipay.com/xxx2.jpg"
  37. }
  38. ],
  39. "extend_params": {
  40. "hb_fq_num": "3",
  41. "hb_fq_seller_percent": "100",
  42. "split_flag": "R",
  43. "plan_split_date": "20230418",
  44. "split_info": {
  45. "keep_amt": "800",
  46. "split_list": [
  47. {
  48. "merchant_id": "10000000000001",
  49. "div_amt": "150"
  50. },
  51. {
  52. "merchant_id": "10000000000002",
  53. "div_amt": "50"
  54. }
  55. ]
  56. }
  57. }
  58. },
  59. "sign": "59B62BEBCA649C24DC25C44706677423"
  60. }

XML:

  1. <?xml version="1.0" encoding="GBK"?>
  2. <business_trans>
  3. <request_type>scanpay_jsapi_request</request_type>
  4. <isspid>39493002</isspid>
  5. <pos_id>1511300001</pos_id>
  6. <store_id>1511300001</store_id>
  7. <pos_seq>1511300000002</pos_seq>
  8. <user_id> user01</user_id>
  9. <system_id>8888</system_id>
  10. <device_ip>127.0.0.1</device_ip>
  11. <memo>订单备注</memo>
  12. <scanpay_jsapi_request>
  13. <pay_type>502</pay_type>
  14. <tx_amt>1</tx_amt>
  15. <buyer_id>2088************</buyer_id>
  16. <pay_code></pay_code>
  17. <notify_url><![CDATA[http://www.baidu.com/]]></notify_url>
  18. <goods_detail><![CDATA[商品信息(JSON)]]></goods_detail>
  19. <extend_params><![CDATA[扩展参数]]></extend_params>
  20. </scanpay_jsapi_request>
  21. </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设备IPString(15)发起交易的门店公网IP
根据央行要求必须传门店真实公网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_idString(32)商品的编号必填apple-01
payment_goods_idString(32)支付平台商品编号可空20010001
goods_nameString(256)商品名称必填ipad
quantityNumber(9)商品数量必填1
priceNumber(8)商品单价,单位为分必填200000
goods_categoryString(24)商品类目
仅支付宝时生效
可空34543238
bodyString(1000)商品描述信息
仅支付宝时生效
可空特价手机
show_urlString(400)商品的展示地址
仅支付宝时生效
可空http://www.alipay.com/xxx.jpg

goods_detail 样例:

  1. [
  2. {
  3. "goods_id" : "apple-01",
  4. "payment_goods_id" : "20010001",
  5. "goods_name" : "ipad",
  6. "quantity" : 1,
  7. "price" : 200000,
  8. "goods_category" : "34543238",
  9. "body" : "特价手机",
  10. "show_url" : "http://www.alipay.com/xxx.jpg"
  11. },
  12. {
  13. "goods_id" : "apple-02",
  14. "payment_goods_id" : "20010002",
  15. "goods_name" : "ipad2",
  16. "quantity" : 1,
  17. "price" : 200000,
  18. "goods_category" : "34543239",
  19. "body" : "特价手机2",
  20. "show_url" : "http://www.alipay.com/xxx2.jpg"
  21. }
  22. ]

extend_params 扩展参数 (JSON)

JSON节点类型说明是否必填范例
hb_fq_numString花呗分期数,仅支持传入3、6、12,其他期数暂不支持
仅支付宝时生效
hb_fq_num与hb_fq_seller_percent必须同时传入且使用花呗分期商品明细必传
可空3
hb_fq_seller_percentString花呗卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持
仅支付宝时生效
hb_fq_num与hb_fq_seller_percent必须同时传入且使用花呗分期商品明细必传
可空100
split_flagString分账标识
N:不分账
R:实时分账
D:延时分账
不传该节点时,将按控制台配置处理
该节点与分账功能相关具体联系业务确认开通功能
可空R
plan_split_dateString预分账日期,格式:yyyymmdd
仅延时分账类型(split_flag=D)时支持传入
可空20230418
split_infoJSON分账信息
仅支持请求实时分账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_splitStringN:不使用净值分账
Y:使用净值分账
不传默认为N,即不使用净值分账
净值分账目前仅对部分通道开放,使用此能力前请先与技术支持确认
净值分账仅在交易手续费内扣时才起作用
当使用净值分账时,分账信息和分账明细必须要传分账比例,且分账方自留比例(keep_percentage)与所有分账比例(div_percentage)之和必须要为100%
可空Y
keep_amtString分账方自留金额,单位为分,可传0表示不自留
不使用净值分账(is_clean_split=N)时,该节点必填,分账方自留比例(keep_percentage)节点无效
可空1000
keep_percentageString分账方自留比例,单位为%,最多支持小数点后两位,可传0表示不自留
使用净值分账(is_clean_split=Y)时,该节点必填,分账方自留金额(keep_amt)节点无效
可空50.26
split_listArray分账明细必填 
split_list 分账明细
JSON节点类型说明是否必填范例
merchant_idString分账接收方的分账商户号必填10000000000001
div_amtString分账金额,单位为分,必须大于0
不使用净值分账(is_clean_split=N)时,该节点必填,分账比例(div_percentage)节点无效
可空1000
div_percentageString分账比例,单位为%,最多支持小数点后两位,必须大于0
使用净值分账(is_clean_split=Y)时,该节点必填,分账金额(div_amt)节点无效
可空23.55

若业务涉及100%分账给接收方,请于业务对接人联系申请使用净值分账功能。

extend_params 样例:

  1. {
  2. "hb_fq_num": "3",
  3. "hb_fq_seller_percent": "100",
  4. "split_flag": "R",
  5. "plan_split_date": "20230418",
  6. "split_info": {
  7. "keep_amt": "800",
  8. "split_list": [
  9. {
  10. "merchant_id": "10000000000001",
  11. "div_amt": "150"
  12. },
  13. {
  14. "merchant_id": "10000000000002",
  15. "div_amt": "50"
  16. }
  17. ]
  18. }
  19. }

交易返回报文

JSON:

  1. {
  2. "response_type": "scanpay_jsapi_response",
  3. "isspid": "39493002",
  4. "pos_id": "1511300001",
  5. "pos_seq": "1511300000002",
  6. "trans_time": "20190904100824",
  7. "sys_seq": "ff7267efe2ecd9d6",
  8. "pay_type": "503",
  9. "pay_id": "wx1416111889934939a66b0e29d91ac20000",
  10. "pay_info": "{\"appId\":\"wx688b665e1384f3d4\",\"nonceStr\":\"8lpqpovx2sg0q7d82yeg7ffwjiwlt4uc\",\"package\":\"prepay_id=wx1416111889934939a66b0e29d91ac20000\",\"signType\":\"MD5\",\"timeStamp\":1639469478,\"paySign\":\"B7666B47E178D9D675296C7FB5034E89\"}",
  11. "extend": "",
  12. "result": {
  13. "id": "9998",
  14. "comment": "下单成功,等待用户支付"
  15. },
  16. "sign": "F7FF3C26E8AB1D4B6EC382B90D6F7DEA"
  17. }

XML:

  1. <?xml version="1.0" encoding="GBK"?>
  2. <business_trans>
  3. <response_type>scanpay_jsapi_response</response_type>
  4. <isspid>39493002</isspid>
  5. <pos_id>1511300001</pos_id>
  6. <pos_seq>1511300000002</pos_seq>
  7. <sys_seq>0311095321465179</sys_seq>
  8. <trans_time>20160311095321</trans_time>
  9. <pay_type>503</pay_type>
  10. <pay_id>wx14161130144714e11437d2e74409780000</pay_id>
  11. <pay_info><![CDATA[{"appId":"wx688b665e1384f3d4","nonceStr":"587im0sil2i4eo5uqscw64hz4mmjqent","package":"prepay_id=wx14161130144714e11437d2e74409780000","signType":"MD5","timeStamp":1639469490,"paySign":"E39B34536B8597B3970DECEA3A6A2FD4"}]]></pay_info>
  12. <extend><![CDATA[扩展字段(json格式)]]></extend>
  13. <result>
  14. <id>9998</id>
  15. <comment>下单成功,等待用户支付</comment>
  16. </result>
  17. </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交易标识idString(64)下单成功时必填
用于调用翼码提供的H5支付页面
详见下文跳转翼码提供的H5页面完成支付的方法
可选
pay_info支付信息StringJSON字符串,下单成功时必填
用于直接调用支付宝JS控件/调用微信JS控件/跳转银联支付页面/跳转聚分期页面
格式详见本章交易返回参数附表
可选
extend扩展信息String扩展信息字段内容为json格式
预留字段后续业务扩展使用
可空
result
->id
响应码String(4)9998 - 下单成功等待用户支付,需调用查询接口确认交易
其它失败,错误信息说明见“响应码解释”字段
必填
result
->comment
响应码解释String(64)响应码对应中文注解,用于显示提示必填

标准接口会因业务升级需要而新增节点,请在解析返回报文时避免新增未知节点产生的程序出错!

pay_info 支付信息 (JSON字符串)

支付宝:

JSON节点类型说明是否必填范例
tradeNoString(64)支付宝交易号必填2015102600073002039000002D5O

返回范例:

  1. ...
  2. "pay_info": "{\"tradeNo\":\"2021121422001429701447645503\"}"
  3. ...

附:调用支付宝JS支付文档:https://myjsapi.alipay.com/jsapi/native/trade-pay.html

微信:

JSON节点类型说明是否必填范例
appIdString(16)公众号appid必填wx688b665e1384f3d4
nonceStrString(32)随机字符串必填8lpqpovx2sg0q7d82yeg7ffwjiwlt4uc
packageString(128)订单详情扩展字符串必填prepay_id=wx1416111889934939a66b0e29d91ac20000
signTypeString(32)签名方式必填MD5
timeStampString(32)时间戳必填1639469478
paySignString(64)签名必填B7666B47E178D9D675296C7FB5034E89

返回范例:

  1. ...
  2. "pay_info": "{\"appId\":\"wx688b665e1384f3d4\",\"nonceStr\":\"8lpqpovx2sg0q7d82yeg7ffwjiwlt4uc\",\"package\":\"prepay_id=wx1416111889934939a66b0e29d91ac20000\",\"signType\":\"MD5\",\"timeStamp\":1639469478,\"paySign\":\"B7666B47E178D9D675296C7FB5034E89\"}",
  3. ...

附:调用微信JS支付文档:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml
无需计算签名,仅需把接口返回的pay_info中字段直接调用微信api即可

银联二维码:

pay_info节点直接返回一个银联支付页的重定向URL

返回范例:

  1. ...
  2. "pay_info": "https://qr.95516.com/UP03/qrcGtwWeb-web/front/confirmOrder?sessionId=f6eaaf224bb54b8d837c29a839f1939b",
  3. ...

聚分期:

pay_info节点直接返回一个聚分期支付页的重定向URL

返回范例:

  1. ...
  2. "pay_info": "https://qr.95516.com/UP03/qrcGtwWeb-web/front/confirmOrder?sessionId=f6eaaf224bb54b8d837c29a839f1939b",
  3. ...

使用翼码提供的H5页面唤起支付的方法

以下是使用翼码提供的H5页面唤起支付的调用方法,请按需使用。
如果是自行开发唤起支付的页面只需要看前文中对pay_info的详细描述,有各个支付方式的唤起方式,不需要看以下内容。

测试环境跳转H5支付页面URL:http://ipos-sa.imageco.cn/jsapi_pay

请求方式:GET

中文字符编码:UTF-8

请求参数:

参数名中文名称说明是否必填
pay_id交易标识idJSAPI支付接口下单成功之后返回的参数(pay_id)必填
subject收款页标题在支付页面展示的标题必填
payee收款方名称不传默认取商户在翼码系统的商户名称可空

参数名注意大小写,严格区分大小写,参数值注意使用urlencode处理。

调用范例:

  1. http://ipos-sa.imageco.cn/jsapi_pay?pay_id=2018122923011429700544283355&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

页面范例:

JSAPI支付交易 - 图1