微信公衆號開發 (1) 微信接入認證成爲開發者

一、前言

本系列教程將基於springboot2.1.8.RELEASE完成

本文將實現

  1. 註冊賬號
  2. 接入微信
  3. 認證成爲開發者

二、進入微信公衆平臺註冊賬號

https://mp.weixin.qq.com/

個人用戶建議註冊訂閱號
在這裏插入圖片描述
最後註冊成功如下:
在這裏插入圖片描述

三、接入認證成爲開發者

可參考微信官方開發文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

在這裏插入圖片描述

1、填寫服務器配置

選擇左下方的開發者工具,進入測試賬號開發

why?
測試賬號的權限多點,如果已經認證了的賬號可不需要利用測試賬號開發

在這裏插入圖片描述
在這裏插入圖片描述
登錄進去
在這裏插入圖片描述

填寫服務器 URL 和自定義的校驗Token
在這裏插入圖片描述

溫馨小提示:

  1. 微信公衆號接口必須以http://或https://開頭,分別支持80端口和443端口!
  2. 這裏的url可以選擇自己買的服務器地址,記得必須開放80端口去使用!
    或者使用內網映射外網工具生成一個域名地址供給你開發使用,此方法自行百度,如下就是其中一種使用~
    在這裏插入圖片描述

2、提交驗證URL有效性

在這裏插入圖片描述

配置好後,點擊提交,微信服務器會發送一個GET請求到我們配置的地址上,在後臺通過get請求的方式獲取,請求的時候會傳入幾個參數
在這裏插入圖片描述
回到項目中,處理微信認證,然後啓動項目測試

溫馨小提示:這裏小編將自己的內網映射到外網了,方便本地測試~

@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端口哦!!!
在這裏插入圖片描述

3、測試接入認證

啓動項目後,回到微信公衆平臺,提交發送接入認證請求,如果配置正確,會提示配置成功,並保存配置信息

在這裏插入圖片描述

就這樣,我們簡單的完成了微信認證成爲開發者 ~

本文案例demo源碼

https://gitee.com/zhengqingya/java-workspace

發佈了560 篇原創文章 · 獲贊 618 · 訪問量 109萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章