現在前端很多框架的前端路由都帶#號,主要為了做到無刷新跳轉頁面。
在微信公眾號做微信支付時,配置的支付路徑比如是http://www.eee.com/#/order,在調微信支付的方法時錯誤信息是‘URL未注冊’。
我的解決方案是,寫一個專門做為微信支付的頁面,ajax請求后台返回需要調取微信支付的數據(簽名等信息),然后把這些信息暫存起來(可以用h5的緩存,記得支付完清掉,如果用node,可以用node的緩存,以自己的實際項目方便)。跳轉到支付的頁面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body></body>
<script type="text/javascript">
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
var request = {};
if (sessionStorage && sessionStorage.wechatPayRequest) {
request = JSON.parse(sessionStorage.wechatPayRequest);
}
WeixinJSBridge.invoke("getBrandWCPayRequest", {
appId : request.appId,
timeStamp : request.timeStamp,
nonceStr : request.nonceStr,
"package" : request.packageInfo,
signType : request.signType,
paySign : request.paySign
}, function(res) {
sessionStorage.wechatPayRequest = ''
if ("get_brand_wcpay_request:ok" == res.err_msg) {
// 支付成功
}else {
// 支付失敗
}
});
})
</script>
</html>
一個空的頁面即可,此處package是關鍵字,所以需要后台返回一個新的字段代替package。
然后處理支付成功和支付失敗的回調
再把這個頁面在當前域名下配一個路徑,比如當前項目域名是http://www.eeeee.com,就把頁面域名指定為http://www.eeeee.com/pay/wechat
然后在微信公眾號的后台把支付路徑配置為http://www.eeeee.com/pay/
這個方法有個缺點,就是調取支付要跳轉頁面,用戶體驗不好,支付完成還要再跳轉到相應的頁面。