当前位置: 首页 > article >正文

企业微信中设置回调接口url以及验证 spring boot项目实现

官方文档:

接收消息与事件:

加密解密文档:加解密库下载与返回码 - 文档 - 企业微信开发者中心

下载java样例

加解密库下载与返回码 - 文档 - 企业微信开发者中心

将解压开的代码

‘将文件夹:qq\weixin\mp\aes的代码作为工具拷到项目中

pom文件中加入

<!--企业微信中用于加密解码-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>

编写会回调接口

/**
 * 企业微信
 */
@RestController
@RequestMapping("/api/qyWx")
public class WxQyController extends BaseController {

    //token
    public final static String TOKEN = "企业微信中的";
    // encodingAESKey
    public final static String ENCODINGAES_KEY = "使用自己生成的企业微信自动生成的有问题测试";
    //企业ID
    public final static String CORP_ID = "XXXXX";


    @GetMapping("/callback")
    public void list(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 微信加密签名
        String msg_signature = request.getParameter("msg_signature");
        // 时间戳
        String timestamp = request.getParameter("timestamp");
        // 随机数
        String nonce = request.getParameter("nonce");
        // 随机字符串
        String echostr = request.getParameter("echostr");

        System.out.println("request=" + request.getRequestURL());
        System.out.println("msg_signature=" + msg_signature);
        System.out.println("timestamp=" + timestamp);
        System.out.println("nonce=" + nonce);
        System.out.println("echostr=" + echostr);

        PrintWriter out = response.getWriter();
        // 通过检验msg_signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
        String result = null;
        try {
            WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(TOKEN, ENCODINGAES_KEY, CORP_ID);
            result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr);
        } catch (AesException e) {
            e.printStackTrace();
        }
        if (result == null) {
            result = TOKEN;
        }
        out.print(result);
        out.close();
        out = null;
    }

    //自主生成EncodingAESKey
    @RequestMapping("/getEncodingAESKey")
    public String getEncodingAESKey()  {

        /**
         * 主要解决有时候直接使用企业微信那边生成的EncodingAESKey会报错
         * “Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value",
         *
         * 使用 commons-codec 加密 32 位字符(我是用的 UUID 生成 ID 后去除 -)
         * 生成一个 EncodingAESKey 替换微信生成的 EncodingAESKey
         * Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());
         * 第二步得到一个 44 位字符串,需要去除末尾等号得到 43 位EncodingAESKey,再去企业微信配置此EncodingAESKey
         */
        String str = Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());
        return str;
    }

}


http://www.kler.cn/a/402649.html

相关文章:

  • C语言练习.if.else语句.strstr
  • Django实现智能问答助手-数据库方式读取问题和答案
  • EXISTS 和 IN 的使用方法、特性及查询效率比较
  • 计算机网络期末试题及答案(整理)
  • Unity-添加世界坐标系辅助线
  • 【GD32】(三) ISP基本使用
  • 二叉树的练习题(下)
  • Python-简单病毒程序合集(一)
  • 《 C++ 点滴漫谈 一 》C++ 传奇:起源、演化与发展
  • 【大数据学习 | Spark】详解分区个数
  • Three.js 相机控制器Controls
  • Akts初识1.0
  • PuppyGraph:实时图查询引擎,无需ETL
  • 基于Java Springboot城市公交运营管理系统
  • 关于上架HarmonyOS元服务,ArkWeb问题
  • 题解 洛谷 Luogu P2440 木材加工 二分答案 C/C++
  • 有效的完全平方数
  • webgl threejs 云渲染(服务器渲染、后端渲染)解决方案
  • 达梦数据库工程师认证培训体系是怎么样的?
  • 【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写
  • maven仓库
  • 大数据技术Kafka详解:消息队列(Messages Queue)
  • 类和对象(1) —— 类和对象的概念、类的实例化和初始化、构造方法和this关键词
  • 海外带云仓多语言商城源码,多语言多商家云仓一键代发商城
  • Python学习29天
  • Django项目 | 实现登录注册验证电子邮箱