|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 消息机制未实现,下面为通知回调中设置的代码部分
-
- 以下代码可通过腾讯全网发布测试用例
- ```
- @RestController
- @RequestMapping("notify")
- public class NotifyController extends WechatThridBaseController {
- @Autowired
- protected WxOpenServiceDemo wxOpenService;
- @RequestMapping("receive_ticket")
- public Object receiveTicket(@RequestBody(required = false) String requestBody, @RequestParam("timestamp") String timestamp,
- @RequestParam("nonce") String nonce, @RequestParam("signature") String signature,
- @RequestParam(name = "encrypt_type", required = false) String encType,
- @RequestParam(name = "msg_signature", required = false) String msgSignature) {
- this.logger.info(
- "\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}],"
- + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
- signature, encType, msgSignature, timestamp, nonce, requestBody);
-
- if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
- throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
- }
-
- // aes加密的消息
- WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
- this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
- String out = null;
- try {
- out = wxOpenService.getWxOpenComponentService().route(inMessage);
- } catch (WxErrorException e) {
- throw new ResponseException(ErrorCodeEnum.ERROR, e);
- }
-
- this.logger.debug("\n组装回复信息:{}", out);
-
- return out;
- }
- @RequestMapping("{appId}/callback")
- public Object callback(@RequestBody(required = false)String requestBody,
- @PathVariable ("appId") String appId,
- @RequestParam("signature") String signature,
- @RequestParam("timestamp") String timestamp,
- @RequestParam("nonce") String nonce,
- @RequestParam("openid") String openid,
- @RequestParam("encrypt_type") String encType,
- @RequestParam("msg_signature") String msgSignature) {
- this.logger.info(
- "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}],"
- + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
- appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
- logger.info("query:"+getHttpServletRequest().getQueryString()+"\nbody:"+requestBody);
- if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
- throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
- }
-
- String out = "";
- // aes加密的消息
- WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
- this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
- // 全网发布测试用例
- if (StringUtils.equalsAnyIgnoreCase(appId, "wxd101a85aa106f53e", "wx570bc396a51b8ff8")) {
- try {
- if (StringUtils.equals(inMessage.getMsgType(), "text")) {
- if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) {
- out = new WxOpenCryptUtil(wxOpenService.getWxOpenConfigStorage()).encrypt(
- WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback")
- .fromUser(inMessage.getToUser())
- .toUser(inMessage.getFromUser())
- .build()
- .toXml()
- );
- } else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) {
- String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api";
- WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build();
- wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
- }
- } else if (StringUtils.equals(inMessage.getMsgType(), "event")) {
- WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build();
- wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
- }
- } catch (WxErrorException e) {
- logger.error("callback", e);
- }
- }
- return out;
- }
- }
- ```
|