注:示例仅展示部分字段,具体字段自行根据业务需求填写(未列字段,若需要上送也是原样上送“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”, 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调起收银台小程序:
-
先将下单参数转换成json字符串,json转换方式可自行选择
-
将下单参数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且标志存在,则需要自行查询订单支付结果