ウィーチャット開発---ウィーチャットスイープコードインターフェースの呼び出し

7317 ワード

ウィーチャットスイープコードインターフェースを起動します.
ステップ1:ドメインを結合する
WeChat公衆番号バインドドメイン名
ステップ二:JSファイルの導入
JSインターフェースを呼び出すページでは、以下のJSファイルを紹介します.http://res.wx.qq.com/open/js/jweixin-1.0.0.js
注意してください.もしあなたのページがhttpsを有効にしたら、必ず紹介してください.https://res.wx.qq.com/open/js/jweixin-1.0.0.js iOS 9.0以上のシステムでJSSDKを成功裏に使用できなくなります.
ステップ3:configインターフェースを通して権限を注入して構成を検証する
これはWeChatを呼び出すための重要な証拠です.WeChatを使うインターフェースをなくしたいなら、まず署名を通過しなければなりません.この方法は直接javascriptに入れます.
wx.config({
    debug: true, //       ,     api         alert  ,         ,   pc   ,       log  ,  pc      。
    appId: '', //   ,        
    timestamp: , //   ,        
    nonceStr: '', //   ,        
    signature: '',//   ,  ,   1
    jsApiList: [] //   ,     JS    ,  JS       2
});
ステップ4:errorインターフェースによる処理に失敗した検証
wx.error(function(res){

    // config         error  ,           ,          config debug    ,       res     ,  SPA         。

});
ステップ5:readyインターフェース処理によって成功的に検証された.
wx.ready(function(){

    // config        ready  ,          config        ,config           ,                   ,         ready            。             ,       ,     ready   。
}); 
基本インターフェースは、現在のクライアントバージョンがJSインターフェース指定をサポートしているかどうかを判断します.
wx.checkJsApi({
    jsApiList: ['chooseImage'], //      JS    ,  JS       2,
    success: function(res) {
        //          ,   api true,    false
        //  :{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
    }
});
WeChatはさっとWeChatをスキャンしてインターフェースを掃きます.
wx.scanQRCode({
    needResult: 0, //    0,         ,1         ,
    scanType: ["qrCode","barCode"], //              ,      
    success: function (res) {
    var result = res.resultStr; //  needResult   1  ,       
}
});
上はWeChatを呼んでインターフェースを掃除する必要条件です.下は干物を置く必要があります.
js

  
	 $.ajax({
         type : "post",
         url : "weixinList/sys.do",
         data : {
             "url" : location.href.split('#')[0]
         },
         dataType : "json",
         success : function(data) {
             wx.config({
                 debug: false, //          
                 appId:data.data.appId,
                 timestamp:data.data.timestamp,
                 nonceStr:data.data.nonceStr,
                 signature:data.data.signature,
                 jsApiList: [
                               'checkJsApi',
                               'scanQRCode'//        
                            ] //   ,     JS    ,  JS       2 
             }); 
             //wx.config          
              wx.error(function(res) {
                 alert("   :" + res.errMsg);//         wx.config    ,         ,            。
             });
            //wx.config         
             wx.ready(function() {
                 wx.checkJsApi({
                      jsApiList : ['scanQRCode'],
                      success : function(res) {

                      }
                 });
             });
             //         
             $("#scanQRCode").click(function(){
                 wx.scanQRCode({
                     needResult : 0, //    0,         ,1         ,
                     scanType : [ "qrCode", "barCode"], //              ,      
                     success : function(res) {
                    	 var result = res.resultStr; //  needResult   1  ,       
                     },
                 });
             });

             
         }
     });


ページ読み込み時にajaxメソッドを実行してwx.com figに必要なパラメータを取得します.
jsp

utils
package xxx.utils;
 
/**
 *       js     
 * @author Administrator
 *
 */
 //url                         
public class JsSignUtil {
	    public static Map sign(String url) throws IOException {
	    //  AccessToken   ticket   AccessToken        
	        JSONObject jsapiTicketObject = AuthUtil.doGetJson("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + WeiXinUtils.getAccessToken() + "&type=jsapi");
	        String jsapiTicket = (String) jsapiTicketObject.get("ticket");
       
       //               

	        System.out.println("    jsapiTicketObject"+jsapiTicketObject);
	        Map ret = new HashMap();
	        String nonce_str = create_nonce_str();
	        String timestamp = create_timestamp();
	        String string1;
	        String signature = "";
	 
	        //             ,     
	        string1 = "jsapi_ticket=" + jsapiTicket +
	                "&noncestr=" + nonce_str +
	                "&timestamp=" + timestamp +
	                "&url=" + url;
	        System.out.println("string1="+string1);
	 
	        try
	        {
	            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
	            crypt.reset();
	            crypt.update(string1.getBytes("UTF-8"));
	            signature = byteToHex(crypt.digest());
	        }
	        catch (NoSuchAlgorithmException e)
	        {
	            e.printStackTrace();
	        }
	        catch (UnsupportedEncodingException e)
	        {
	            e.printStackTrace();
	        }
	 
	        ret.put("url", url);
	        ret.put("jsapi_ticket", jsapiTicket);
	        ret.put("nonceStr", nonce_str);
	        ret.put("timestamp", timestamp);
	        ret.put("signature", signature);
	        ret.put("appId", "wxca42d473ba246dd9");
	 
	        System.out.println("url="+ret.get("url"));
	        System.out.println("jsapi_ticket="+ret.get("jsapi_ticket"));
	        System.out.println("nonceStr="+ret.get("nonceStr"));
	        System.out.println("signature="+ret.get("signature"));
	        System.out.println("timestamp="+ret.get("timestamp"));
	 
	        return ret;
	    }
	 
	 
	    /**
	     *     
	     * @param hash
	     * @return
	     */
	    private static String byteToHex(final byte[] hash) {
	        Formatter formatter = new Formatter();
	        for (byte b : hash)
	        {
	            formatter.format("%02x", b);
	        }
	        String result = formatter.toString();
	        formatter.close();
	        return result;
	    }
	 
	    /**
	     *      --         
	     * @return
	     */
	    private static String create_nonce_str() {
	        return UUID.randomUUID().toString();
	    }
	 
	    /**
	     *            
	     * @return
	     */
	    private static String create_timestamp() {
	        return Long.toString(System.currentTimeMillis() / 1000);
	    }
	}
コントローラ
@ResponseBody
@RequestMapping(value="sys")
	public JsonBean sys(String url) throws IOException {
		Map ret = JsSignUtil.sign(url);
		return new JsonBean(0,ret,"");
	}
今まで運がよければ、ボタンを押せばいいですが、invalid signature invalid url domainなどのような問題があります.https://mp.weixin.qq.com/wiki?t=resource/res_メーン&id=mp 14211415は結局私も三泊二日間探しました.
神様よ、アーメン!