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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java 关注公众号回调_处理公众号回调消息

發布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 关注公众号回调_处理公众号回调消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、背景

在上一節中,我們知道如何接入微信公眾號,但是之后公眾號會與我們進行交互,那么微信公眾號如何通知到我們自己的服務器呢?我們知道我們接入的時候提供的url是 GET /mp/entry,那么公眾號之后產生的事件將會以 POST /mp/entry 發送到我們自己的服務器上。

二、代碼實現,此處還是使用 weixin-java-mp 這個框架實現

1、引入 weixin-java-mp

com.github.binarywang

weixin-java-mp

4.0.0

2、編寫 配置

@Configuration

public class WxMpConfiguration {

@Autowired

private WxMpProperties wxMpProperties;

@Autowired

private SubscribeHandler subscribeHandler;

@Autowired

private UnsubscribeHandler unsubscribeHandler;

@Bean

public WxMpService wxMpService() {

WxMpServiceImpl wxMpService = new WxMpServiceImpl();

wxMpService.setWxMpConfigStorage(wxMpConfigStorage());

// 設置多個微信公眾號的配置

// wxMpService.setMultiConfigStorages();

return wxMpService;

}

/**

* 這個地方的配置是保存在本地,生產環境需要自己擴展,可以保存在Redis中等等

*

* @return WxMpConfigStorage

*/

public WxMpConfigStorage wxMpConfigStorage() {

WxMpDefaultConfigImpl storage = new WxMpDefaultConfigImpl();

storage.setAppId(wxMpProperties.getAppId());

storage.setSecret(wxMpProperties.getAppSecret());

storage.setAesKey(wxMpProperties.getAesKey());

storage.setToken(wxMpProperties.getToken());

return storage;

}

@Bean

public WxMpMessageRouter messageRouter(WxMpService wxMpService) {

WxMpMessageRouter router = new WxMpMessageRouter(wxMpService);

// 消息去重

router.setMessageDuplicateChecker(new WxMessageInMemoryDuplicateChecker());

// 關注事件

router.rule().async(false).msgType(EVENT).event(SUBSCRIBE)

.handler(this.subscribeHandler)

.end();

// 取消關注事件

router.rule().async(false).msgType(EVENT).event(UNSUBSCRIBE)

.handler(this.unsubscribeHandler)

.end();

return router;

}

}

1、公眾號回調給我們的消息會通過 WxMpMessageRouter 來處理。

2、配置的時候需要做好消息的去重處理,如果我們的服務器5s種沒給微信服務器響應,微信服務器會重試 3次。

3、處理消息實現WxMpMessageHandler接口

3、回調入口

/**

* 微信回調

*

* @param requestBody

* @param signature

* @param timestamp

* @param nonce

* @param openid

* @param encType

* @param msgSignature

* @return

*/

@PostMapping("/mp/entry")

public String entryCallback(@RequestBody String requestBody,

@RequestParam("signature") String signature,

@RequestParam("timestamp") String timestamp,

@RequestParam("nonce") String nonce,

@RequestParam("openid") String openid,

@RequestParam(name = "encrypt_type", required = false) String encType,

@RequestParam(name = "msg_signature", required = false) String msgSignature) {

log.info("\n接收微信請求:[openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"

+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",

openid, signature, encType, msgSignature, timestamp, nonce, requestBody);

if (!wxMpService.checkSignature(timestamp, nonce, signature)) {

throw new IllegalArgumentException("非法請求,可能屬于偽造的請求!");

}

String out = null;

if (encType == null) {

// 明文傳輸的消息

WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(requestBody);

WxMpXmlOutMessage outMessage = this.wxMpMessageRouter.route(inMessage);

if (outMessage == null) {

return "";

}

out = outMessage.toXml();

} else if ("aes".equalsIgnoreCase(encType)) {

// aes加密的消息

WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(requestBody, wxMpService.getWxMpConfigStorage(),

timestamp, nonce, msgSignature);

log.info("\n消息解密后內容為:\n[{}] ", inMessage.toString());

WxMpXmlOutMessage outMessage = this.wxMpMessageRouter.route(inMessage);

if (outMessage == null) {

return "";

}

out = outMessage.toEncryptedXml(wxMpService.getWxMpConfigStorage());

}

log.info("\n組裝回復信息:[{}]", out);

return out;

}

三、參考文檔

四、代碼實現

總結

以上是生活随笔為你收集整理的java 关注公众号回调_处理公众号回调消息的全部內容,希望文章能夠幫你解決所遇到的問題。

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