|
|
@@ -0,0 +1,36 @@
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+import top.husj.husj_wx.entity.model.WeChatMsg;
|
|
|
+
|
|
|
+@RestController
|
|
|
+@RequestMapping("/wechat")
|
|
|
+public class WeChatController {
|
|
|
+
|
|
|
+ private final String TOKEN = "你设置的Token";
|
|
|
+
|
|
|
+ // 1. 微信后台验证 URL 时使用 (GET)
|
|
|
+ @GetMapping("/callback")
|
|
|
+ public String checkSignature(String signature, String timestamp, String nonce, String echostr) {
|
|
|
+ // 这里需要按照微信算法:将token、timestamp、nonce字典排序并SHA1加密,对比signature
|
|
|
+ // 为了演示快速上手,这里直接返回 echostr(正式环境必须校验!)
|
|
|
+ return echostr;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 接收用户消息 (POST)
|
|
|
+ @PostMapping(value = "/callback", consumes = MediaType.TEXT_XML_VALUE, produces = MediaType.TEXT_XML_VALUE)
|
|
|
+ public String handleMessage(@RequestBody WeChatMsg msg) {
|
|
|
+ System.out.println("收到来自用户 " + msg.getFromUserName() + " 的消息:" + msg.getContent());
|
|
|
+
|
|
|
+ // 构造被动回复(同样是XML)
|
|
|
+ return String.format(
|
|
|
+ "<xml>" +
|
|
|
+ "<ToUserName><![CDATA[%s]]></ToUserName>" +
|
|
|
+ "<FromUserName><![CDATA[%s]]></FromUserName>" +
|
|
|
+ "<CreateTime>%d</CreateTime>" +
|
|
|
+ "<MsgType><![CDATA[text]]></MsgType>" +
|
|
|
+ "<Content><![CDATA[已收到你的消息:%s]]></Content>" +
|
|
|
+ "</xml>",
|
|
|
+ msg.getFromUserName(), msg.getToUserName(), System.currentTimeMillis() / 1000, msg.getContent()
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|