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

企微配置回调服务

1、企微配置可信域名
2、企微获取成员userID
3、企微获取用户敏感数据
4、企微配置回调服务


文章目录

    • 一、简介
      • 1、概述
      • 2、相关文档地址
    • 二、企微配置消息服务器
      • 1、配置消息接收参数
      • 2、参数解析
      • 3、参数拼接规则
    • 三、代码编写—使用已有库
      • 1、代码下载
      • 2、代码修改
      • 3、服务代码编写
    • 四、测试


一、简介

1、概述

什么时候需要回调服务

在集成企业微信与内部系统时,我们往往需要搭建一个回调服务。回调服务,可以实现:

  • 自定义丰富的服务行为。比如,用户向应用发消息时,识别消息关键词,回复不同的消息内容;用户点击应用菜单时,转化为指令,执行自动化任务。
  • 可以及时获取到状态变化。比如,通讯录发生变化时,不需要定时去拉取通讯录对比,而是实时地获取到变化的通讯录结点,进行同步。

回调流程:

  • 企业微信会先判断URL服务是否具备解析企业微信推送消息的能力。
    具体方式是,企业微信往URL服务上发一条Get请求带签名及密文参数到URL服务上,如果URL服务检查签名通过,并能正确返回密文参数对应的明文字符串,则验证通过。此时在企业微信的配置就开始生效。
  • 后续的业务请求(比如应用菜单的点击事件,用户消息等),都会类似的方式(签名+密文)向服务URL推送消息。URL服务验证签名通过后,需要将POST数据解密,就可以得到对应的业务消息明文。

在这里插入图片描述

企业收到消息后,需要作如下处理:

  1. 对msg_signature进行校验
  2. 解密Encrypt,得到明文的消息结构体(消息结构体后面章节会详说)
  3. 如果需要被动回复消息,构造被动响应包
  4. 正确响应本次请求
    · 企业微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
    · 当接收成功后,http头部返回200表示接收ok,其他错误码企业微信后台会一律当做失败并发起重试

2、相关文档地址

1、回调配置

https://developer.work.weixin.qq.com/document/path/90930

2、接收消息与事件

https://developer.work.weixin.qq.com/document/10514

3、加解密方案说明

https://developer.work.weixin.qq.com/document/path/90968

4、加解密库下载与返回码

https://developer.work.weixin.qq.com/document/path/90307

二、企微配置消息服务器

1、配置消息接收参数

在这里插入图片描述

请添加图片描述

URL:http://8.131.239.157
Token:UPN8pOCL
EncodingAESKey:Wz0cWqM7VcqPOLpNrMCaaxMMif3USVLOjhvK19tEQaX

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZwjp3T2-1692458157388)(/Users/liyangda/Library/Application Support/typora-user-images/image-20230819222344569.png)]

2、参数解析

整体会用到8个参数。

参数必须说明
urlURL是企业后台接收企业微信推送请求的访问协议和地址,支持http或https协议。
tokenToken可由企业任意填写,用于生成签名。
encodingAesKeyEncodingAESKey用于消息体的加密,是AES密钥的Base64编码。
receiveid加解密库里,ReceiveId 在各个场景的含义不同:
1. 企业应用的回调,表示corpid。
2. 第三方事件的回调,表示suiteid。
3. 个人主体的第三方应用的回调,ReceiveId是一个空字符串
msg_signature企业微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
timestamp时间戳
nonce随机数
echostr加密的字符串。需要解密得到消息内容明文,。

3、参数拼接规则

请求方式:GET
请求地址

http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS&timestamp=13500001234&nonce=123412323&echostr=ENCRYPT_STR
http://8.131.239.157?msg_signature=ed7c74fcb19645d3c8312e703063539fe96a532c&timestamp=1692450209&nonce=1693051991&echostr=9fGql+XxePufd9E71gh4kXooAJJ+PtxH3MwwZWzxFNdZwTT3qccs6zHxFEDtGuaxJHWktTV97BiKkJI+rOhcPw==

三、代码编写—使用已有库

这次采用的是企微提供的已由库方式,进行验证。

1、代码下载

源代码地址:https://developer.work.weixin.qq.com/document/path/90307

在这里插入图片描述

2、代码修改

因为参数执行有一些问题,需要对提供的工具类进行修改。

请添加图片描述

修改内容

		// 密钥,公众账号的app secret// 提取密文
//		Object[] encrypt = JsonParse.extract(postData);Object[] encrypt = new Object[]{postData,postData};

请添加图片描述

3、服务代码编写

