JAVA折騰微信公眾平台(Token驗證)
BAE的JAVA還在內測的時候,抱着好奇的態度發郵件申請了內測權限,當時折騰了一天,然后就沒折騰了。現在BAE的JAVA都已經正式開放使用了,我又蛋疼的想寫點什么,否則每天僅僅只是工作上的使用,是得不到多大的進步的。
最近微信的公眾平台比較火,於是我也想弄個微信來玩玩。如何注冊微信公眾號?點擊之后就可以看到官方的答案了(額,比較坑爹)。
注冊之后,可以選擇編輯模式和開發模式,這里要說的是開發模式。
首先要開啟開發模式必須要進行Token的一個驗證,你給出一個地址,微信發送請求,然后你給出相應,就這么簡單。雖然說是簡單,但是這是事后才說的,官方只有PHP的DEMO,我用JAVA開發的時候各種蛋疼不會弄,不過好在還是弄出來了。
上傳代碼
以下代碼是校驗Token的關鍵代碼,其中還有一個SHA1加密的類在附件中,這里就不貼出來了。需要注意的是,這里的類我是繼承的HttpServlet,也就是說要進行web.xml的配置,這個就不多說了。
無問題后上傳到你的空間,我用的是BAE,大家也可以試試。
package net.binjoo.wechat;
import java.io.IOException;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.binjoo.utils.SHA1;
@SuppressWarnings("serial")
public class WechatCallbackApi extends HttpServlet {
// 自定義 token
private String TOKEN = "這個地方由你自己定義";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 微信加密簽名
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加密
String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();
// 確認請求來至微信
if (digest.equals(signature)) {
response.getWriter().print(echostr);
}
}
}
開啟消息接口
進入微信公眾平台,選擇導航菜單欄中的【高級設置 - 開發模式 - 成為開發者】或者點擊這里進入,進入后填寫網址URL和Token,其中Token可由可以任意填寫,用作生成簽名,但必須與WechatCallbackApi類中的常量TOKEN一致,否則不能通過校驗,成不了開發者。
一切填寫無問題之后,點擊提交就可以了。是否通過的結果馬上就可以得到響應,希望大家都能夠看到【提交成功】的提示。