签名说明:

排除sign参数之外,将其它参数(空值除外)按名称进行字母排序,并和它的取值一起组成name=value样式的字符串,然后用&把它们拼装为一个大字符串,针对goods_detail这种值为对象类型的,直接拼对象对应的json串

app_id=MQ100013&app_name=多点&color=#FF0000&goods_detail=[{"bod
y":"body123456","categories_tree":"5263","goods_category":"5689","goods_id":"id123456","goods_name":"name123456","price":"20","quantity":"20","show_url":"url123456"}]&goods_name=矿
泉水&merch_no=833651658120003&notify_url=http://test.mdun.cn/jd/pay/notice&out_trade_no=test&pn=XN000003&remark=测试交易备注&total_amount=0.05

请求参数(O-非必传 ,M-必传):

参数 参数名称 类型 参数说明 样例 可空
merch_no 商户编号 String 商户在SaaS平台的编号 a10253390 M
out_trade_no 服务商交易订单号 String 服务商的交易订单编号(同一服务商下唯一) 161018121614000624679888 M
total_amount 订单金额 String 订单总金额,以元为单位 100 M
pn 支付授权码 String 支付授权码 请前往开放平台申请或联系渠道经理协助申请 M
appid 平台分配应用ID String 应用备案通过后分配 请前往开放平台申请或联系渠道经理协助申请 M
appname 备案应用名称 String 应用备案名称 请前往开放平台申请或联系渠道经理协助申请 M
notify_url 通知地址 String 支付成功后的通知地址 http://test.mdun.cn/jd/pay/notice O
color 返回按钮颜色 String 返回按钮自定义颜色 O
remark 交易备注 String (v1.05增加) O
limit_pay 限制贷记卡支付 String (v1.19增加)0:不限制贷记卡支付1:禁止使用贷记卡支付。不上送此参数时,limit_pay默认为0,即:不限制贷记卡支付 O
goods_name 商品名称 String 商品名称 矿泉水 O
goods_detail 商品详情 JSONArray 商品详细描述,参考下表(商户信息:goods_detail) [ { “goods_id”: “商品编码”, “wxpay_goods_id”: “1001”, “goods_name”: “”, “quantity”: 1, “price”: 528800 }, { “goods_id”: “商品编码”, “wxpay_goods_id”: “1002”, “goods_name”: “iPhone6s 32G”, “quantity”: 1, “price”: 608800 } ] O
operator_id 商户操作员编号 String 支付宝可用 001 O
store_id 商户门店编号 String 支付宝可用 001 O
terminal_id 商户机具终端编号 String 支付宝可用 11111111 O
hb_fq_num 花呗分期数 String 仅支持传入3/6/12(仅支付宝支持) 接入指引:https://gw.alipayobjects.com/os/bmw-prod/936d185f-6fda-4369-b0a0-34c5e7dfe7e3.pdf O
food_order_type 点餐场景类型 String 点餐场景类型:qr_order(店内扫码点餐)pre_order(预点到店自提)home_delivery (外送到家)direct_payment(直接付款)other(其它) O
sign 签名 String SHA256WithRSA 商户私钥加密 M

返回参数(O-非必传 ,M-必传):

参数 参数名称 类型 参数说明 样例 可空
status 状态 String success:支付成功
cancel:取消支付
fail :支付失败/下单失败 M
msg 错误描述 String 成功/失败时均有值 O

示例

小程序调起收银台小程序:

open() {
    const datastr = JSON.stringify({"app_id":"MQ11111","app_name":"多点","color":"#FF0000","goods_detail":[{"body":"body123456","categories_tree":"5263","goods_category":"5689","goods_id":"id123456","goods_name":"name123456","price":"0.01","quantity":"20","show_url":"url123456"}],"goods_name":"矿泉水","limit_pay":"1","merch_no":"833304458120002","notify_url":"http://test.mdun.cn/jd/pay/notice","out_trade_no":trade_no,"pn":"XN000004","remark":"测试交易备注","source":"miniapp","terminal_info":{"app_version":"23091301","encrypt_rand_num":"928201","secret_text":"968542A5"},"total_amount":"0.01"})
    const signStr = 'signStr'
    my.navigateToMiniProgram({
      appId: '2021004118660126', // 16 位
      path: 'pages/cashier/cashier',
      query: {
        data: datastr,
        sign: signStr
      },
      success: function (res) {
        console.log(res);
      },
      fail: function (err) {
        console.log(err);
      }
    });
  }

通过上述方法会调起收银台小程序,在收银台中完成支付后,会回调支付结果

onShow(options) {
    // 从后台被 scheme 重新打开
    const { referrerInfo = {}, appId } = options;
    my.alert({
      content: referrerInfo.extraData  // {status: "success", msg: "支付成功"}
    })
  }

特殊说明:

一般情况下my.getEnterOptionsSync()中获取的extraData为收银台小程序返回的支付结果,但是当通过物理返回键返回(即未通过收银台小程序内按钮返回),extraData内容会为空,调用方小程序会无法获得支付结果,该情况为支付宝小程序特性,小程序代码无法处理。

如遇到该情况,需要自行添加标记位判断是否跳到收银台返回,再自行查询订单支付结果

APP调起收银台小程序:

码钱收银小程序appid:2021004118660126

app跳转支付宝码钱收银小程序传参格式:

String sendParam = data=传参json串&sign=urlencode之后的sign

query= urlcode之后的sendParam

示例代码如下,此处仅展示部分字段:

Uri.parse("alipays://platformapi/startapp?appId=2021004118660126&page=pages/cashier/cashier&query=" + URLEncoder.encode(sendParam, "UTF-8"))
String sendParam =" data={"app_id":"MQ11111","app_name":"多点","color":"#FF0000","goods_detail":[{"body":"body123456","categories_tree":"5263","goods_category":"5689","goods_id":"id123456","goods_name":"name123456","price":"0.01","quantity":"20","show_url":"url123456"}],"goods_name":"矿泉水","limit_pay":"1","merch_no":"833304458120002","notify_url":"http://test.mdun.cn/jd/pay/notice","out_trade_no":"test1697697407817","pn":"XN000005","remark":"测试交易备注","source":"app","terminal_info":{"app_version":"23091301","encrypt_rand_num":"928201","secret_text":"968542A5"},"total_amount":"0.01"}&sign=n%2Fo3YVay5A3UoPRSIeLjhLbYv9kCTzX7aJzO5r7QY4DkSA8%2BpaK36ENHG0C0zqd4VVNpzmXiYF%2Bl7OCU7xebciQ4a6sUu%2BbbX9YXDQvz%2BT29HIcmp2LTi7q537wrEA7AIHdk2htH7tKaN9vcQKCbPTDzVcAYfqilLP%2F1fKtSk1EYpssj%2FGcBqwXPK6gcs1NuYXtbqiLmKHw4gloEwBt%2BF%2BRAdGU5euYlOPytwStiHjTAisARMYphzCtEjvzYyD9NzNcsaPB734yx5Dk7vhYtUsgHjuDP%2B0QPz92yMzYfG%2FTuPRpVvTXPLSoLhGC5AbZBUjmpSGkJKG82pD0oJ9xqZQ%3D%3D"

跳转支付宝小程序 传参需要两次urlencode(先将签名生成sign进行urlencode, 再将 data=&sign- 整体进行urlencode)

特殊说明:

小程序回调APP结果说明:

小程序回调是支付宝通过thirdPartSchema带参跳转APP,APP再通过协议获取具体字段参数,其中支付宝进行跳转时是直接在thirdPartSchema后拼接backfromalipay? errmsg=结果信息&code=结果码,如thirdPartSchema为 “allinpaysdk://sdk/”,则app接收的schemeurl为“allinpaysdk://sdk/backfromalipay?msg=结果信息&status=结果码”。

故建议:

1、 thirdPartSchema定义中不要自带参数,如要自带参数,则需要自行通过支付宝返回的schemeurl分割处理获取所需字段,以免报错或者获取不到字段;

2、 thirdPartSchema字段值以“/”结尾,如“allinpaysdk://sdk/”,而不是“allinpaysdk://sdk”

3、 thirdPartSchema字段如果未指定路径,则需要带上“://”,如“allinpaysdk://”

小程序回调app是通过schemeurl跳回app的,会带上status、msg参数,但是该回调仅限于在小程序内点击按钮返回APP时有效,但是当通过物理返回键返回APP、任务列表切换回APP即未通过收银台小程序内按钮退出,该回调并不会触发,该情况为支付宝小程序特性,小程序代码无法处理。

如遇到该情况,建议在APP跳转小程序时新建变量保存跳转标识,在APP内监听到重新打开APP且标志存在,则需要自行查询订单支付结果

文档更新时间: 2023-10-19 16:27   作者:梁博