package com.ruoyi.web.controller.wechat; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.utils.wechat.MessageUtil; import com.ruoyi.common.utils.wechat.xml.XMLUtil; import com.ruoyi.framework.web.service.WechatService; import com.ruoyi.system.wechatUtils.UserQueue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Map; /** *

* 与微信产生交换的控制器 *

* * @author ruoyi * @date 2020-12-11 */ @RestController @RequestMapping("/wechat") public class WechatController extends BaseController { @Autowired private WechatService wechatService; /** * 公众号与微信服务器进行认证的API接口 * * @param signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 * @param timestamp 时间戳 * @param nonce 随机数 * @param echostr 随机字符串 * @return 结果 */ @GetMapping(value = "/wechat") public Object check(String signature, String timestamp, String nonce, String echostr) { return echostr; } /** * 微信授权信息时返回token * * @param loginBody code * @return 结果 */ @PostMapping(value = "/programLogin") public AjaxResult weChatProgramLogin(@RequestBody LoginBody loginBody) { // 生成令牌 AjaxResult result = wechatService.login(loginBody); System.out.println("生成的令牌:" + result.get("data")); return result; } /** * 公众号接收请求 * * @param request 请求 * @return 接口 */ @PostMapping(value = "/wechat", produces = {"application/xml;charset=utf-8"}) public Object toRequest(HttpServletRequest request) throws IOException { Map map = XMLUtil.getMap(request.getInputStream()); String msgType = map.get("MsgType"); String toUser = map.get("ToUserName"); String fromUser = map.get("FromUserName"); String createTime = map.get("CreateTime"); String reply = ""; if ("event".equals(msgType)) { String event = map.get("Event"); if ("subscribe".equals(event)) { reply = "欢迎关注"; UserQueue.ATTENTIONQUEUE.push(fromUser); } else if ("unsubscribe".equals(event)) { UserQueue.CHECKOFFQUEUE.push(fromUser); } } return MessageUtil.setMessage(fromUser, toUser, 45860, "text", reply); } }