Java企业微信开发_01_接收消息服务器配置

2023-11-18

一、准备阶段
需要准备事项:

1.一个能在公网上访问的项目:

见:Java微信公众平台开发01本地服务器映射外网
http://www.cnblogs.com/shirui/p/7308856.html

2.一个企业微信账号:

去注册:(https://work.weixin.qq.com

3.策略文件

见:Java企业微信开发 http://www.cnblogs.com/shirui/p/7411735.html

4.接入验证的 微信加解密包

此包封装了对 msg_signature对请求进行校验的相关操作,直接用就可以了
下载地址:http://qydev.weixin.qq.com/java.zip

二、接收消息服务器配置
2.1 接收消息服务器参数配置:

在企业微信的管理端后台,进入需要设置接收消息的目标应用,点击“接收消息”的“设置”,进入如下页面

这里写图片描述

URL是企业应用接收企业微信推送请求的访问协议和地址,支持http或https协议。
Token可由企业任意填写,用于生成签名。
EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。
2.1.1 验证URL有效性

当点击“保存”提交以上信息时,企业微信将发送GET请求到填写的URL上,GET请求携带以下四个参数


  • msg_signature 是必须 企业微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
  • timestamp 是必须 时间戳 nonce 是必须 随机数
  • echostr 是必须 加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文

企业通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业微信,那么企业应该对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符),则接入验证生效,接收消息才能开启。
后续推送消息给企业时都会在请求URL中带上以上参数(echostr除外),校验方式与首次验证URL一致。

2.2 下载的加解密包添加到项目中

这里写图片描述
注意要在lib中添加 commons-codec-1.9.jar

2.3 微信相关参数封装类

WeiXinParamesUtil.java

package com.ray.util;
/**
 * 微信参数
 * @author shirayner
 *
 */
public class WeiXinParamesUtil {
    //token
    public final static String token = "ray";
    // encodingAESKey
    public final static String encodingAESKey = "z2W9lyOAR1XjY8mopEmiSqib0TlBZzCFiCLp6IdS2Iv";
    //企业ID
    public final static String corpId = "ww92f5da92bb24696e";
    //应用的凭证密钥
    public final static String corpsecret = "I73733veH3uCs6H_ijPvIq0skjTaOePsFF4MyCEi3Ag";



}

此类集中管理微信开发中所要用到的微信的相关参数

2.4 核心servlet-CoreServlet.java

package com.ray.servlet;


import java.io.IOException;  
import java.io.PrintWriter;  

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

import com.qq.weixin.mp.aes.AesException;
import com.qq.weixin.mp.aes.WXBizMsgCrypt;
import com.ray.util.WeiXinParamesUtil;




/** 
 * 核心请求处理类 
 *  
 * @author liufeng 
 * @date 2013-05-18 
 */  
public class CoreServlet extends HttpServlet {  
    private static final long serialVersionUID = 4440739483644821986L;  

    /** 
     * 确认请求来自微信服务器 
     */  
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, 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());  

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

    /** 
     * 处理微信服务器发来的消息 
     */  
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    }  

}

2.5 在web.xml中配置servlet

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    <servlet>  
        <servlet-name>coreServlet</servlet-name>  
        <servlet-class>  
            com.ray.servlet.CoreServlet
        </servlet-class>  
    </servlet>  


    <!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 -->  
    <servlet-mapping>  
        <servlet-name>coreServlet</servlet-name>  
        <url-pattern>/coreServlet</url-pattern>  
    </servlet-mapping>  


    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
    </welcome-file-list>  
</web-app>

2.6 提交成功

点击2.1步中的保存按钮,会提示配置成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java企业微信开发_01_接收消息服务器配置 的相关文章

