在阿里官网中有解决微信公众号中调用支付宝手机网站支付的方案,就是使用官方提供的ap.js和pay.html,当然,阿里也给了get和post相关的例子:
我们以demo_post.htm为例:
可以看到script中处理了各个参数,但是这种方式后端不能使用平台提供的SDK完成签名,因为SDK签名会生成form表单,因此各个参数需要自己写代码完成拼接和签名。需要注意的是:手动签名极可能出现问题!
我推荐使用SDK完成签名(官网上的demo可以原封不动),然后修改demo_post.htm文件可以实现微信公众号中用本地浏览器打开支付宝。
(图片中的alipayForm是个div)
obj.alipay=function(){
qmpur.ajax({
url:qmpur.Configs.userBasePath+"/common/pay",
data: {
orderNo: orderNo,
payMethod:2,
orderType:2,
token:qmpur.Configs.token
},
dataType: 'json',
type: 'post',
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
success: function(data) {
var form = data.requestForm
$("#alipayForm").append(form);
$("#alipayForm script").remove();
var queryParam = '';
Array.prototype.slice.call(document.querySelectorAll("input[type=hidden]")).forEach(function (ele) {
queryParam += ele.name + "=" + encodeURIComponent(ele.value) + '&';
});
var url = document.getElementsByName("punchout_form")[0].action+'&'+queryParam;
_AP.pay(url);
},
error: function(xhr, type, errorThrown) {
mui.alert(i18n_com_pay_fail, i18n_com_warn);
}
});
};
公众号其实可以看成是微信的内置浏览器,你可以引导用户选择右上角的选项(三个点),然后选择用本地浏览器打开,注意支付宝回调时授权的问题。
感谢某个路人给我提供思路~