123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package com.tzld.piaoquan.wecom.controller;
- import com.tzld.piaoquan.wecom.common.constant.WeComServerConstant;
- import com.tzld.piaoquan.wecom.utils.wecom.AesException;
- import com.tzld.piaoquan.wecom.utils.wecom.WXBizMsgCrypt;
- import com.tzld.piaoquan.wecom.utils.wecom.WxUtil;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.ServletInputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.util.Map;
- @Slf4j
- @RestController
- @RequestMapping("/wecom/server")
- public class WeComController {
- @Autowired
- RedisTemplate<String, Object> redisTemplate;
- @GetMapping("/verify")
- public void verifyGet(HttpServletRequest request, HttpServletResponse response) {
- try {
- // 微信加密签名
- String msgSignature = request.getParameter("msg_signature");
- // 时间戳
- String timestamp = request.getParameter("timestamp");
- // 随机数
- String nonce = request.getParameter("nonce");
- // 随机字符串
- // 如果是刷新,需返回原echostr
- String echoStr = request.getParameter("echostr");
- // 微信加密签名
- WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(WeComServerConstant.TOKEN, WeComServerConstant.EncodingAESKey, WeComServerConstant.CorpID);
- String sEchoStr = ""; //需要返回的明文
- PrintWriter out;
- sEchoStr = wxcpt.VerifyURL(msgSignature, timestamp,
- nonce, echoStr);
- log.info("verifyurl echostr: " + sEchoStr);
- // 验证URL成功,将sEchoStr返回
- out = response.getWriter();
- out.print(sEchoStr);
- } catch (Exception e) {
- //验证URL失败,错误原因请查看异常
- log.error("verifyGet error", e);
- }
- }
- /**
- * 刷新 ticket
- */
- @PostMapping(value = "/verify")
- public String verifyPost(HttpServletRequest request) {
- try {
- // 微信加密签名
- String msg_signature = request.getParameter("msg_signature");
- // 时间戳
- String timestamp = request.getParameter("timestamp");
- // 随机数
- String nonce = request.getParameter("nonce");
- String type = request.getParameter("type");
- String corpId = request.getParameter("corpid");
- String id = "";
- // 访问应用和企业回调传不同的ID
- if (type.equals("data")) {
- id = corpId;
- } else {
- id = WeComServerConstant.SuiteID;
- }
- WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(WeComServerConstant.TOKEN, WeComServerConstant.EncodingAESKey, id);
- String postData = ""; // 密文,对应POST请求的数据
- //1.获取加密的请求消息:使用输入流获得加密请求消息postData
- ServletInputStream in = request.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- String tempStr = ""; //作为输出字符串的临时串,用于判断是否读取完毕
- while (null != (tempStr = reader.readLine())) {
- postData += tempStr;
- }
- String suiteXml = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, postData);
- log.info("suiteXml: " + suiteXml);
- Map suiteMap = WxUtil.transferXmlToMap(suiteXml);
- if (suiteMap.get("SuiteTicket") != null) {
- String suiteTicket = (String) suiteMap.get("SuiteTicket");
- redisTemplate.opsForValue().set("suiteTicket", suiteTicket);
- } else if (suiteMap.get("AuthCode") != null) {
- String authCode = (String) suiteMap.get("AuthCode");
- redisTemplate.opsForValue().set("authCode", authCode);
- }
- } catch (Exception e) {
- log.error("verifyPost error", e);
- }
- return "success";
- }
- }
|