本系列教程將基於springboot2.1.8.RELEASE
完成java
本文將實現git
https://mp.weixin.qq.com/
我的用戶建議註冊訂閱號最後註冊成功以下:spring
可參考微信官方開發文檔: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
選擇左下方的開發者工具,進入測試帳號開發api
why?
測試帳號的權限多點,若是已經認證了的帳號可不須要利用測試帳號開發
登陸進去springboot
填寫服務器URL
和自定義的校驗Token
服務器
舒適小提示:微信
- 微信公衆號接口必須以http://或https://開頭,分別支持80端口和443端口!
- 這裏的url能夠選擇本身買的服務器地址,記得必須開放80端口去使用! 或者使用內網映射外網工具生成一個域名地址供給你開發使用,此方法自行百度,以下就是其中一種使用~
配置好後,點擊提交,微信服務器會發送一個GET
請求到咱們配置的地址上,在後臺經過get請求的方式獲取,請求的時候會傳入幾個參數回到項目中,處理微信認證,而後啓動項目測試app
舒適小提示:這裏小編將本身的內網映射到外網了,方便本地測試~
@Slf4j @RestController @RequestMapping("/api/weixin/index") @Api(tags = "微信 - 接口") public class IndexController extends BaseController { // TODO 這裏的token是微信公衆平臺上本身所配的! private static final String token = "zhengqing"; /** * 處理微信認證:驗證服務器地址的有效性,get提交 * signature: 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 * timestamp 時間戳 * nonce: 隨機數 * echostr: 隨機字符串 */ @GetMapping public void checkSignature(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("============= 處理微信認證 ==============="); // 拿到微信的請求參數 String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); String echostr = request.getParameter("echostr"); // ① 將token、timestamp、nonce三個參數進行字典序排序 b a d c h ==>a b c d h String[] strArr = {token, timestamp, nonce}; // 字典排序 Arrays.sort(strArr); // ② 將三個參數字符串拼接成一個字符串進行sha1加密 StringBuffer sb = new StringBuffer(); // 字符串拼接 for (String str : strArr) { sb.append(str); } // 加密 String sha1Str = SecurityUtil.sha1(sb.toString()); // ③ 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信 if (sha1Str.equals(signature)) { // 若是相等,就是來自微信請求 // 若確認這次GET請求來自微信服務器,原樣返回echostr參數內容,則接入生效 response.getWriter().println(echostr); } } }
其中sha1加密工具類微信公衆平臺
public class SecurityUtil { public static String sha1(String str) { try { StringBuilder sb = new StringBuilder(); MessageDigest digest = MessageDigest.getInstance("sha1"); // 放入加密字符串 digest.update(str.getBytes()); // 進行加密 byte[] digestMsg = digest.digest(); // byte轉換16進制 for (byte b : digestMsg) { sb.append(String.format("%02x", b)); } return sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return str; } }
注意端口必須爲80端口哦!!!工具
啓動項目後,回到微信公衆平臺,提交發送接入認證請求,若是配置正確,會提示配置成功,並保存配置信息
就這樣,咱們簡單的完成了微信認證成爲開發者 ~