這兩天研究了下公衆號,因爲之前用MVC寫的公衆號放到新寫的springboot項目中總是報錯,於是打算乾脆用springboot寫個公衆號架子以後也好用
先來第一步:連接微信服務器
1.創建個springboot框架項目,可以用eclipse或者idea創建,也可以到springboot官網上創建,不會官網創建的同學可以參照之前的博客https://blog.csdn.net/Gemini_Kanon/article/details/90903765,這裏我提到了springboot官網創建項目的栗子
2.自己申請個公衆號,如果是個人用的話申請個訂閱號就可以,然後進到基本配置裏配置一下
URL:驗證服務器有效性的時候使用(http://服務器ip或者域名/工程名/方法名),這裏需要說明一下,因爲公衆號開發調試需要在服務器上運行需要你能訪問到微信公衆平臺的地址,所以當你代碼有更改需要調試時就需要來回到服務器上更新代碼,這樣會很麻煩,這裏小編推薦幾個內網穿透的工具Ngrok、NatApp、Nat123,小編用的NatApp,原力都一樣,用哪個自己定
Token:一個隨機的字符串可以自己隨意定義
EncodingAESKey直接點隨機生成就可以
當你寫完點提交後會出現下圖黃條的字樣,因爲你還沒驗證呢,下面貼代碼
如果是第一次開發的話在本地可以先用公衆號測試號調試開發
在公衆號登錄後首頁:開發→開發者工具→公衆平臺測試賬號,登錄之後需要設置以下信息
URL和TOKEN和上面公衆號設置方法一樣
設置JS接口安全域名,和上面URL中的一樣,例:
URL設置的是:http://www.baidu.com,那麼安全域名直接寫www.baicu.com即可
還有一個授權回調域名需要設置,這個是個小坑,當時我沒看文檔然後項目怎麼弄都不好使,後來才發現這個問題
點擊修改後會出來一個對話框,裏面的域名設置和上面的JS接口安全域名一樣即可
3.開始驗證
@RestController
public class WeChatController {
@Autowired
private WeiXinSignUtil weixinSignUtil;
@RequestMapping(value="/WeixinServlet", method= RequestMethod.GET)
public String WeixinServlet(HttpServletRequest request)throws Exception{
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
if (weixinSignUtil.checkSignature(signature, timestamp, nonce)){
return echostr;
}else {
return null;
}
}
}
//驗證微信服務器工具類
@Component
public class WeiXinSignUtil {
public static Logger logger = LoggerFactory.getLogger(WeiXinSignUtil.class);
public static String token = "kobebryant"; //這個token一定要和你公衆號裏配置的token是一樣的,否則驗證不會通過
public boolean checkSignature(String signature, String timestamp, String nonce){
String[] arr = new String[] { token, timestamp, nonce };
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
content = null;
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
}
然後啓動你的項目,項目啓動後再去點擊配置服務器提交按鈕,中間會有一步讓你點擊一下一個綠色的啓用按鈕(我已經啓用了找不到那個界面了),出現下圖就成功了
代碼借鑑自:https://blog.csdn.net/qq_40715775/article/details/79871543