1. 程式人生 > >微信服務號——呼叫 JS-SDK

微信服務號——呼叫 JS-SDK

1.配置


需要注意的是:

(1)域名不能帶http://或者https://

(2)需要下載檔案 MP_verify_dRk8DCHUcYJUDMuQ.txt    放入到系統,並且使用域名可以訪問到檔案,否則儲存不成功


測試號:


注意:域名不能帶http://或https://就可以了


2.引入 js 路徑:

  http://res.wx.qq.com/open/js/jweixin-1.2.0.js    或    https://res.wx.qq.com/open/js/jweixin-1.2.0.js

 


3.生成簽名

public JSONObject autograph(String url) throws Exception{
        JSONObject json = null;
        try {
            String noncestr = UUID.randomUUID().toString();//隨機字串
            Long timestamp = new Date().getTime();//時間戳
            String jsapiTicket = getJsapiTicket();
            String string1 = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
            String signature = null;//簽名
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.reset();
            md.update(string1.getBytes("UTF-8"));
            signature = sha1(md.digest());
            json = new JSONObject();
            json.put("status", true);
            json.put("url", url);
            json.put("noncestr", noncestr);
            json.put("timestamp", timestamp);
            json.put("signature", signature);
            json.put("appId", WeixinInfo.appId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;
    }

/**
     * 位元組陣列轉換成十六進位制字串
     * @param bytes 位元組陣列
     * @return
     */
    public String sha1(byte[] bytes){
        StringBuffer buf = new StringBuffer();
        for(byte b : bytes){
            String shaHex = Integer.toHexString(b & 0xFF);
            if(shaHex.length() < 2)
                buf.append(0);
            buf.append(shaHex);
        }
        return buf.toString();
    }



jsp頁面:

var url = location.href.split("#")[0];
                sendPost("${ctxpath}/weixin/daily-management/autograph", '{"url":"' + url + '","wechat":"${wechat}"}', function(data){
                    var json = JSON.parse(data);
                    if(json.status){
                        wx.config({
                            debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
                            appId: json.appId, // 必填,公眾號的唯一標識
                            timestamp: json.timestamp, // 必填,生成簽名的時間戳
                            nonceStr: json.noncestr, // 必填,生成簽名的隨機串
                            signature: json.signature,// 必填,簽名,見附錄1
                            jsApiList: ["scanQRCode"] // 必填,需要使用的JS介面列表,所有JS介面列表見附錄2
                        });

//微信掃一掃

                        wx.ready(function(){
                            wx.scanQRCode({
                                needResult: 1, // 預設為0,掃描結果由微信處理,1則直接返回掃描結果,
                                scanType: ["qrCode"], // 可以指定掃二維碼還是一維碼,預設二者都有
                                success: function (res) {
                                    var result = res.resultStr; // 當needResult 為 1 時,掃碼返回的結果
                                    console.log(result);
                                }
                            });
                        });
                    }
                });


注意:要用非同步請求獲取簽名,否則會提示:無效簽名  invalid signatur 。我之前遇到這個情況


在iframe中使用JSSDK,直接使用是不行的,即使在子頁面中重新生成簽名也不能使用,正確使用方法是:parent.wx.xxxxx。

例如:我在主頁面生成簽名在子頁面中使用parent.wx.xxxxx,否則一直會沒有反應