服务器推送信息给微信,2.4)接收微信服务器发来的消息

2.4)接收微信服务器发来的消息

当你验证服务器有消息成功后,微信服务器就会把你的公众号任何事件和消息,以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”。我们看一下结果。

4e9cd72e5e3ebfba1a616af196f3e7f0.png

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

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

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

14dac294bfc6b8db061df2ab74dc809b.png

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

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