申請測試微信公眾號


申請測試微信公眾號

申請的地址:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index    

 

點擊登錄,彈出二維碼頁面,微信掃碼登錄后,

需要填寫接口配置信息中的url,token:url是回調地址,token值可以隨意填寫。

js 接口安全域名需要設置一個可以訪問的域名,這個域名和接口配置的url 地址中的域名是一致的, 

 

 

 點擊提交按鈕時,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶參數如下表所示:

通過檢驗signature對請求進行校驗,流程如下:

1)將token、timestamp、nonce三個參數進行排序

2)將三個參數字符串拼接成一個字符串進行 SHA-1 加密

3)開發者獲得加密后的字符串可與signature對比,相等則返回 echostr 參數給微信。

代碼實現如下:

//該方法就是接口配置url中請求的方法
public String WechatCallBack() throws IOException{
        //驗證簽名的是get請求
        boolean isGet = Objects.equals("GET", getRequest().getMethod().toUpperCase());

        if(isGet){
            //微信公眾號服務器接口配置的簽名token
            String token = "dfgsdfgdfg";  //可寫在配置文件中,從配置文件中獲取,或存在數據庫中
            //隨機數
            String nonce = request.getParameter("nonce");
            //簽名
            String signature =request.getParameter("signature");
            //時間戳
            String timestamp = request.getParameter("timestamp");
            
            //驗證token
            String[] paramArr = new String[] {token,timestamp,nonce};
            Arrays.sort(paramArr);
            
            //將驗證的值返回給微信服務器
            PrintWriter out = response.getWriter();
            String echostr = request.getParameter("echostr");
            if (WechatMessageUtil.checkSignNature(paramArr,signature)){
                LOG.error( "===========請求校驗成功========");
                out.print(echostr);
            }else{
                LOG.error("===========請求校驗失敗========");
            }
            return null;
        }
        
        
    }
WechatMessageUtil工具類
public static boolean checkSignNature(String[] paramArr,String signature) {
        
        StringBuilder content = new StringBuilder();
        for (int i = 0; i < paramArr.length; i++)
        {
            content.append(paramArr[i]);
         }
    
        String cipherText = null;
        try{
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] digest = md.digest(content.toString().getBytes());
            cipherText = byteToStr(digest);
        }catch (NoSuchAlgorithmException ex){
            ex.printStackTrace();
        }

        return cipherText != null ? cipherText.equals(signature.toUpperCase()) : false;
    }

    public static String byteToStr(byte[] digest) {
        String strDigest = "";
         for (int i = 0; i < digest.length; i++) {
        strDigest += byteToHexStr(digest[i]);
        }
        return strDigest;
    }

    public static String byteToHexStr(byte mByte) {
        char[] Digit = { '0', '1' , '2', '3', '4' , '5', '6', '7' , '8', '9', 'A' , 'B', 'C', 'D' , 'E', 'F'};
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];

        String s = new String(tempArr);
        return s;
    }

此時頁面上顯示提交成功即可,然后就可以調用微信的接口來實現具體的功能了。

 


免責聲明!

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



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