需求:APP内嵌H5商城,支付功能要使用APP来调取微信进行支付。
详细描述:
用户在H5商城浏览到喜欢的商品时,点击商品进行下单,H5请求拿到支付需要的参数,H5请求APP暴露的方法并提交支付参数,APP发起支付,收到支付结果返回给H5,H5做支付结果展示。
实现逻辑详见代码:
// 通过UA查询到要发起支付的设备是安卓还是ios,为后续调用不同的方法做准备
var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
// 使用函数简单封装一下调用APP支付的逻辑
function appPay(params) {
// 前端与app交互
if (isAndroid) {
// 格式:window.Android开发人员定义的对象名.Android开发人员定义的方法名(这里是给android传值的地方);
// 参数一般会要求传递json string格式,使用JSON.stringify()将json格式数据转换为json string。
window.android.wechatPay()
}
if (isiOS) {
// window.webkit.ios开发人员定义的方法名.postMessage(这里是给ios传值的地方);
// 参数一般会要求传递json string格式,使用JSON.stringify()将json格式数据转换为json string。
window.webkit.wechatPay.postMessage(JSON.stringify(payParams));
}
// APP与前端交互
window.payResult = function (data) {
// 因为app可以调用前端挂载在window下面的方法。所以前端可以在window对象挂载一个js函数,这样这个函数就能被app调用。
if (data.errCode == 0) {
Toast('支付成功');
} else {
Toast('支付失败');
}
}
}