当前位置: 首页 > 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…...

算法通关村十一关 | 位运算实现加法和乘法

1.位实现加法和乘法 在计算机中&#xff0c;位运算的效率要比加减乘除的效率更高&#xff0c;因此在高性能软件中源码中大量使用&#xff0c;计算机里各种运算基本上都是位运算。 学习下面内容之前建议先学习位运算规则&#xff1a;算法通关村十一关 | 位运算的规则_我爱学算…...

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用

C笔记之条件变量&#xff08;Condition Variable&#xff09;与cv.wait 和 cv.wait_for的使用 参考博客&#xff1a;C笔记之各种sleep方法总结 code review! 文章目录 C笔记之条件变量&#xff08;Condition Variable&#xff09;与cv.wait 和 cv.wait_for的使用1.条件变量&…...

Dubbo之DubboBootstrap源码解析

功能描述 DubboBootstrap是Dubbo的启动类&#xff0c;包含服务启动、初始化、预处理配置、销毁清理等核心功能 功能分析 核心DubboBootstrap类分析 主要成员变量分析 private static volatile DubboBootstrap instance; //缓存者启动类的实例对象&#xff0c;以static形式…...

SpringBoot + Vue 微人事 项目 (第八天)

基础信息设置 在该页面添加一个大div&#xff0c;然后添加一个tab选项卡&#xff0c;Element UI里面有 把代码复制到大div里面&#xff0c;把里面的label和name属性改成我们想要的&#xff0c;再把tab-click"handleClick"去掉 <div><el-tabs v-model"a…...

人工智能引领图文扫描新趋势

1. 背景和影响 近日&#xff0c;中国大学生服务外包创新创业大赛决赛在江南大学圆满落幕。为满足现代服务产业企业的现实需求&#xff0c;本次竞赛内容设计充分聚焦企业发展中所面临的技术、管理等现实问题&#xff0c;与产业的结合度更紧密&#xff0c;智能文字识别技术是大赛…...

ChatGPT在智能城市规划和交通优化中的应用如何?

智能城市规划和交通优化是应对城市化挑战、提高城市可持续性的重要领域。在这方面&#xff0c;ChatGPT作为一种强大的自然语言处理模型&#xff0c;可以发挥重要作用&#xff0c;帮助实现更智能、高效的城市规划和交通管理。本文将详细探讨ChatGPT在智能城市规划和交通优化中的…...

探索Perfetto:开源性能追踪工具的未来之光

探索Perfetto&#xff1a;开源性能追踪工具的未来之光 1. 引言 A. 介绍Perfetto的背景和作用 随着移动应用、桌面软件和嵌入式系统的不断发展&#xff0c;软件性能优化变得愈发重要。在这个背景下&#xff0c;Perfetto作为一款开源性能追踪工具&#xff0c;日益引起了开发者…...

A*算法图文详解

基本概念 A*算法最早于1964年在IEEE Transactions on Systems Science and Cybernetics中的论文《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》中首次提出。其属于一种经典的启发式搜索方法&#xff0c;所谓启发式搜索&#xff0c;就在于当前搜索…...

[MySQL] — 数据类型和表的约束

目录 数据类型 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 float decimal 字符串类型 char varchar char和varchar的区别 日期和时间类型 enum 和 set 表的约束 空属性 默认值 列描述 zeorfill 主键 创建表时在字段上指定主键 删除主键&#xff1a; 追…...

JetBrains IDE远程开发功能可供GitHub用户使用

JetBrains与GitHub去年已达成合作&#xff0c;提供GitHub Codespaces 与 JetBrains Gateway 之间的集成。 GitHub Codespaces允许用户创建安全、可配置、专属的云端开发环境&#xff0c;此集成意味着您可以通过JetBrains Gateway使用在 GitHub Codespaces 中运行喜欢的IDE进行…...

先做网站还是先解析/it培训

layui怎么实现三级联动&#xff1f;下面本篇文章给大家介绍一下使用layui实现三级联动效果。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。基于layui的三级联动模块直接进入主题吧。封装的模块需要固定的html代码&#xff0c;因为是通…...

深圳专门做网站的公司有哪些/seo教学免费课程霸屏

希望大家都能用选择和努力去惊艳时光 文章目录1、技术一面2、技术二面3、技术三面一、Linux必备知识最后:【可能给予你助力的教程】推荐阅读皮皮虾面试经历&#xff0c;希望对大家有帮助 1、技术一面 简单做一下自我介绍&#xff1f; 简要介绍一下项目/你负责的模块/选一个模…...

网站手机端做排名/seo排名点击软件推荐

4.1 我可以仅用二进制形式发布一个遵循 GPL 的程序的修改版本吗&#xff1f; 不可以。GPL 的要旨是所有修改版本必须是自由软件——这意味着修改版本的源代码必须可供用户使用。 4.2 我从网上下载了二进制文件。如果我分发该副本&#xff0c;我必须也要获取源代码并分发&#x…...

用dw做的网页怎么连到网站上/衡阳百度推广公司

我们可以用以下五种方法来解决它。首先&#xff0c;进入设备管理器&#xff0c;看看是否有摄像头这个设备&#xff0c;如果有&#xff0c;进入我的电脑就会看到这个图标&#xff0c;双击它就会打开&#xff1b;如果没有&#xff0c;你需要安装一个摄像头驱动程序。当驱动程序被…...

单招网站开发/企业网站建设公司

eclipse插件的安装方法大体有以下三种:...

专业网站建设怎么样/广州seo推荐

题目&#xff1a;原题链接&#xff08;简单&#xff09; 解法时间复杂度空间复杂度执行用时Ans 1 (Python)O(n)O(1)40ms (87.66%)Ans 2 (Python)––44ms (71.54%)Ans 2 (Python)––40ms (87.66%)LeetCode的Python执行用时随缘&#xff0c;只要时间复杂度没有明显差异&#x…...