在微信内置浏览器中调起微信支付
整体结构:
第一个页面(首页)为活动简介,点击开通按钮跳转到第二个页面(业务逻辑 + 支付按钮),调起微信支付功能,用户支付,判断当前用户是否支付成功||失败||取消支付,做相关业务逻辑
<!-- href跳转的链接微信授权的结算页面 -->
<!-- redirect_uri:微信授权的结算页面(需要对网址进行url转码) -->
<!-- 转码网址(网上搜)http://tool.chinaz.com/tools/urlencode.aspx -->
<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx1262bc429ae8b41d&redirect_uri=redirect_url&response_type=code&scope=snsapi_base#wechat_redirect" id="dredge">开通会员</a>
业务逻辑页、
1.通过首页跳转到当前页面,在当前页面可以从地址栏中获取到code值(必不可少的参数)
2.后端提供一个支付接口:前端传参 {code:'地址栏上获取的code值‘,total_fee:‘活动支付的金额’}(根据后台需求返回参数),在当前接口中后端返回前端返回如下一组数据,调起微信支付的,
{
"appId":"appId",
"timeStamp":"timeStamp",
"nonceStr":"nonceStr",
"package":"package",
"signType":"signType",
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89"
},
3.点击支付按钮
$('button').on('click', function () {
callpay()
})
function jsApiCall() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
data,
function (res) {
WeixinJSBridge.log(res.err_msg);
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert('支付成功');
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
alert('已取消支付');
} else if (res.err_msg == "get_brand_wcpay_request:fail") {
alert('支付失败');
}
}
);
}
function callpay() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}
else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}
else {
jsApiCall();
}
}
在微信内置浏览器调起微信支付大致逻辑是这样的,因为安全方面,前端使用的时间戳、字符串、签名等逻辑都是由后端实现
在微信外部浏览器中调起微信支付
同样的逻辑需要后台处理,后端会返回调起微信预支付页面的网址,前端只需用window.location.href 跳转至后端返回的网址即可