一:驗證微信的Token


前言:申請到微信公眾號的同學,可能會挺感興趣的,畢竟微信公眾號,確實是一個好東西,它提供了一個很好的平台,而且它自帶有一套管理模板,對於微信公眾號可以很好的管理。

       但是也僅僅是很好的管理,因為作為開發者來說,很多功能需要更加人性的自定化,就需要由自己寫程序來提供服務,而微信恰恰就提供了這些接口,可以方便的我們去調用微信的功能。

 

  於是我們去開啟開發者模式

  
  點擊“基本配置”,然后需要輸入url,輸入token,輸入EncodingAESKey(這個可以隨機生成),最后點擊提交。

 

  問題:?

  奇怪的是微信這方面的文檔對於這部分好像是沒有任何說明(我不知道是不是我沒有找到還是怎么的),我輸入我個人的域名,然后輸入隨便輸入了32位的token,然后點擊隨機生成EncodingAESKey,最后選擇加密模式,然后點擊提交,最后發現微信提示token驗證失敗,試過好多次,也從微信官方文檔查詢token這是個什么東西,最后卻只得到token是一個隨機的字符串,可以自由輸入,結果卻可想而知。

  原因!

  百度之后得到,之前輸入的url,微信會對這個url發出一個http請求,而這個url,需要正確的對於這個微信的請求作出正確的響應,這樣才算驗證成功,這下總算弄明白了

 

 

  由於我已經有了公網的域名,也有了自己的服務器(沒有服務器,沒有域名的,只要申請一個空間,就可以了,空間會送一個三級域名),所以就開始寫代碼,這里是一個servlet,你們只要把這個servlet拷貝過去,就可以驗證了,下面列出代碼:

 

 

  

import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.codec.digest.DigestUtils;

@WebServlet("/validateWeiXin.do")
public class ValidateWeiXin extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private String TOKEN = "這里隨便填入32位以內的數字英文,也就是token";
       

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain;charset=utf-8");
        // 微信加密簽名
        String signature = request.getParameter("signature");
        // 隨機字符串
        String echostr = request.getParameter("echostr");
        // 時間戳
        String timestamp = request.getParameter("timestamp");
        // 隨機數
        String nonce = request.getParameter("nonce");

        String[] str = { TOKEN, timestamp, nonce };
        Arrays.sort(str); // 字典序排序
        String bigStr = str[0] + str[1] + str[2];
        // SHA1加密,我這里用的是common-codec的jar包,你們也可以用java自帶的消息消息摘要來寫,只不過要多寫幾行代碼,但結果都一樣的
        DigestUtils.sha1Hex(bigStr);
        String digest = DigestUtils.sha1Hex(bigStr);

        // 確認請求來至微信
        if (digest.equals(signature)) {
            response.getWriter().print(echostr);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

 

 

  有自己服務器的,就可以驗證成功了

 


免責聲明!

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



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