日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信公众平台开发者配置

發布時間:2024/1/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众平台开发者配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

第一部分 啟用開發者配置

(1) 登錄微信公眾平臺

(2)配置IP 白名單

(3)啟用開發者配置

(4)具體的代碼調用部分

第二部分 接收事件推送

(1)接口

(2) 業務邏輯類?

(3)MessageUtil

(4)打印結果:

總結:


前言:

準備工作,今天要介紹的是微信公眾平臺接收事件推送部分,從官方文檔可以看出,微信公眾平臺提供了事件推送的功能,用戶關注公眾號 取消關注號都可以將內容推送到 開發者在微信公眾平臺配置的url 中,開發者可以拿著這些信息作進一步的邏輯判斷。

第一部分 啟用開發者配置

步驟:

(1) 登錄微信公眾平臺

首先需要登錄 微信公眾平臺賬號,成為微信公眾平臺的開發者,點擊下圖標注的地方可以進入開發者配置頁面。

?

(2)配置IP 白名單

多個IP 的時候直接換行,這個需要配置? , 很重要, 如下圖 ,我將我自己電腦上的ip 配置上去了。

?

(3)啟用開發者配置

其中需要注意的是 Token 可以由開發者自定義,只需要 保證代碼中的Token 和我下面的Token一致即可。

(4)具體的代碼調用部分

  • 4.1? 接口調用方法需要是get 請求。
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 {/*** 確認請求來自微信服務器** @param signature 微信加密簽* @param timestamp 時間戳* @param nonce 隨機數* @param echostr 隨機字符串* @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("微信驗證成功");}}}
  • 4.2 SignUtil
package com.bos.wechat;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; /*** @Author: tanghh**/ public class SignUtil {private static String token = "WinXinEBO";/*** 校驗簽名** @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;}}

上面這些操作就可以開啟開發者配置。ok

第二部分 接收事件推送

配置完上面的開發者配置以后,就可以做接收事件推送了! 我還是寫在 WechatDeveloperController中

dopost 中的方法就是用來接收微信服務器發送過來的消息

(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;/*** 確認請求來自微信服務器** @param signature 微信加密簽* @param timestamp 時間戳* @param nonce 隨機數* @param echostr 隨機字符串* @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("微信驗證成功");}}/*** 處理微信服務器發來的消息** @return ????*/@RequestMapping(method = {RequestMethod.POST})public void dopost(HttpServletRequest request) {// 調用核心業務類接收消息、處理消息weiService.wechatReceiveEventChange(request);}}

(2) 業務邏輯類?

需要注意的是:我在上面配置開發者配置的時候 選擇的是明文模式,所以我在處理微信服務器發送過來的消息時并沒有加密解密,而是直接將xml 轉成map。

/*** 微信開放平臺--接收事件推送* 文檔地址: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.(掃描帶參數二維碼事件) // 如果用戶還未關注公眾號,則用戶可以關注公眾號,關注后微信會將帶場景值關注事件推送給開發者。 // 如果用戶已經關注公眾號,則微信會將帶場景值掃描事件推送給開發者。//1.解析微信發來的請求,解析xml字符串Map<String, String> requestMap = MessageUtil.xmlToMap(request);//獲取返回的數據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轉換成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();//獲取所有的節點List<Element> list = root.elements();for (Element e : list) {map.put(e.getName(), e.getText());System.out.println(e.getName() + "----->" + e.getText());}ins.close(); //關流return map;}

(4)打印結果:

總結:

上面就是微信公眾平臺開發者配置 和接收事件推送,使用過程中如果有什么問題的話,歡迎評論區留言,如果覺得小編寫的不錯的話,可以給小編點個贊喔!

題外話:

我一開始也對微信公眾平臺和微信開放平臺的概念模糊不清,因為倆者有很多重復的地方,包括企業微信和微信一樣,當初我在做企業微信掃碼登錄的時候,發現它跟微信掃碼登錄差不多的邏輯,但是微信掃碼登錄驗證步驟會更多一些,像我們要有微信公眾平臺的開發需求時,我們要先成為他們的開發者 ,在這個范圍內,服務號比訂閱號的功能更多,而如果要使用一些高級接口,比如微信掃碼登錄,就需要注冊微信開放平臺賬號。

微信開放平臺雖然能夠實現掃碼登錄的功能,但是具體事件推送還是要通過微信公眾平臺。

舉個例子: 我們的系統生成一個二維碼,用戶使用手機掃碼,微信后臺將信息返回給開發者,并且用戶關注公眾號,取關公眾號都是通過微信公眾平臺事件推送來實現的,需要在微信公眾平臺后臺配置開發者參數,從這點來看倆者有共通的地方。

?引自:https://www.zhihu.com/question/21074751

微信公眾平臺是給編輯的,微信開放平臺是給技術的。

微信公眾平臺能干什么?

  • 寫文章發文章
  • 和粉絲聊天
  • 配置菜單
  • 開通各種公眾號的權限(僅限自己的公眾號)
  • 啟用開發者模式,開發自己的公眾號
  • 投放廣告
  • 查看數據

?

微信開放平臺能干什么?

  • APP想用微信登錄/分享到朋友圈等
  • PC網站想用微信登錄等
  • 注冊公眾號第三方平臺(服務所有公眾號)
  • 注冊小程序第三方平臺(提供小程序模板)
  • 綁定公眾號或小程序,以形成UnionID

?

總結

以上是生活随笔為你收集整理的微信公众平台开发者配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。