微信公衆番号のH 5ページは微信スキャンを呼び出す


ウォーミングアップ
微信公式API
  • WeChatパブリックプラットフォームにログインし、必要な環境を構成します.例えば、JSインタフェースセキュリティドメイン名
  • 微信JSファイル
  • を導入
    フロントエンド実装
    1>ローディング・ウィーチャット構成を初期化し、関連パラメータを取得
    $(function () {
            $.ajax({
                type: 'get',
                url: baseUrl+'/getSign',
                data: {
                    'tokenUrl': location.href
                },
                async: false,
                dataType: 'JSON',
                success: function (res) {
                    //       、       
                    wx.config({
                        debug: false,
                        appId: res.appId,
                        timestamp: res.timestamp, //todo later
                        nonceStr: res.nonceStr,
                        signature: res.signature,
                        jsApiList: [
                            //        API          
                            'scanQRCode'
                        ]
                    })
                },
                error: function () {
                    console.log('config fail')
                }
            })
    	}
    

    2>「スイープ」ボタンをクリックして微信スイープインタフェースを呼び出す
    //    ,     
    $('.scanPic').click(function () {
    	wx.scanQRCode({
    		desc: 'scanQRCode desc',
    		needResult : 1, //    0,         ,1         ,
    		scanType : [ "qrCode", "barCode" ], //              ,      
    		success : function(res) {
    			// console.log("      ",res.resultStr)
    			var result = res.resultStr;
    			var barCode = getBarCode(result);
    		},
    		error:function(res){
    			console.log(res)
    		}
    	});
    })
    

    バックグラウンド実装
    1.accessTokenを取得し、accessTokenでticketを取得する
    /***jsapiを取得ticket */
    public static String getJsApiTicket(String token) {
        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket"
                + "?access_token=" + token
                + "&type=jsapi";
        String response = HttpClientUtil.doGet(url);
        if (StringUtils.isBlank(response)) {
            return null;
        }
        JSONObject jsonObject = JSONObject.parseObject(response);
        System.out.println(response);
        String ticket = jsonObject.getString("ticket");
        return ticket;
    }
    

    2.noncesStr、timestamp、signatureなどの計算署名などの他のパラメータを取得する
    public Map sign(String url) throws Exception { Map map = new HashMap<>(16);
        //  jsapi_ticket。
        String jsapiTicket = this.getJsApiTicket();
        //nonceStr      config  nonceStr  ,         ,        
        String nonceStr = createNonceStr();
        String timestamp = createTimestamp();
        String signature = "";
        String urlPath = "jsapi_ticket=" + jsapiTicket +
                "&noncestr=" + nonceStr +
                "&timestamp=" + timestamp +
                "&url=" + url;
        try {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(urlPath.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        map.put("url", url);
        map.put("jsapi_ticket", jsapiTicket);
        map.put("nonceStr", nonceStr);
        map.put("timestamp", timestamp);
        map.put("signature", signature);
        map.put("appId", appID);
        return map;
    }
    

    注意事項
  • 署名用のnoncestrとtimestampはwxとしなければならない.configのnoncesStrはtimestampと同じです.