前言:申請到微信公衆号的同學,可能會挺感興趣的,畢竟微信公衆号,确實是一個好東西,它提供了一個很好的平台,而且它自帶有一套管理模闆,對于微信公衆号可以很好的管理。
但是也僅僅是很好的管理,因為作為開發者來說,很多功能需要更加人性的自定化,就需要由自己寫程式來提供服務,而微信恰恰就提供了這些接口,可以友善的我們去調用微信的功能。
于是我們去開啟開發者模式
點選“基本配置”,然後需要輸入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);
}
有自己伺服器的,就可以驗證成功了