.NET 微信開發 JSSDK配置 wx.config調用 invalid signature簽名錯誤分析


   官方文檔 要認真看一遍之后,開始搞

   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簽名錯誤。建議按如下順序檢查:

  1. 確認簽名算法正確,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。

  2. 確認config中nonceStr(js中駝峰標准大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。

  3. 確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'后面的GET參數部分,但不包括'#'hash后面的部分。

  4. 確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。

  5. 確保一定緩存access_token和jsapi_ticket。

  6. 確保你獲取用來簽名的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM