官方文檔 要認真看一遍之后,開始搞
JSSDK是網頁調用微信功能的配置文件。在這里浪費了大量時間 所以記錄一下。(吐槽下微信返回的錯誤信息,也是沒誰了。。。)
頁面先配置一下。注釋里幾個參數,可以用ajax會獲取。
<script type="text/javascript"> wx.config({ debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。 appId: '@ViewBag.AppID', // 必填,公眾號的唯一標識 timestamp: @ViewBag.timestamp, // 必填,生成簽名的時間戳 <%= Html.Encode(ViewData["timestamp" ]) %> nonceStr: '@ViewBag.nonceStr', // 必填,生成簽名的隨機串 signature: '@ViewBag.signature', // 必填,簽名 jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表, 這里只需要調用掃一掃 }); $(function() { //console.log(location.href); //alert(location.href.split('#')[0]); $(".btnsis").click(function() { alert('ee'); var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') !== -1; if (!isWeixin) { alert('請用微信打開連接,才可使用掃一掃'); } qrCode(); }); function qrCode() { wx.scanQRCode({ needResult: 1, // 默認為0,掃描結果由微信處理,1則直接返回掃描結果, scanType: ["qrCode"], // 可以指定掃二維碼還是一維碼,默認二者都有 success: function (res) { var result = res.resultStr; // 當needResult 為 1 時,掃碼返回的結果 alert(result); }, error:function(res) { if (res.errMsg.indexOf('function_not_exist') > 0) { alert('當前版本過低,請進行升級'); } } }); } }); </script>
官方常見錯誤處理方式:
invalid signature簽名錯誤。建議按如下順序檢查:
-
確認簽名算法正確,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
-
確認config中nonceStr(js中駝峰標准大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。
-
確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括
'http(s)://'
部分,以及'?'后面的GET參數部分,但不包括'#'hash后面的部分。 -
確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
-
確保一定緩存access_token和jsapi_ticket。
-
確保你獲取用來簽名的url是動態獲取的,動態頁面可參見實例代碼中php的實現方式。如果是html的靜態頁面在前端通過ajax將url傳到后台簽名,前端需要用js獲取當前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享后的頁面簽名失敗。
個人有關錯誤經驗整理:
1.時間戳與簽名是對應的,用同一時間,不能timestamp用了 datetime.now,簽名(signature)不能再重新取了 datetime.now。會造成簽名錯誤(可能時而正確,時而錯誤的情況)
用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign驗證簽名算法正確之后,還是出現錯誤:
2.前端wx.config里的 nonceStr, 這個S是大寫的,這個坑了很多開發者
3.appid保持一致,正式appid與測試appid可能會搞混淆的,打日志看一下。
4. 注意請求參數,不要寫錯了
5.服務器JS域名是否配置:
調用文章,參考鏈接:https://www.cnblogs.com/cr-cool/p/10959974.html