随机推荐

  • 找个好用的录屏软件,怎么这么难?

    真的要被录屏软件给搞疯了 本来公司说要给新人做个培训视频 想着把视频录屏一下 然后简单的剪辑一下就可以了 可谁知道录屏软件坑这么多 弄来弄去头都秃了 不过在头秃了几天之后 终于让我发现了一个值得 私藏 的录屏软件 咱就说这是什么神仙软件 把
  • 编码器测速,获取实际速度

    本例程中使用的电机为带霍尔编码器的减速电机 电机由三部分组成 减速器 电机以及霍尔编码器 霍尔编码器工作原理 霍尔编码器通过电磁转换 将机械的位移转化为脉冲信号 并且输出A B两相的方波信号 A B两相脉冲信号相位相差90 通过检测规定时间
  • Android Studio快捷键从Mac OS改为Win

    原理将Mac的Control映射为Command Command映射为Option Option映射为control 这样与win的快捷键按键习惯应该相同 未长时间测试
  • iOS App上传到苹果应用市场构建版本的图文教程

    使用hbuilderx的h5 或uniapp框架写的前端 进行云打包ios应用 会生成一个ipa后缀的应用文件 这个文件是没有办法像安卓应用那样直接安装在手机上面的 需要上架到苹果应用商店 用户才能下载安装使用 因此 我们这篇文章讲详细介绍
  • 5G基础信令

    一 4 5G高层协议规范框架对比 4G 5G 36 300 LTE整体 38 300 NR整体 36 401 E URTAN整体架构 38 401 NG RAN整体架构 36 321 LTE MAC 38 321 NR MAC 36 322
  • Dockerfile部署mysql并初始化

    文件目录结构 Dockerfile FROM centos 7 ADD jdk 8u261 linux x64 tar gz usr local ADD check mysql sh home datasong release bin CO
  • Gogs使用详解

    Gogs使用介绍 Gogs是一款类似Github 国内有码市 的开源文件 代码管理系统 基于Git 目前功能基本介绍 远程代码仓库管理 代码仓库权限分配 管理 团队管理 代码审查 1 注册 2 基本功能介绍 主面板说明 图中 表示自己个人账
  • 【测试入门】测试用例经典设计方法 —— 因果图法

    01 因果图设计测试用例的步骤 1 分析需求 阅读需求文档 如果User Case很复杂 尽量将它分解成若干个简单的部分 这样做的好处是 不必在一次处理过程中考虑所有的原因 没有固定的流程说明究竟分解到何种程度才算简单 需要测试人员根据自己
  • 直线检测方法—LSD论文翻译

    附原文链接 LSD a Line Segment Detector 摘 要 LSD是一个线段检测器 能够在线性时间内得到亚像素级精度的检测结果 它无需调试参数就可以适用于任何数字图像上 并且能够自我控制错误数量的检测 平均来说 一个图像中允
  • Bazel install Tips

    Bazel Fast Correct Choose two Build and test software of any size quickly and reliably Speed up your builds and tests Ba
  • Android接口一般定义格式,Android开发规范

    原标题 Android开发规范 一 书写规范 1 编码方式统一用UTF 8 2 花括号不要单独一行 和它前面的代码同一行 而且 花括号与前面的代码之间用一个空格隔开 3 空格的使用 if else for switch while等逻辑关键
  • 一个不错的关于CPU和GPU(CUDA)的性能比较讨论话题

    http topic csdn net u 20081027 23 67ff3857 3c71 4d5c acf6 095f3497c7a9 html这里是今天的一个论坛的一个帖子 大家可以讨论一下 1 那些程序适合用cpu来做 那些适合用
  • 【Transformer系列】深入浅出理解Tokenization分词技术

    一 参考资料 NLP技术中的Tokenization是什么 核心任务是什么 二 Tokenization相关介绍 1 Tokenization的概念 NLP技术中Tokenization被称作是 word segmentation 直译为分
  • 深入理解工具链-自己搭建STM32编程IDE

    目录 一 前言 二 编译器组成与编译流程 2 1 编译流程概述 2 2 Gcc For Arm编译器 2 3 预编译 2 4 编译 2 5 汇编 2 6 链接 2 7 生成HEX镜像 2 8 通过Makefile编译代码 三 调试流程 3
  • 解决在使用 Ant Design Vue组件库更改Modal对话框样式使用深度作用选择符不生效的问题

    项目场景 在使用 Ant Design Vue组件库更改Modal对话框样式使用深度作用选择符不生效 问题描述 Modal对话框官方样式如下图 现在要修改为下图所示样式 使用深度作用选择符样式没有生效 原因分析 因为modal是直接插入到b
  • 【SQL】10 SQL UPDATE 语句

    UPDATE 语句用于更新表中的记录 SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录 SQL UPDATE 语法 UPDATE table name SET column1 value1 column2 value2
  • Flink消费kafka出现空指针异常

    文章目录 出现场景 表现 问题 解决 tombstone Kafka中提供了一个墓碑消息 tombstone 的概念 如果一条消息的key不为null 但是其value为null 那么此消息就是墓碑消息 出现场景 双流join时 采用的是l
  • 此av非彼"AV"

    作者 王亨 R语言中文社区专栏作者 跟着菜鸟一起一步步学习R语言 争做R语言高手 个人公众号 跟着菜鸟一起学R语言 微信ID learn R 最近发现一个特别有意思的包 av 为什么有意思 首先名字有意思吧 其次这个包可以捕获图像 添加背景
  • 华为OD机试真题(Java),最小步骤数(100%通过+复盘思路)

    一 题目描述 一个正整数数组 设为nums 最大为100个成员 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数 要求 第一步 必须从第一元素起 且 1 lt 第一步步长
  • Java企业微信开发_01_接收消息服务器配置

    一 准备阶段 需要准备事项 1 一个能在公网上访问的项目 见 Java微信公众平台开发01本地服务器映射外网 http www cnblogs com shirui p 7308856 html 2 一个企业微信账号 去注册 https w