4.2 支付宝小程序收银台支付调用说明


注:示例仅展示部分字段,具体字段自行根据业务需求填写(未列字段,若需要上送也是原样上送“7.22 小程序收银台支付参数”响应字段)

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

my.navigateToMiniProgram({

appId: '2021001104615521',

extraData: {

cusid:  “7.22 小程序收银台支付参数”响应的“cusid”,

appid: “7.22 小程序收银台支付参数”响应的“appid”,

orgid: “7.22 小程序收银台支付参数”响应的“orgid”,

version:“7.22 小程序收银台支付参数”响应的“version”,

trxamt: “7.22 小程序收银台支付参数”响应的“trxamt”,

reqsn: “7.22 小程序收银台支付参数”响应的“reqsn”,

notify_url: “7.22 小程序收银台支付参数”响应的“notify_url”,

body: “7.22 小程序收银台支付参数”响应的“body”,

remark:“7.22 小程序收银台支付参数”响应的“remark”,

validtime:“7.22 小程序收银台支付参数”响应的“validtime”,

limit_pay: “7.22 小程序收银台支付参数”响应的“limit_pay”,

randomstr: “7.22 小程序收银台支付参数”响应的“randomstr”,

paytype: “7.22 小程序收银台支付参数”响应的“paytype”,

signtype:“7.22 小程序收银台支付参数”响应的“signtype”,

sign: “7.22 小程序收银台支付参数”响应的“sign”,

}

})

通过上述方法会调起收银台小程序,在收银台中完成支付后,会回调支付结果,具体结果可以在小程序生命周期Page.onShow中通过以下方式获取:

onShow: function () {

let options = my.getEnterOptionsSync();

if (options.scene == '1038' &&

options.referrerInfo.appid=='2021001104615521') {

// 代表从收银台小程序返回

let extraData = options.referrerInfo.extraData;

if (extraData.code == 'success') {

// "支付成功";

} else if (extraData.code == 'cancel') {

// "支付已取消";

} else {

// "支付失败:" + extraData.errmsg;

}

}

},

特殊说明:

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

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


 

APP调起收银台小程序:

  1. 先将下单参数转换成json字符串,json转换方式可自行选择

  2. 将下单参数json组装成query参数格式,并进行urlencode后拼接进跳转schemeurl

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

String json = "{" +
        "\"cusid\": \"平台分配的商户号\"," +
        "\"appid\": \"平台分配的appid\"," +
        "\"orgid\": \"平台分配的机构号\"," +
        "\"version\": \"12\"," +
        "\"trxamt\": \"1\"," +
        "\"reqsn\": \"商户唯一订单号\"," +
        "\"notify_url\": \"服务器异步通知页面路径\"," +
        "\"body\": \"标题\"," +
        "\"remark\": \"备注\"," +
        "\"validtime\": \"订单有效时间\"," +
        "\"limit_pay\": \"no_credit\"," +
        "\"randomstr\": \"随机字符串\"," +
        "\"paytype\": \"A02\"," +
        "\"sign\": \"签名,参考2.1\"" +
        "}";
String query = URLEncoder.encode("payinfo=" + URLEncoder.encode(json, "UTF-8"), "UTF-8");
String url =
"alipays://platformapi/startapp?appId=2021001104615521&page=pages/orderDetail/orderDetail&thirdPartSchema="
 URLEncoder.encode("APP接收跳转的schemeurl", "UTF-8")
+ "&query=" + query;

其中thirdPartSchema是app接收跳转的scheme,该字段需要urlencode,其中下单参数按照上述方式组装,共需要两次urlencode

特殊说明:

小程序回调APP结果说明:
 小程序回调是支付宝通过thirdPartSchema带参跳转APP,APP再通过协议获取具体字段参数,其中支付宝进行跳转时是直接在thirdPartSchema后拼接backfromalipay? errmsg=结果信息&code=结果码,如thirdPartSchema为 “allinpaysdk://sdk/”,则app接收的schemeurl为“allinpaysdk://sdk/backfromalipay?errmsg=结果信息&code=结果码”。
 故建议:
1、 thirdPartSchema定义中不要自带参数,如要自带参数,则需要自行通过支付宝返回的schemeurl分割处理获取所需字段,以免报错或者获取不到字段;
2、 thirdPartSchema字段值以“/”结尾,如“allinpaysdk://sdk/”,而不是“allinpaysdk://sdk”
3、 thirdPartSchema字段如果未指定路径,则需要带上“://”,如“allinpaysdk://”

 

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

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


liping2 2024年10月10日 16:23 收藏文档