JSAPI JSAPI支付是指商户通过调用京东收银提供的JSAPI接口,在支付场景中可调起微信、支付宝、京东支付、银联云闪付支付模块完成支付收款,商户系统调用该接口生成预支付订单,获取返回正确的预支付交易回话标识生成交易串,通过原生态js支付接口调起支付。 应用场景 JSAPI支持线下支付场景,公众号、微信端内H5、支付宝服务窗支付,针对商户有自己聚合场景可以调用此接口。 如:商户有自己的H5商城,用户通过连接或扫描二维码在微信端内网页打开,可以调用JSAPI接口完成预下单,然后前端调用原生态js支付接口调起支付。 注:端内H5支付需要添加支付授权目录。 步骤一 :如图2.1,商户下发图文消息或者通过自定义菜单吸引用户点击进入商户网页。 步骤二 :如图2.2,进入商户网页,用户选择购买,完成选购流程。 步骤三 :如图2.3,调起微信支付控件,用户开始输入支付密码。 步骤四 : 如图2.4,密码验证通过,支付成功。商户后台得到支付成功的通知。 图2.1 商户网页下单  图2.2 请求微信支付  图2.3 用户确认支付,输入密码  图2.4 用户支付成功提示  接口地址 ``` 请求地址:https://openapi.duolabao.com/v3/order/pay/create 请求方式:POST 字符编码:UTF-8字符编码 ``` 请求参数 |参数名称| 参数 |类型 |是否必传 |示例值 |描述| |---| |异步通知4.0版本 |version |string(32) |否 |V4.0|异步通知V4.0版本,传固定值V4.0,传该值走4.0通知规则进行回调| |代理商编号 |agentNum |string(32)| 否| 10001014472963095391100 |使用代理商秘钥时agentNum必传| |商户编号 |customerNum |string(32)| 是| 10001114504252653551690| 商户在系统的商户编号| |店铺编号 |shopNum |string(32) |是 |10001214504254906302068 |商户在系统的店铺编号 |机具号 |machineNum |string(32)| 否| 10011015096058000914658 || |用户openID| authId |string(32)|是 |ojiuXuA3uRjfHd6LtbSfs51Q2UjQ| 注意:微信、支付宝、云闪付必传(参考附录8.2openID获取openId),京东支付该值可自定义,不能为空| |终端号 |deviceInfo | string(32)| 否 ||数字和英文的8位字符| |支付方式| bankType |string(32) |是| WX |微信:WX<br>小程序:WX_XCX<br>支付宝:ALIPAY<br>京东:JD<br>银联:UNIONPAY| |支付APPID |appId |string(32) |否|wx83971a10bb0ebe40 |下单使用支付APPID,支付和关注必须成对透传| |关注APPID |subAppId |string(32)| 否| wx83971a10bb0ebe40| 下单使用支付APPID,支付和关注必须成对透传| |商户订单号 |requestNum |string(32) |是 |WX20211506985342| 商户系统内部订单号(商户系统内唯一)| |金额 |amount |String(15,2) |是| 0.02 |订单金额(单位:元,保留2位小数)| |回调地址 |callbackUrl |string(32)| 是| http://www.duolabao.com 异步回调通知地址URL,通知URL必须为直接可访问的URL| |交易类型 |subOrderType |string(32) |否 |NORMAL |交易子类型普通交易NORMAL, <br>分账交易:LEDGER, <br>默认值:NORMAL| |分账规则串 |ledgerRule |string(32) |否 |入参请查看ledgerRule分账规则串| |单品优惠 |goodsInfo| string(32)| 否 |具体传请参以下单品优惠传参格式| |一单一码标识 |payModel| string(32) |否 |MORE |一单一付:ONCE<br>一单多付:MORE <br>默认为一单多付| |订单优惠标记| goodsTag |string(32) |否| GS |微信订单优惠标记| |扩展字段 |extraInfo |string(32) |否 |(可选)用户自定义扩展信息(不支持中文字符) 自定义扩展信息| |终端信息 |terminalInfo|object(32)|否|| ledgerRule分账规则串 |参数名称 |参数 |类型 |是否必传 |示例值| 描述| |---| |分账类型 |ledgerType |string(32)| 否(分账订单必传)| FIXED |固定金额:FIXED<br>比例:RATE<br>目前只支持固定金额分账| |手续承担方| ledgerFeeAssume| string(32) |否(分账订单必传) |RECEIVER| 收款方承担:RECEIVER<br>分账方承担:LEDGER<br>默认为RECEIVER,目前仅支持收款方承担手续费| |分账串 |list| date(500) |否(分账订单必传)| [{"customerNum":<br>"10001115199597283447316",<br>"amount":"0.01"},<br>{"customerNum":<br>"10001114504252653551690",<br>"amount":"0.02"}] |分账list必须全部包括收款方和分<br>账方,分账金额保留两位小数,<br>且分账金额相加需等于订单金额| goodsInfo单品优惠字段参数(以下参数为同级字段) |参数名称 |参数 |类型 |是否必传 |示例值 |描述 |---| |订单原价 |cost_price| int |否| 608 |订单总金额,与total_fee一致| |商品小票ID |receipt_id |String(32) |否 |wx123 |商家小票ID| |单品列表 |detail |String(1024)| 否| 示例见下文| 单品信息,使用Json数组格式提交| |附加信息 |addnInfo |String(100)| 否 |银联| 附加信息| detail:【Json格式数组[{},{}] 】 |字段名称 |参数编码 |参数类型 |必填| 实例值 |描述| |---| |商编编码| Id |String(32) |否(使用单品券核销必填) |(微信/支付宝/银联 |商品编码(由半角的大小写字母、数字、中划线、下划线中的一种或几种组成)| |商编编码| wxpay_goods_id| String(32) |否(使用单品券核销选填) |(微信/支付宝/银联 微信支付定义的统一商品编号(没有可不传)| |商品名称| name| String(256) |否(使用单品券核销必填) |(微信/支付宝/银联 商品名称(商品的实际名称)| |数量 |quantity |int |否(使用单品券核销必填) |(微信/支付宝/银联 商品数量(用户购买的数量)| |商品单价 |price |int| 否(使用单品券核销必填) |(微信/支付宝/银联 商品单价。单位为:分。如果商户有优惠,需传输商户优惠后的单价(例如:用户对一笔100元的订单使用了商场发的优惠券100-50,则活动商品的单价应为原单价-50)| |商品类目树 |categories_tree| String(128) |否(使用单品券核销选填) |支付宝 商品类目树,从商品类目根节点到叶子节点的类目id组成,类目id值使用 Ι分割| |商品描述信息| body|String(1000) |否(使用单品券核销选填| 支付宝 |商品描述信息| |商品的展示地址| show_url| String(400) |否(使用单品券核销选填 |支付宝 |商品的展示地址| |商品类目| category |String(24) |否 |支付宝/银联 |商品类目| |附加信息| addnInfo |String(100) |否 |银联| 附加信息| terminalInfo字段 |名称| 变量名| 类型 |必填 |示例值| 描述| |---| |终端实时经纬度信息| locationE| String(32)| 是| 37.12 |受理终端设备实时经纬度信息,格式经度| |终 端 实 时 经 度信息| locationN |String(32) |是 |121.213| 受理终端设备实时经纬度信息,格式为纬度| |加密随机因子 |encrypt_rand_num| String(10) |是| -| 仅在被扫支付类交易报文中出现:若付款码为 19 位数字,则取后 6 位;若付款码为 EMV 二维码,则取其tag 57 的卡号/token 号的后 6 位| |密文数据 |secret_text| String(16) |否 |-| 仅在被扫支付类交易报文中出现:64bit 的密文数据,对终端硬件序列号和加密随机因子加密后的结果。本子域取值为: 64bit 密文数据进行base64 编码后的结果。| |移动国家代码| mobile_country_cd| String(3)| 否| -| 基站信息,由国际电联(ITU)统一分配的移动国家代码(MCC)。| |移动网络号码| mobile_net_num| String(2)| 否 |460| 中国为 460| |ICCID |icc_id String(20)| 否 |- |基站信息,由国际电联(ITU)统一分配的移动网络号码(MNC)。| |位置区域码 1| location_cd1| String(4)| 否 |1 |移动: 00、 02、 04、 07;联通: 01、06、 09;电信: 03、 05、 11| |基站编号 1 |lbs_num1| String(12) |否| - |SIM 卡卡号| |基站信号 1 |lbs_signal1| String(4)| 否 |-| LAC(移动、联通), 16 进制| |位置区域码 2| location_cd2| String(4)| 否| -| CID(移动、联通), 16 进制| |基站编号 2 |lbs_num2 |String(12) |否| - |SIG(移动、联通), 16 进制| |基站信号 2 |lbs_signal2| String(4)| 否| -| LAC(移动、联通), 16 进制| |位置区域码 3| location_cd3| String(4)| 否| -| CID(移动、联通), 16 进制| |基站编号 3 |lbs_num3| String(12) |否| -| SIG(移动、联通), 16 进制| |基站信号 3 |lbs_signal3| String(4)| 否 |-| LAC(移动、联通), 16 进制| |电信系统识别码| telecom_sys_id |String(4)| 否| -| CID(移动、联通), 16 进制| |电信网络识别码 |telecom_net_id |String(4)|否 |-| SIG(移动、联通), 16 进制| |电信基站 |telecom_lbs |String(4) |否| - |SID(电信),电信系统识别码,每个地级市只有一个 SID| |电信基站信号| telecom_lbs_signal| String(4)| 否 |- |NID(电信),电信网络识别码,由电信各由地级分公司分配。每个地级市可能有 1 到 3 个 NID| 请求示例: ``` { "customerNum":"10001114504252653551690", "shopNum":"10001214504254906302068", "requestNum":"201903141611435c8a0cbf50a3e2250", "amount":0.1, "bankType":"WX", "authId":"ooxj_s5XqeNjO5aruFLHneMMGB8s", "callbackUrl":"http://webtestm.laiu8.cn/paytest/dlbNotify", "extendParams":"{\"food_order_type\":\"qr_order\"}", "subOrderType":"LEDGER", "ledgerRule":{ "ledgerType":"FIXED", "ledgerFeeAssume":"RECEIVER", "list":[ { "customerNum":"10001115199597283447316", "amount":"0.01" }, { "customerNum":"10001114504252653551690", "amount":"0.01" } ] }, "goodsInfo ":{"detail":[ { "id":1, "name":"单品营销", "price":100, "quantity":1 } ], "cost_price ":200, "receipt_id":"wx1234" } } ``` 公共响应参数 |参数名称 |参数| 类型 |是否必传 |示例值| 描述| |---| |响应状态| result |string(32) |是| Success success表示成功,fail表示失败,error表示异常| |错误代码| errorCode |string(32) |否| shopNumNotExist 详见错误表| |错误描述| errorMsg| string(32)| 否| shopNum not exsit| |订单编号| orderNum |string(32)| 是 |10021002108021036340245516904867 |系统订单号| |商户订单号| requestNum |string(32) |是| A202007280921511350012654333| 用户请求流水号| |银行流水号| bankRequestNum |string(32) |是| 10031102108021036340115516904306| 系统支付单号| data响应参数 bankRequest微信下单返回: |参数名称 |参数 |类型 |是否必传 |示例值 |描述| |---| |商户编号 |customerNum| string(32)| 是| 10001114504252653551690 |商户在系统的商户编号| |订单编号 |ORDERNUM |string(32) |是| 10021002108021036340245516904867 |系统订单号| |支付单号 |OUT_TRADE_NO| string(32)| |是 |10031102108021036340115516904306 |系统支付单号| |随机字符串 |NONCESTR |string(32) |否 |12812f83992e4215b6303dead11b56a4 || |APPID| APPID| string(32)| 否 |wx290ce4878444369d |拉起支付APPID| |订单详情扩展字符串 |PACKAGE |string(32) |否 |prepay_id=<br>wx02103635027009478<br>10dc8f81bdd440000|统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***| |时间戳 |TIMESTAMP| string(32) |否| 1627871795| 时间戳| |签名方式 |SIBGTYPE |string(32) |否 |RSA |注:小程序和公众号返回字段名称不同<br>公众号:SIBGTYPE<br>小程序:SIGNTYPE| |签名 |PAYSIGN |string(32) |否|11GwwZnN+5DsV/28bNX/<br>xfnhWm98Jf78oJLpRzVF2<br>4hiz2noK1KKh36w|| 响应示例如下: ``` { "data":{ "bankRequest":{ "ORDERNUM":"10021002108021036340245516904867", "NONCESTR":"12812f83992e4215b6303dead11b56a4", "APPID":"wxd77d285576f20c5c", "OUT_TRADE_NO":"10031102108021036340115516904306", "PACKAGE":"prepay_id=wx0210363502700947810dc8f81bdd440000", "TIMESTAMP":"1627871795", "CUSTOMERNUM":"10001114504252653551690", "SIBGTYPE":"RSA", "PAYSIGN":"11GwwZnN+5DsV/28bNX/xfnhWm98Jf78oJLpRzVF24hiz2noK1KKh36w/hg44WUkpzKf7ccW4Qyh8YiBVnHgqW3i1mm4nDc1cpL7oZI8AqSOVUXTqLpplLARNJpVJ0os3SJOE4IZS32Xz0UaeMWBDWL2G4LAmdukbYWeFtr8mnxk4u364rQbwb05m7bwiMGBc2tzd5mOJiFwhiFqQeVM1xWlIsM09v15HIWzaKNNO2WyOTa12AHe8iYGXbYO7TCaooJejMUyf8p6dBmK8M7CHGOdYRlYA3Fcg1Lm9qUHv2vAvbnIiZHbKJGf2jsZ3QOq1fDa68CKpNr0Wlz5psRQoQ==" }, "bankRequestNum":"10031102108021036340115516904306", "orderNum":"10021002108021036340245516904867", "requestNum":"A202007280921511350012654333" }, "result":"success" } ``` bankRequest支付宝下单返回: |参数名称| 参数| 类型| 是否必传| 示例值 |描述| |---| |商户编号 |customerNum| string(32) |是 |10001114504252653551690| 商户在系统的商户编号| |订单编号 |ORDERNUM |string(32)| 是| 10021002108021036340245516904867| 系统订单号| |支付单号 |OUT_TRADE_NO |string(32) |是| 10031102108021036340115516904306| 系统支付单号| |支付宝交易号 |TRADENO |string(32) |否 |2021080222001492181405308656 |支付宝交易单单号,拉起支付宝支付使用| 响应示例如下: ``` { "data":{ "bankRequest":{ "ORDERNUM":"10021002108021106290265516909045", "STATUS":"0", "OUT_TRADE_NO":"10031102108021106290365516906053", "TRADENO":"2021080222001492181405308656", "CUSTOMERNUM":"10001114504252653551690" }, "bankRequestNum":"10031102108021106290365516906053", "orderNum":"10021002108021106290265516909045", "requestNum":"A2020072809215113500126544545" }, "result":"success" } ``` bankRequest京东下单返回: |参数名称| 参数| 类型| 是否必传| 示例值| 描述| |---| |商户编号 |customerNum| string(32) |是| 10001114504252653551690 |商户在系统的商户编号| |订单编号 |ORDERNUM |string(32)| 是 |10021002108021036340245516904867| 系统订单号| |支付单号 |OUT_TRADE_NO| string(32)| 是| 10031102108021036340115516904306 |系统支付单号| |京东支付链接 |PAY_URL |string(32) |否 |https://jdpaycert.jd.com/scan/<br>duolabao/index?<br>qrCode=https%3A%2F%2Fqr.95516.com%2F00010000%<br>2F0110044657600820<br>4065258021828647|京东跳转支付链接| 响应示例如下: ``` { "data":{ "bankRequest":{ "ORDERNUM":"10021002108021106290265516909045", "STATUS":"0", "OUT_TRADE_NO":"10031102108021106290365516906053", "PAY_URL":"https://jdpaycert.jd.com/scan/duolabao/index?qrCode=https%3A%2F%2Fqr.95516.com%2F00010000%2F01100446576008204065258021828647", "CUSTOMERNUM":"10001114504252653551690" }, "bankRequestNum":"10031102108021106290365516906053", "orderNum":"10021002108021106290265516909045", "requestNum":"A2020072809215113500126544545" }, "result":"success" } ``` bankRequest银联下单返回: |参数名称| 参数 |类型 |是否必传 |示例值 |描述| |---| |是否重定向 |redirectToPay| boolean| 否| true|| |银联跳转链接 |payUrl |string(32) |否 | https://jdpaycert.jd.com/scan/<br>duolabao/index?qrCode=<br>https%3A%2F%2Fqr.95516.com%<br>2F00010000%2F0110044<br>6576008204065258021828647 |银联的url<br>(银联要求必须是302重定向payUrl.且会验证域名)| 响应示例如下: ``` { "data": { "bankRequest": { "redirectToPay": true, "payUrl": "https://qr.95516.com/UP03/qrcGtwWeb-web/front/confirmOrder?sessionId=8a56a7c80d4e4573b6b940ce86782eeb" }, "bankRequestNum": "10031102108021123450295516901622", "orderNum": "10021002108021121470095516902150", "requestNum": "A20200728092151135001265445974" }, "result": "success" } ```