wx-tools 接收微信服务器发来的消息

2023-03-22 17:18 更新

当你验证服务器有消息成功后,微信服务器就会把你的公众号任何事件和消息,以post请求推送到你验证的那个url地址上。所以我们现在需要做的就是写一个Post接收方法,来接收发来的消息~

2.4.1 完善WxController,添加Post接收方法

@RestController
@RequestMapping("/wx")
public class WxController {


    private IService iService = new WxService();


    @GetMapping
    public String check(String signature, String timestamp, String nonce, String echostr) {
        if (iService.checkSignature(signature, timestamp, nonce, echostr)) {
            return echostr;
        }
        return null;
    }


    @PostMapping
    public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();


        try {
            // 微信服务器推送过来的是XML格式。
            WxXmlMessage wx = XStreamTransformer.fromXml(WxXmlMessage.class, request.getInputStream());
            System.out.println("消息:\n " + wx.toString());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.close();
        }


    }
}

可以看到,我把微信服务器发来的消息(request)的输入流扔给了XStreamTransformer来帮忙解析XML,并返回WxXmlMessage类。

  • WxXmlMessage类是统一消息的载体。所有消息包括事件推送都包含在这个类当中。

尝试与公众号交互,观察控制台

这时候,我们可以尝试向公众号发送一句:“Hello”。我们看一下结果。

Message

wx-tools自动把发来的消息封装成一个类,方便处理。

我们再试试接收并解析事件(Event)推送,例如:新用户关注事件推送。

我用另一个微信号关注了一波我的测试号,观察控制台:

关注事件

好了,至此。你已经成功一大半了。为什么呢!因为剩下的就是拿着这个消息(Message)去各种处理,最后返回给用户想要的东西即可~

下篇会讲一些路由器的使用方式,请移步下篇!嘻嘻

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号