<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.9</version>
</dependency>
<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20180813</version>
</dependency>

代码编写

import com.lydms.demowechat0.WechatUtils.AesException;
import com.lydms.demowechat0.WechatUtils.WXBizJsonMsgCrypt;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@RestController
public class AllTwoController {@RequestMapping("/*")public String getCheckInfo(String msg_signature, String timestamp, String nonce, String echostr) throws AesException {String token = "UPN8pOCL";String encodingAesKey = "Wz0cWqM7VcqPOLpNrMCaaxMMif3USVLOjhvK19tEQaX";String receiveid = "ww3e40cde07cc21a01";log.info("msg_signature:{},timestamp:{},nonce:{},echostr:{}", msg_signature, timestamp, nonce, echostr);log.info("token:{},encodingAesKey:{},receiveid:{}", token, timestamp, receiveid);WXBizJsonMsgCrypt wxBizJsonMsgCrypt = new WXBizJsonMsgCrypt(token, encodingAesKey, receiveid);String str = wxBizJsonMsgCrypt.DecryptMsg(msg_signature, timestamp, nonce, echostr);log.info("return:{}", str);return str;}
}

测试代码:

/*** 测试代码** @param args* @throws AesException*/
public static void main(String[] args) throws AesException {//  TokenString token = "UPN8pOCL";//String encodingAesKey = "Wz0cWqM7VcqPOLpNrMCaaxMMif3USVLOjhvK19tEQaX";//String receiveid = "ww3e40cde07cc21a01";//  企业微信加密签名String msgSignature = "359410caca920fe74a426f5a3057ad437b3b9fa4";//  时间戳String timeStamp = "1692448043";//  随机数String nonce = "1692495025";//  加密的字符串String echostr = "BrO11qZxqM8TBczJq17VRzSnhJff5aGXgnTvWl+yGaoAZ+dd5xg1VxbmmPzMJMmkNPv6DSlpMQ6vz4lwoCXMjg==";WXBizJsonMsgCrypt wxBizJsonMsgCrypt = new WXBizJsonMsgCrypt(token, encodingAesKey, receiveid);//  解析后的值:7695278663958312959String s = wxBizJsonMsgCrypt.DecryptMsg(msgSignature, timeStamp, nonce, echostr);System.out.println(s);
}

四、测试

将服务部署到配置的URL地址后:http://8.131.239.157。点击保存

在这里插入图片描述

保存成功

在这里插入图片描述

查看用户消息

在这里插入图片描述

在这里插入图片描述

相关文章:

企微配置回调服务

1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 4、企微配置回调服务 文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 …...

机器人远程控制软件设计

机器人远程控制软件设计 That’s all....

面试题-React(二):React中的虚拟DOM是什么?

一、什么是虚拟DOM&#xff1f; 虚拟DOM是React的核心概念之一&#xff0c;它是一个轻量级的JavaScript对象树&#xff0c;用于表示真实DOM的状态。在React中&#xff0c;当数据发生变化时&#xff0c;首先会在虚拟DOM上执行DOM更新&#xff0c;而不是直接操作真实DOM。然后&a…...

分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

要解决的问题 如何记录请求经过多个分布式服务的信息&#xff0c;以便分析问题所在&#xff1f;如何保证这些信息得到完整的追踪&#xff1f;如何尽可能不影响服务性能&#xff1f; 追踪 当用户请求到达前端A&#xff0c;将会发送rpc请求给中间层B、C&#xff1b;B可以立刻作…...

【IEEE会议】第二届IEEE云计算、大数据应用与软件工程国际学术会议 (CBASE2023)

