關於微信支付的那些坑
最近在做微信支付,原本是用原版的支付方式;
關於一些支付所需引數,
我這裡先假設引數都沒有問題;
這裡是微信內H5調起支付的程式碼:
老版的微信支付到這裡基本就結束了,關於一些:function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公眾號名稱,由商戶傳入 "timeStamp":"1395712654", //時間戳,自1970年以來的秒數 "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //隨機串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信簽名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在使用者支付成功後返回 ok,但並不保證它絕對可靠。 } ); } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); }
get_brand_wcpay_request:fail 這種異常,
我們使用:
alert(JSON.stringify(res));
直接可以打印出對應的錯誤資訊;
------------------------------------------我是一條分割線---------------------------------------
接下來是jssdk的,
wx.chooseWXPay({ timestamp: 0, // 支付簽名時間戳,注意微信jssdk中的所有使用timestamp欄位均為小寫。但最新版的支付後臺生成簽名使用的timeStamp欄位名需大寫其中的S字元 nonceStr: '', // 支付簽名隨機串,不長於 32 位 package: '', // 統一支付介面返回的prepay_id引數值,提交格式如:prepay_id=\*\*\*) signType: '', // 簽名方式,預設為'SHA1',使用新版支付需傳入'MD5' paySign: '', // 支付簽名 success: function (res) { // 支付成功後的回撥函式 alert(JSON.stringify(res)); if(res.errMsg == "chooseWXPay:ok"){ // 支付成功後的回撥函式 apus.ui.toastr.info("支付成功"); }else{ apus.ui.toastr.info("支付失敗"); alert(res.errMsg); } }, cancel: function () { alert("取消"); // window.location.href = "cart3.aspx?Code=<%=Code %>"; }, error: function (e) { alert("失敗"); } });
當然,wx.chooseWXPay()這個方法是jssdk的,所以必須要引:
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
這個js;
而且必須要先進行jssdk初始化:
wx.config({ debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。 appId: '', // 必填,公眾號的唯一標識 timestamp: '', // 必填,生成簽名的時間戳 nonceStr: '', // 必填,生成簽名的隨機串 signature: '',// 必填,簽名,見附錄1 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS介面列表,所有JS介面列表見附錄2 });
這裡安卓手機最常出現的錯誤就是:
"errMsg":"chooseWXPay:fail"
這是jssdk最噁心的地方,不過能報這個錯,基本都不會是大問題,大都是細節要注意一下,例如:
微信jssdk中的所有使用timestamp欄位均為小寫。但最新版的支付後臺生成簽名使用的timeStamp欄位名需大寫其中的S字元
或者支付授權目錄的配置問題;
細心找一下,還是可以找到的;
不過出現最多的,大部分都是當前頁面url未註冊的問題;
因為我們是公眾號開發,所以會有shopId和wx標識存在,例如http://www.abc.cn/shop33333/wx11/pay/index.html;
像這樣的請求地址,我們在配置支付授權目錄的時候,必須要配到http://www.abc.cn/shop33333/wx11/pay/;
很多框架會直接省略掉後面的index.html;這樣的話我們的請求路徑就是http://www.abc.cn/shop33333/wx11/pay;
那麼我們的支付授權目錄則配到:http://www.abc.cn/shop33333/wx11/;這樣就可以了;下面貼一些對應的錯誤解決方法,主要是連結!
比較綜合的:
https://www.cnblogs.com/xueranzp/p/5287691.html
問題解決不絕對,只是提供建議
"errMsg":"chooseWXPay:fail"
因為我個人研究了好幾天,到後來才發現,最終還是支付授權目錄的坑;