微信公众平台开发者配置
目錄
第一部分 啟用開發(fā)者配置
(1) 登錄微信公眾平臺(tái)
(2)配置IP 白名單
(3)啟用開發(fā)者配置
(4)具體的代碼調(diào)用部分
第二部分 接收事件推送
(1)接口
(2) 業(yè)務(wù)邏輯類?
(3)MessageUtil
(4)打印結(jié)果:
總結(jié):
前言:
準(zhǔn)備工作,今天要介紹的是微信公眾平臺(tái)接收事件推送部分,從官方文檔可以看出,微信公眾平臺(tái)提供了事件推送的功能,用戶關(guān)注公眾號(hào) 取消關(guān)注號(hào)都可以將內(nèi)容推送到 開發(fā)者在微信公眾平臺(tái)配置的url 中,開發(fā)者可以拿著這些信息作進(jìn)一步的邏輯判斷。
第一部分 啟用開發(fā)者配置
步驟:
(1) 登錄微信公眾平臺(tái)
首先需要登錄 微信公眾平臺(tái)賬號(hào),成為微信公眾平臺(tái)的開發(fā)者,點(diǎn)擊下圖標(biāo)注的地方可以進(jìn)入開發(fā)者配置頁面。
?
(2)配置IP 白名單
多個(gè)IP 的時(shí)候直接換行,這個(gè)需要配置? , 很重要, 如下圖 ,我將我自己電腦上的ip 配置上去了。
?
(3)啟用開發(fā)者配置
其中需要注意的是 Token 可以由開發(fā)者自定義,只需要 保證代碼中的Token 和我下面的Token一致即可。
(4)具體的代碼調(diào)用部分
- 4.1? 接口調(diào)用方法需要是get 請(qǐng)求。
- 4.2 SignUtil
上面這些操作就可以開啟開發(fā)者配置。ok
第二部分 接收事件推送
配置完上面的開發(fā)者配置以后,就可以做接收事件推送了! 我還是寫在 WechatDeveloperController中
dopost 中的方法就是用來接收微信服務(wù)器發(fā)送過來的消息
(1)接口
package com.bos.controller.wechat;import com.bos.qiWechat.WXBizMsgCrypt; import com.bos.service.WeiService; import com.bos.util.WeiXinParamesUtil; import com.bos.wechat.SignUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter;/*** @Author tanghh* @Date 2020/4/3 10:12*/ @RestController @RequestMapping(value = "/wechat") public class WechatDeveloperController {@Autowiredprivate WeiService weiService;/*** 確認(rèn)請(qǐng)求來自微信服務(wù)器** @param signature 微信加密簽* @param timestamp 時(shí)間戳* @param nonce 隨機(jī)數(shù)* @param echostr 隨機(jī)字符串* @param signature* @param timestamp* @param nonce* @param echostr* @return*/@RequestMapping(method = {RequestMethod.GET})public void doGet(@RequestParam(value = "signature", required = false) String signature,@RequestParam(value = "timestamp", required = false) String timestamp,@RequestParam(value = "nonce", required = false) String nonce,@RequestParam(value = "echostr", required = false) String echostr,HttpServletResponse response) throws Exception {if (SignUtil.checkSignature(signature, timestamp, nonce)) {response.getOutputStream().println(echostr);System.out.println("微信驗(yàn)證成功");}}/*** 處理微信服務(wù)器發(fā)來的消息** @return ????*/@RequestMapping(method = {RequestMethod.POST})public void dopost(HttpServletRequest request) {// 調(diào)用核心業(yè)務(wù)類接收消息、處理消息weiService.wechatReceiveEventChange(request);}}(2) 業(yè)務(wù)邏輯類?
需要注意的是:我在上面配置開發(fā)者配置的時(shí)候 選擇的是明文模式,所以我在處理微信服務(wù)器發(fā)送過來的消息時(shí)并沒有加密解密,而是直接將xml 轉(zhuǎn)成map。
/*** 微信開放平臺(tái)--接收事件推送* 文檔地址:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html* @return*/@Overridepublic ResultData wechatReceiveEventChange(HttpServletRequest request) {ResultData resultData = new ResultData();try{//目前文檔上記錄的總共有6種事件類型 // a.(掃描帶參數(shù)二維碼事件) // 如果用戶還未關(guān)注公眾號(hào),則用戶可以關(guān)注公眾號(hào),關(guān)注后微信會(huì)將帶場(chǎng)景值關(guān)注事件推送給開發(fā)者。 // 如果用戶已經(jīng)關(guān)注公眾號(hào),則微信會(huì)將帶場(chǎng)景值掃描事件推送給開發(fā)者。//1.解析微信發(fā)來的請(qǐng)求,解析xml字符串Map<String, String> requestMap = MessageUtil.xmlToMap(request);//獲取返回的數(shù)據(jù)String event = requestMap.get("Event");String eventKey = requestMap.get("EventKey");String ticket = requestMap.get("Ticket");}catch (Exception e){resultData.setResult("false");resultData.setMessage("微信接收事件推送失敗");logger.error("微信接收事件推送失敗",e);}return resultData;}(3)MessageUtil
/*** 將xml轉(zhuǎn)換成map集合* @param request* @return* @throws IOException* @throws DocumentException*/public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException {Map<String, String> map = new HashMap<String, String>();//使用dom4j解析xmlSAXReader reader = new SAXReader();//從request中獲取輸入流InputStream ins = request.getInputStream();Document doc = reader.read(ins);//獲取根元素Element root = doc.getRootElement();//獲取所有的節(jié)點(diǎn)List<Element> list = root.elements();for (Element e : list) {map.put(e.getName(), e.getText());System.out.println(e.getName() + "----->" + e.getText());}ins.close(); //關(guān)流return map;}(4)打印結(jié)果:
總結(jié):
上面就是微信公眾平臺(tái)開發(fā)者配置 和接收事件推送,使用過程中如果有什么問題的話,歡迎評(píng)論區(qū)留言,如果覺得小編寫的不錯(cuò)的話,可以給小編點(diǎn)個(gè)贊喔!
題外話:
我一開始也對(duì)微信公眾平臺(tái)和微信開放平臺(tái)的概念模糊不清,因?yàn)閭z者有很多重復(fù)的地方,包括企業(yè)微信和微信一樣,當(dāng)初我在做企業(yè)微信掃碼登錄的時(shí)候,發(fā)現(xiàn)它跟微信掃碼登錄差不多的邏輯,但是微信掃碼登錄驗(yàn)證步驟會(huì)更多一些,像我們要有微信公眾平臺(tái)的開發(fā)需求時(shí),我們要先成為他們的開發(fā)者 ,在這個(gè)范圍內(nèi),服務(wù)號(hào)比訂閱號(hào)的功能更多,而如果要使用一些高級(jí)接口,比如微信掃碼登錄,就需要注冊(cè)微信開放平臺(tái)賬號(hào)。
微信開放平臺(tái)雖然能夠?qū)崿F(xiàn)掃碼登錄的功能,但是具體事件推送還是要通過微信公眾平臺(tái)。
舉個(gè)例子: 我們的系統(tǒng)生成一個(gè)二維碼,用戶使用手機(jī)掃碼,微信后臺(tái)將信息返回給開發(fā)者,并且用戶關(guān)注公眾號(hào),取關(guān)公眾號(hào)都是通過微信公眾平臺(tái)事件推送來實(shí)現(xiàn)的,需要在微信公眾平臺(tái)后臺(tái)配置開發(fā)者參數(shù),從這點(diǎn)來看倆者有共通的地方。
?引自:https://www.zhihu.com/question/21074751
微信公眾平臺(tái)是給編輯的,微信開放平臺(tái)是給技術(shù)的。
微信公眾平臺(tái)能干什么?
- 寫文章發(fā)文章
- 和粉絲聊天
- 配置菜單
- 開通各種公眾號(hào)的權(quán)限(僅限自己的公眾號(hào))
- 啟用開發(fā)者模式,開發(fā)自己的公眾號(hào)
- 投放廣告
- 查看數(shù)據(jù)
?
微信開放平臺(tái)能干什么?
- APP想用微信登錄/分享到朋友圈等
- PC網(wǎng)站想用微信登錄等
- 注冊(cè)公眾號(hào)第三方平臺(tái)(服務(wù)所有公眾號(hào))
- 注冊(cè)小程序第三方平臺(tái)(提供小程序模板)
- 綁定公眾號(hào)或小程序,以形成UnionID
?
總結(jié)
以上是生活随笔為你收集整理的微信公众平台开发者配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序开发之全栈开发(一)
- 下一篇: 微信升级外链管理规范,「砍一刀帮我加速」