第二届IEEE云计算、大数据应用与软件工程国际学术会议 (CBASE2023&#xff09; 随着大数据时代的到来&#xff0c;对数据获取的随时性和对计算的需求也在逐渐增长。为推动大数据时代的云计算与软件工程的发展&#xff0c;促进该领域学术交流&#xff0c;在CBASE 2022成功举办的…...

Streamlit项目:基于讯飞星火认知大模型开发Web智能对话应用

文章目录 1 前言2 API获取3 官方文档的调用代码4 Streamlit 网页的搭建4.1 代码及效果展示4.2 Streamlit相关知识点 5 结语 1 前言 科大讯飞公司于2023年8月15日发布了讯飞认知大模型V2.0&#xff0c;这是一款集跨领域知识和语言理解能力于一体的新一代认知智能大模型。前日&a…...

[Vue]解决npm run dev报错node:internal/modules/cjs/loader:1031 throw err;

解决: 有2中方法&#xff0c;建议先尝试第一种&#xff0c;不行再第二种 第一种: 重新安装依赖环境 删除项目的node_modules文件夹&#xff0c;重新执行 # 安装依赖环境 npm install# 运行 npm run dev 我只用了第一种方法就可以了 &#xff0c;第二种方法从别的博主那看到…...

nginx反向代理后实现nginx和apache两种web服务器能够记录客户端的真实IP地址

一.构建环境 二.配置反向代理 1.基于源码安装的nginx环境下修改nginx.conf&#xff08;设备1&#xff09; 2.通过windows powershell进行修改hosts文件并测试 3.设备2和设备3上查看日志&#xff0c;可以看到访问来源都是代理服务器&#xff08;2.190&#xff09;而不是真实…...

【仿写tomcat】四、解析http请求信息,响应给前端,HttpServletRequest、HttpServletResponse的简单实现

思考 在解析请求之前我们要思考一个问题&#xff0c;我们解析的是其中的哪些内容&#xff1f; 对于最基本的实现&#xff0c;当然是请求类型&#xff0c;请求的url以及请求参数&#xff0c;我们可以根据请求的类型作出对应的处理&#xff0c;通过url在我们的mapstore中找到se…...

FL Studio21.1中文完整版Win/Mac

FL Studio All Plugins Edition【中文完整版 Win/Mac】适合音乐制作人/工作室使用&#xff0c;全套插件!&#xff08;20.9新增Vintage Chorus&#xff0c;Pitch Shifter变调插件&#xff09;FL Studio是超多顶级音乐人的启蒙首选&#xff01;包括百大DJ冠军Martin Garrix&…...

基于Mysql+Vue+Django的协同过滤和内容推荐算法的智能音乐推荐系统——深度学习算法应用(含全部工程源码)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境MySQL环境VUE环境 模块实现1. 数据请求和储存2. 数据处理计算歌曲、歌手、用户相似度计算用户推荐集 3. 数据存储与后台4. 数据展示 系统测试工程源代码下载其它资料下载 前言 本项目以丰富的网易云音乐数据为基…...

Python Web开发 Django 简介

今天来为大家介绍 Python 另一个 Web 开发框架 Django&#xff0c;它是一个基于 Python 定制的开源 Web 应用框架&#xff0c;最早源于一个在线新闻 Web 网站&#xff0c;后于2005年开源。Django 的功能大而全&#xff0c;它提供的一站式解决的思路&#xff0c;能让开发者不用在…...

HAproxy搭建web集群

目录 一、HAproxy 概述 二、HAproxy 主要特性 三、HAproxy 负载均衡策略(八种) 四、LVS、Nginx、HAproxy区别 Nginx LVS HAproxy 五、HAproxy部署实战 问题总结&#xff1a; 一、HAproxy 概述 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0…...

临时用工小程序:一款便捷的用工管理软件

随着企业对人力资源需求的不断增长&#xff0c;临时用工需求也日益旺盛。为了满足这一需求&#xff0c;我们研发了一款名为“临时用工小程序”的软件系统&#xff0c;旨在帮助企业实现临时用工的高效管理。 一、技术栈介绍 后端技术栈 本系统采用Java语言作为开发语言&#…...

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 目录 Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 一、简单介绍 二、实现原理…...

CSDN编程题-每日一练(2023-08-20)

CSDN编程题-每日一练(2023-08-19) 一、题目名称:等差数列二、题目名称:喜水青蛙三、题目名称:括号匹配一、题目名称:等差数列 时间限制:1000ms内存限制:256M 题目描述: 给定一已排序的正整数组成的数组,求需要在中间至少插入多少个数才能将其补全成为一等差数列。 “…...

大数据:NumPy进阶应用详解

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…...

new String创建几个对象

在java17中 &#xff1a; 问题1&#xff1a;new String("abc")会产生多少个对象&#xff1f; 分两种情况&#xff1a; 情况1&#xff1a; 如果”abc”这个字符串常量不存在&#xff0c;则创建两个对象&#xff0c;分别是“abc”这个字符串常量&#xff0c;以及ne…...

【路由协议】使用按需路由协议和数据包注入的即时网络模拟传递率(PDR)、总消耗能量和节点消耗能量以及延迟研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

c#实现依赖注入

当谈到C#中的依赖注入(Dependency Injection,DI)时,我们可以使用一个简单的示例来说明它是如何工作的。依赖注入是一种设计模式,用于将依赖关系从一个类传递到另一个类,以实现松耦合和可测试性。 假设我们有一个简单的订单处理应用程序,其中包含两个主要类:OrderServi…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...