摘要:掃碼登陸微信公眾號(hào)平臺(tái),此時(shí)默認(rèn)的是編輯模式,需要修改為開發(fā)者模式。若確認(rèn)此次請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷貐?shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。
掃碼登陸微信公眾號(hào)平臺(tái),此時(shí)默認(rèn)的是編輯模式,需要修改為開發(fā)者模式。
找到開發(fā)--->基本配置,
設(shè)置AppId以及APPSecret,并填寫IP白名單(在線ip查詢:http://www.ip138.com/)。
下面進(jìn)行服務(wù)器配置,這里需要進(jìn)行token的驗(yàn)證,會(huì)根據(jù)你填寫的url進(jìn)行token的匹配驗(yàn)證,官網(wǎng)描述的很清楚:https://mp.weixin.qq.com/wiki...
開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫的服務(wù)器地址URL上,GET請(qǐng)求攜帶參數(shù)如下表所示:
開發(fā)者通過檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次GET請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。加密/校驗(yàn)流程如下:
1)將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
2)將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
3)開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信
官網(wǎng)也給出了校驗(yàn)實(shí)例,但是是php的,需要我們轉(zhuǎn)換成java。具體步驟如下:
創(chuàng)建springboot項(xiàng)目,添加依賴
dom4j dom4j 1.6.1 com.thoughtworks.xstream xstream 1.4.9
創(chuàng)建WechatIndexController類,實(shí)現(xiàn)一個(gè)get請(qǐng)求方法:
@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結(jié)合了開發(fā)者填寫的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)。 String signature = request.getParameter("signature"); // 時(shí)間戳 String timestamp = request.getParameter("timestamp"); // 隨機(jī)數(shù) String nonce = request.getParameter("nonce"); // 隨機(jī)字符串 String echostr = request.getParameter("echostr"); PrintWriter out = null; try { out = response.getWriter(); // 通過檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn),若校驗(yàn)成功則原樣返回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可以自己進(jìn)行定義,必須為英文或者是數(shù)字,長(zhǎng)度為3-32字符,這個(gè)token要跟服務(wù)器配置中的token一致 private static String token = "woshiyigetokenaaa123qqq"; /** * 校驗(yàn)簽名 * @param signature 簽名 * @param timestamp 時(shí)間戳 * @param nonce 隨機(jī)數(shù) * @return 布爾值 */ public static boolean checkSignature(String signature,String timestamp,String nonce){ String checktext = null; if (null != signature) { //對(duì)ToKen,timestamp,nonce 按字典排序 String[] paramArr = new String[]{token,timestamp,nonce}; Arrays.sort(paramArr); //將排序后的結(jié)果拼成一個(gè)字符串 String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]); try { MessageDigest md = MessageDigest.getInstance("SHA-1"); //對(duì)接后的字符串進(jìn)行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); checktext = byteToStr(digest); } catch (NoSuchAlgorithmException e){ e.printStackTrace(); } } //將加密后的字符串與signature進(jìn)行對(duì)比 return checktext !=null ? checktext.equals(signature.toUpperCase()) : false; } /** * 將字節(jié)數(shù)組轉(zhuǎn)化我16進(jìn)制字符串 * @param byteArrays 字符數(shù)組 * @return 字符串 */ private static String byteToStr(byte[] byteArrays){ String str = ""; for (int i = 0; i < byteArrays.length; i++) { str += byteToHexStr(byteArrays[i]); } return str; } /** * 將字節(jié)轉(zhuǎn)化為十六進(jìn)制字符串 * @param myByte 字節(jié) * @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; } }
先啟動(dòng)ngrok,再啟動(dòng)tomcat項(xiàng)目,將外網(wǎng)地址/index填入對(duì)應(yīng)url,token按照剛才定義的書寫,加密秘鑰隨機(jī)生成即可:
提交成功??!
當(dāng)然,如果有自己的外網(wǎng)服務(wù)器,只需要將項(xiàng)目打包發(fā)布到外網(wǎng),url和token根據(jù)自己定義的來書寫,也沒有什么問題。注意,一定要保證切換到開發(fā)者模式。
服務(wù)器配置成功之后,就可以進(jìn)行后續(xù)開發(fā)啦,下面會(huì)介紹如何訂閱回復(fù)圖文消息。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76413.html
摘要:掃碼登陸微信公眾號(hào)平臺(tái),此時(shí)默認(rèn)的是編輯模式,需要修改為開發(fā)者模式。若確認(rèn)此次請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷貐?shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。 掃碼登陸微信公眾號(hào)平臺(tái),此時(shí)默認(rèn)的是編輯模式,需要修改為開發(fā)者模式。 找到開發(fā)--->基本配置, showImg(https://segmentfault.com/img/bVbdTk2?w=323&h=786); showI...
摘要:微信公眾平臺(tái)服務(wù)器配置通過后,就能進(jìn)行下面的開發(fā)啦首先可以查看官方的說明文檔普通消息的類型分為種文本消息圖片消息語(yǔ)音消息視頻消息小視頻消息地理位置消息鏈接消息下面介紹實(shí)現(xiàn)文本的自動(dòng)回復(fù)文本消息的結(jié)構(gòu)是參數(shù)包含根據(jù)開發(fā)文檔直接上手實(shí)體類 微信公眾平臺(tái)服務(wù)器配置通過后,就能進(jìn)行下面的開發(fā)啦~~首先可以查看官方的說明文檔:https://mp.weixin.qq.com/wiki... sh...
摘要:微信公眾平臺(tái)服務(wù)器配置通過后,就能進(jìn)行下面的開發(fā)啦首先可以查看官方的說明文檔普通消息的類型分為種文本消息圖片消息語(yǔ)音消息視頻消息小視頻消息地理位置消息鏈接消息下面介紹實(shí)現(xiàn)文本的自動(dòng)回復(fù)文本消息的結(jié)構(gòu)是參數(shù)包含根據(jù)開發(fā)文檔直接上手實(shí)體類 微信公眾平臺(tái)服務(wù)器配置通過后,就能進(jìn)行下面的開發(fā)啦~~首先可以查看官方的說明文檔:https://mp.weixin.qq.com/wiki... sh...
摘要:想要實(shí)現(xiàn)自定義菜單的功能,需要有已認(rèn)證訂閱號(hào)和已認(rèn)證服務(wù)號(hào)。測(cè)試時(shí)可以嘗試取消關(guān)注公眾賬號(hào)后再次關(guān)注,則可以看到創(chuàng)建后的效果。 想要實(shí)現(xiàn)自定義菜單的功能,需要有已認(rèn)證訂閱號(hào)和已認(rèn)證服務(wù)號(hào)。對(duì)于測(cè)試開發(fā)來說,可以直接申請(qǐng)一個(gè)測(cè)試賬號(hào):http://mp.weixin.qq.com/debug... 同樣需要token的驗(yàn)證,前期接口已經(jīng)定義好了,直接拿來就可以 showImg(https...
閱讀 1918·2021-11-22 09:34
閱讀 1158·2021-10-09 09:44
閱讀 3046·2021-09-29 09:35
閱讀 3626·2021-09-14 18:01
閱讀 1494·2021-08-16 10:49
閱讀 1096·2019-08-29 14:11
閱讀 859·2019-08-29 12:47
閱讀 3081·2019-08-26 13:47