博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信企业微信应用开启API接收信息来读取用户发送内容
阅读量:3960 次
发布时间:2019-05-24

本文共 7385 字,大约阅读时间需要 24 分钟。

开启企业微信应用API接收信息

  1. 第一步登录企业微信后台
    企业微信后台
    找到自己要开启的应用,里面有一个开启API接收信息
    应用管理
    然后就是开启中所要用到的一些参数说明,
    这些东西官方文档也说的特别清楚的
    参数说明
    当你点击保存的时候,微信官方会进行一个请求发送到你所填写的url上
    所以点击保存的时候必须项目要启动,并且可以进行访问
  2. 现在开始说代码层面
    对接这个接口主要要给官方提供两个接口
    一个get请求的校验接口:验证你的项目官方是不是可以调通
    一个是post请求的内容发送接口:是给微信官方发送每个用户所发送的内容
    下次就展示代码,说的有点啰嗦,我这边用的是springBoot项目
    给你们看一下我的项目结构以及要用到的那些类
    weixin.mp.aes里面的类都是官方提供的
    下载地址:
    我这边是java的所以只展示Java的,可以点击下面直接下载
    项目结构
    Controller层
    注解比较多,主要让小白看清楚每步都干了什么,
    后面可以自己进行删除
package com.tian.spring_boot.controller;import cn.hutool.core.util.XmlUtil;import com.tian.spring_boot.service.WxService;import com.tian.spring_boot.utils.WeiXinParamesUtil;import com.tian.spring_boot.weixin.mp.aes.AesException;import com.tian.spring_boot.weixin.mp.aes.WXBizMsgCrypt;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import org.w3c.dom.Document;import org.w3c.dom.Element;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.IOException;import java.io.PrintWriter;/** * @ProjectName: spring_boot * @Package: com.tian.spring_boot.controller * @ClassName: WxController * @Author: TZQ * @Date: 2021/5/14 16:22 * @Version: 1.0 */@RestControllerpublic class WxController {
@Autowired private WxService wxService; @GetMapping("/WxReceiveMessage") public void coreJoinGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); // 微信加密签名 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("msg_signature = " + msg_signature); System.out.println("timestamp = " + timestamp); System.out.println("nonce = " + nonce); System.out.println("echostr = " + echostr); System.out.println("request=" + request.getRequestURL()); PrintWriter out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 String result = null; try {
WXBizMsgCrypt crypt = new WXBizMsgCrypt(WeiXinParamesUtil.token, WeiXinParamesUtil.encodingAESKey, WeiXinParamesUtil.corpId); result = crypt.verifyUrl(msg_signature, timestamp, nonce, echostr); } catch (AesException e) {
e.printStackTrace(); } if (result == null) {
result = WeiXinParamesUtil.token; } out.write(result); out.close(); out = null; } @PostMapping("/WxReceiveMessage") public void coreJoinPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String timeMillis = System.currentTimeMillis() + ""; // 微信加密签名 String msg_signature = request.getParameter("msg_signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); PrintWriter out = response.getWriter(); String result = null; try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(request.getInputStream()); Element root = document.getDocumentElement(); String corpID = root.getElementsByTagName("ToUserName").item(0).getTextContent(); String agentID = root.getElementsByTagName("AgentID").item(0).getTextContent(); String encrypt = root.getElementsByTagName("Encrypt").item(0).getTextContent();//用户发送的内容 System.out.println("CorpID = " + corpID); System.out.println("agentID = " + agentID); System.out.println("encrypt = " + encrypt); WXBizMsgCrypt crypt = new WXBizMsgCrypt(WeiXinParamesUtil.token, WeiXinParamesUtil.encodingAESKey, WeiXinParamesUtil.corpId); result = crypt.verifyUrl(msg_signature, timestamp, nonce, encrypt); System.out.println("result = " + result); Document parse = XmlUtil.readXML(result); String fromUserName = parse.getElementsByTagName("FromUserName").item(0).getTextContent(); String createTime = parse.getElementsByTagName("CreateTime").item(0).getTextContent(); String msgType = parse.getElementsByTagName("MsgType").item(0).getTextContent(); String content = parse.getElementsByTagName("Content").item(0).getTextContent(); String msgId = parse.getElementsByTagName("MsgId").item(0).getTextContent(); System.out.println("FromUserName = " + fromUserName); System.out.println("CreateTime = " + createTime); System.out.println("MsgType = " + msgType); System.out.println("Content = " + content); System.out.println("MsgId = " + msgId); String msg = ""; //对用户发送过来的内容选择要回复的内容 //PS:这边你就可以对用户传过来的参数进行一个除了根据回复的内容配合自己的业务 if (content.contains("df")) {
content = content.substring(2); if (wxService.confirmPayment(fromUserName, content)) {
msg = "党费确认成功!"; } } String replyMsg = "
" + "
"//成员UserID + "
"//企业微信CorpID + "
" + timeMillis + "
"//消息创建时间(整型) + "
"//消息类型,此时固定为:text + "
"//文本消息内容,最长不超过2048个字节,超过将截断 + "
"; System.out.println("replyMsg = " + replyMsg);//打印出来 //这里可以存放你要自动回复给用户的信息 String encryptMsg = crypt.encryptMsg(replyMsg, timeMillis, nonce); System.out.println("encryptMsg = " + encryptMsg); out.println(encryptMsg);//回复 } catch (Exception e) {
System.out.println(e.toString()); } }}

WeiXinParamesUtil

package com.tian.spring_boot.utils;/** * @ProjectName: spring_boot * @Package: com.tian.spring_boot.utils * @ClassName: WeiXinParamesUtil * @Author: TZQ * @Date: 2021/5/16 14:49 * @Version: 1.0 */public class WeiXinParamesUtil {
//token public final static String token = "ttzzqq"; // encodingAESKey public final static String encodingAESKey = "aJx22afLihLkcLdTQJg0C4wB5qUApoDg3tS6KOvUSCj"; //企业ID,可以在企业微信后台->我的企业->企业信息->拉到最下面能看见 public final static String corpId = "ww0971b514e055647b"; //应用的凭证密钥 public final static String corpsecret = "7LFu67ghtdsQGaJOcc_y4RLX61y0qqYXZ8O39x6J46I";}

大致的代码就这些,然后主要说一下里面的坑

有些时候你本地进行测试的时候发送官方给的请求例子可以访问成功
但是放在官方测试的时候就不可以,这个时候你要试一下你本地项目能不能被外网进行访问
如果不能访问的话可以关闭防火墙试试,也可以进行内网穿透来完成
我这边用的是内网穿透,如果有小伙伴要跟我一样方法解决可以看下面这个文章
有其他问题也可以进行留言和私聊,主要看网上没有一个最新的教程,就想着自己琢磨出来的就记录一下,供大家进行一个参考

转载地址:http://fbezi.baihongyu.com/

你可能感兴趣的文章
Web应用过滤器Fileter
查看>>
代理模式(Proxy)
查看>>
采用动态代理对事务进行封装
查看>>
Hibernate性能优化
查看>>
Spring核心ioc
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
rsync
查看>>
makefile
查看>>
linux 文件权限
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>