Java 微信公眾號開發(一)介入微信
阿新 • • 發佈:2018-12-13
開發微信公眾號在沒有正式的公眾平臺賬號時,我們可以使用測試平臺賬號———
進入之後我們會看見此時appID、appsecret都有了,url是我們成為開發者與微信進行的一次握手配置(url其實就是我們專案中你controller的訪問地址,token是我們自己填寫的,可在後臺進行判斷的),這裡的url可以用ngrok來做對映,這樣開發起來比較方便,ngrok配置(點選檢視)ngrok下載地址(點選下載)我們可以在開發者文件中看見
這裡檢視詳細配置;期間我們要說道微信會給我們的url通過get方式傳遞4個引數
下面我們來看一下controller怎麼編寫
package com.website.wechat.controller;
import java.io.IOException; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Collections; import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;
@Controller @RequestMapping(value=“weixin”) public class WeiXinController {
private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; @RequestMapping(value="getWeiXinMethod",method=RequestMethod.GET) @ResponseBody public void getWeiXinMethod(HttpServletRequest request, HttpServletResponse response) throws IOException{ boolean validate = validate(request); if (validate) { response.getWriter().write(request.getParameter("echostr")); response.getWriter().close(); } } private boolean validate(HttpServletRequest req) throws IOException { String signature = req.getParameter("signature");//微信加密簽名 String timestamp = req.getParameter("timestamp");//時間戳 String nonce = req.getParameter("nonce");//隨機數 List<String> list = new ArrayList<String>(); list.add("chenchen"); list.add(timestamp); list.add(nonce); Collections.sort(list);//字典排序 String s = ""; for (int i = 0; i < list.size(); i++) { s += (String) list.get(i); } if (encode("SHA1", s).equalsIgnoreCase(signature)) { return true; } else { return false; } } public static String encode(String algorithm, String str) { if (str == null) { return null; } try { //Java自帶的加密類 MessageDigest messageDigest = MessageDigest.getInstance(algorithm); //轉為byte messageDigest.update(str.getBytes()); return getFormattedText(messageDigest.digest()); } catch (Exception e) { throw new RuntimeException(e); } } private static String getFormattedText(byte[] bytes) { int len = bytes.length; StringBuilder buf = new StringBuilder(len * 2); // 把密文轉換成十六進位制的字串形式 for (int j = 0; j < len; j++) { buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]); buf.append(HEX_DIGITS[bytes[j] & 0x0f]); } return buf.toString(); }
} 此時驗證和呼叫已經沒問題,成功介入微信,成為一名開發者