摘要:掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發者模式。若確認此次請求來自微信服務器,請原樣返回參數內容,則接入生效,成為開發者成功,否則接入失敗。
掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發者模式。
找到開發--->基本配置,
設置AppId以及APPSecret,并填寫IP白名單(在線ip查詢:http://www.ip138.com/)。
下面進行服務器配置,這里需要進行token的驗證,會根據你填寫的url進行token的匹配驗證,官網描述的很清楚:https://mp.weixin.qq.com/wiki...
開發者提交信息后,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶參數如下表所示:
開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。加密/校驗流程如下:
1)將token、timestamp、nonce三個參數進行字典序排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信
官網也給出了校驗實例,但是是php的,需要我們轉換成java。具體步驟如下:
創建springboot項目,添加依賴
dom4j dom4j 1.6.1 com.thoughtworks.xstream xstream 1.4.9
創建WechatIndexController類,實現一個get請求方法:
@RestController @RequestMapping("/index") public class WechatIndexController { private static final Logger LOGGER = LoggerFactory.getLogger(WechatIndexController.class); @RequestMapping(method = RequestMethod.GET) public void get(HttpServletRequest request, HttpServletResponse response) { // 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 String signature = request.getParameter("signature"); // 時間戳 String timestamp = request.getParameter("timestamp"); // 隨機數 String nonce = request.getParameter("nonce"); // 隨機字符串 String echostr = request.getParameter("echostr"); PrintWriter out = null; try { out = response.getWriter(); // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,否則接入失敗 if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } } catch (IOException e) { e.printStackTrace(); } finally { out.close(); out = null; } } }
SignUtil類:
public class SignUtil { //token可以自己進行定義,必須為英文或者是數字,長度為3-32字符,這個token要跟服務器配置中的token一致 private static String token = "woshiyigetokenaaa123qqq"; /** * 校驗簽名 * @param signature 簽名 * @param timestamp 時間戳 * @param nonce 隨機數 * @return 布爾值 */ public static boolean checkSignature(String signature,String timestamp,String nonce){ String checktext = null; if (null != signature) { //對ToKen,timestamp,nonce 按字典排序 String[] paramArr = new String[]{token,timestamp,nonce}; Arrays.sort(paramArr); //將排序后的結果拼成一個字符串 String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]); try { MessageDigest md = MessageDigest.getInstance("SHA-1"); //對接后的字符串進行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); checktext = byteToStr(digest); } catch (NoSuchAlgorithmException e){ e.printStackTrace(); } } //將加密后的字符串與signature進行對比 return checktext !=null ? checktext.equals(signature.toUpperCase()) : false; } /** * 將字節數組轉化我16進制字符串 * @param byteArrays 字符數組 * @return 字符串 */ private static String byteToStr(byte[] byteArrays){ String str = ""; for (int i = 0; i < byteArrays.length; i++) { str += byteToHexStr(byteArrays[i]); } return str; } /** * 將字節轉化為十六進制字符串 * @param myByte 字節 * @return 字符串 */ private static String byteToHexStr(byte myByte) { char[] Digit = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; char[] tampArr = new char[2]; tampArr[0] = Digit[(myByte >>> 4) & 0X0F]; tampArr[1] = Digit[myByte & 0X0F]; String str = new String(tampArr); return str; } }
先啟動ngrok,再啟動tomcat項目,將外網地址/index填入對應url,token按照剛才定義的書寫,加密秘鑰隨機生成即可:
提交成功!!
當然,如果有自己的外網服務器,只需要將項目打包發布到外網,url和token根據自己定義的來書寫,也沒有什么問題。注意,一定要保證切換到開發者模式。
服務器配置成功之后,就可以進行后續開發啦,下面會介紹如何訂閱回復圖文消息。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/35959.html
摘要:掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發者模式。若確認此次請求來自微信服務器,請原樣返回參數內容,則接入生效,成為開發者成功,否則接入失敗。 掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發者模式。 找到開發--->基本配置, showImg(https://segmentfault.com/img/bVbdTk2?w=323&h=786); showI...
摘要:微信公眾平臺服務器配置通過后,就能進行下面的開發啦首先可以查看官方的說明文檔普通消息的類型分為種文本消息圖片消息語音消息視頻消息小視頻消息地理位置消息鏈接消息下面介紹實現文本的自動回復文本消息的結構是參數包含根據開發文檔直接上手實體類 微信公眾平臺服務器配置通過后,就能進行下面的開發啦~~首先可以查看官方的說明文檔:https://mp.weixin.qq.com/wiki... sh...
摘要:微信公眾平臺服務器配置通過后,就能進行下面的開發啦首先可以查看官方的說明文檔普通消息的類型分為種文本消息圖片消息語音消息視頻消息小視頻消息地理位置消息鏈接消息下面介紹實現文本的自動回復文本消息的結構是參數包含根據開發文檔直接上手實體類 微信公眾平臺服務器配置通過后,就能進行下面的開發啦~~首先可以查看官方的說明文檔:https://mp.weixin.qq.com/wiki... sh...
摘要:想要實現自定義菜單的功能,需要有已認證訂閱號和已認證服務號。測試時可以嘗試取消關注公眾賬號后再次關注,則可以看到創建后的效果。 想要實現自定義菜單的功能,需要有已認證訂閱號和已認證服務號。對于測試開發來說,可以直接申請一個測試賬號:http://mp.weixin.qq.com/debug... 同樣需要token的驗證,前期接口已經定義好了,直接拿來就可以 showImg(https...
閱讀 1241·2021-11-08 13:25
閱讀 1439·2021-10-13 09:40
閱讀 2773·2021-09-28 09:35
閱讀 734·2021-09-23 11:54
閱讀 1123·2021-09-02 15:11
閱讀 2430·2019-08-30 13:18
閱讀 1667·2019-08-30 12:51
閱讀 2685·2019-08-29 18:39