1. 程式人生 > >基於微信公眾號掃描裝置二維碼並完成裝置啟用操作

基於微信公眾號掃描裝置二維碼並完成裝置啟用操作

微信公眾號掃描功能實現

自定義選單

微信公眾號是一個很好的業務展現工具,快速與客戶拉近距離,簡單的微信公眾號的維護和宣傳,非介面實現可以通過微信公眾號管理頁面實現,但是設計到一個數據和使用者互動行為,需要開發人員實現相應的微信公眾號提供的介面,完成相關的功能。

配置微信公眾號資料互動伺服器

填寫伺服器配置

在這裡插入圖片描述

驗證訊息的確來自微信伺服器

if (httpMethod.equals(HttpMethod.Http_Get))
            {
                if(null != operator && operator.equals("verifyToken")){
                    // 微信加密簽名(token、timestamp、nonce。)
                    String signature = httpServletRequest.getParameter
("signature"); String timestamp = httpServletRequest.getParameter("timestamp");// 時間戳 String nonce = httpServletRequest.getParameter("nonce");// 隨機數 String echostr = httpServletRequest.getParameter("echostr");// 隨機字串 verifyTokenSer
(signature,timestamp,nonce,echostr,TOKEN); }else { System.out.println("請求不合法,不支援HTTP方法"); } }
public void verifyTokenSer(String signature, String timestamp, String nonce, String echostr, String token)
    {
        try
        {
            HttpServletResponse response = ServletActionContext.getResponse();
            // 將token、timestamp、nonce三個引數進行字典序排序
            String[] params = new String[]{token, timestamp, nonce};
            Arrays.sort(params);
            // 將三個引數字串拼接成一個字串進行sha1加密
            String clearText = params[0] + params[1] + params[2];
            String algorithm = "SHA-1";
            String sign = new String(Hex.encodeHex(MessageDigest.getInstance(algorithm).digest((clearText).getBytes()), true));
            // 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
            if (signature.equals(sign))
            {
                response.getWriter().print(echostr);
            }

        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

TOKEN 為你設定的令牌,此介面為伺服器地址設定的校驗介面,在微信公眾號平臺校驗介面是否調通,如調通,使用者的掃描,關注公眾號等操作都會回撥到該伺服器。

獲取介面呼叫認證引數access_token

1 根據微信公眾號平臺提供的開發者ID(AppID)和開發者密碼獲取access_token
在這裡插入圖片描述
2 呼叫相關微信公眾號介面獲取access_token
在這裡插入圖片描述

注:1. 根據微信公眾號介面提示access_token 一天獲取次數有限制,而且一定時間需要重新獲取,或者會失效,access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效,這裡不再描述。
2. 呼叫介面時,請登入“微信公眾平臺-開發-基本配置”提前將伺服器IP地址新增到IP白名單中,點選檢視設定方法,否則將無法呼叫成功。

在這裡插入圖片描述

關閉自定義選單

在這裡插入圖片描述

建立自定義選單

在這裡插入圖片描述

此時我們的公眾號選單就會顯示我們設定的選單項

移動端設計

FrozenUI移動端使用—這裡不再贅述,自行學習
在這裡插入圖片描述

點選掃描按鈕,完成掃描裝置二維碼及條形碼操作

微信JS-SDK的使用

想要在自己的伺服器端,尤其是移動端使用微信掃描功能,通過使用微信JS-SDK,網頁開發者可藉助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信使用者提供更優質的網頁體驗。

步驟一:繫結域名

先登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”。

在這裡插入圖片描述

步驟二:引入JS檔案
在需要呼叫JS介面的頁面引入如下JS檔案,(支援https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

步驟三:通過config介面注入許可權驗證配置

var ajaxParam = {
            url: "http://889f29c4.ngrok.io/dcms/devActivate_data?operator=getConfig",
            type: 'get',
            async: true,
            timeout: "",
            dataType: 'json',
            cache:false,
            success: function (data, textStatus, jqXHR) {
                if(data.code ==0){
                    var timestamp = data.data.timestamp;
                    var nonceStr = data.data.nonceStr;
                    var signature = data.data.signature;
                    // alert("signature:"+signature+"timestamp:"+timestamp+"nonceStr:"+nonceStr);

                    wx.config({
                        debug: false, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
                        appId: '', // 必填,公眾號的唯一標識
                        timestamp:timestamp , // 必填,生成簽名的時間戳
                        nonceStr: nonceStr, // 必填,生成簽名的隨機串
                        signature: signature,// 必填,簽名
                        jsApiList: ["scanQRCode"] // 必填,需要使用的JS介面列表
                    });
                }
            },
            error: function (xhr, textStatus, error) {
            },

        };
        $.ajax(ajaxParam);

通過事件啟動掃描操作

wx.scanQRCode({
            needResult : 1,
            scanType : [ "qrCode", "barCode" ],
            success : function(res) {
                var resultStr = res.resultStr;
                var errMsg = res.errMsg;
                if(errMsg == "scanQRCode:ok"){
                    $("#scanQr").find("input").val(resultStr);
                    // alert(JSON.stringify(res));
                }

            },
            fail : function(res) {
                console.log(res)
                // alert(JSON.stringify(res));

            }
        });