1、企微配置可信域名
2、企微获取成员userID
3、企微获取用户敏感数据
4、企微配置回调服务
什么时候需要回调服务
在集成企业微信与内部系统时,我们往往需要搭建一个回调服务。回调服务,可以实现:
回调流程:
企业收到消息后,需要作如下处理:
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
URL:http://8.131.239.157
Token:UPN8pOCL
EncodingAESKey:Wz0cWqM7VcqPOLpNrMCaaxMMif3USVLOjhvK19tEQaX
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZwjp3T2-1692458157388)(/Users/liyangda/Library/Application Support/typora-user-images/image-20230819222344569.png)]
整体会用到8个参数。
参数 | 必须 | 说明 |
---|---|---|
url | URL是企业后台接收企业微信推送请求的访问协议和地址,支持http或https协议。 | |
token | Token可由企业任意填写,用于生成签名。 | |
encodingAesKey | EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。 | |
receiveid | 加解密库里,ReceiveId 在各个场景的含义不同: 1. 企业应用的回调,表示corpid。 2. 第三方事件的回调,表示suiteid。 3. 个人主体的第三方应用的回调,ReceiveId是一个空字符串 |
|
msg_signature | 是 | 企业微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体 |
timestamp | 是 | 时间戳 |
nonce | 是 | 随机数 |
echostr | 是 | 加密的字符串。需要解密得到消息内容明文,。 |
请求方式:GET
请求地址:
http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323&echostr=ENCRYPT_STR
http://8.131.239.157?msg_signature=ed7c74fcb19645d3c8312e703063539fe96a532c×tamp=1692450209&nonce=1693051991&echostr=9fGql+XxePufd9E71gh4kXooAJJ+PtxH3MwwZWzxFNdZwTT3qccs6zHxFEDtGuaxJHWktTV97BiKkJI+rOhcPw==
这次采用的是企微提供的已由库方式,进行验证。
源代码地址:https://developer.work.weixin.qq.com/document/path/90307
因为参数执行有一些问题,需要对提供的工具类进行修改。
修改内容
// 密钥,公众账号的app secret
// 提取密文
// Object[] encrypt = JsonParse.extract(postData);
Object[] encrypt = new Object[]{postData,postData};
<dependency>
<groupId>commons-codecgroupId>
<artifactId>commons-codecartifactId>
<version>1.9version>
dependency>
<dependency>
<groupId>org.jsongroupId>
<artifactId>jsonartifactId>
<version>20180813version>
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 {
// Token
String 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);
// 解析后的值:7695278663958312959
String s = wxBizJsonMsgCrypt.DecryptMsg(msgSignature, timeStamp, nonce, echostr);
System.out.println(s);
}
将服务部署到配置的URL地址后:http://8.131.239.157
。点击保存
保存成功
查看用户消息