微信企业号回调 java_微信公众平台企业号回调模式的URL验证——Java

本文介绍了如何使用Java实现微信企业号回调模式的URL验证,包括创建Servlet处理请求、导入官方业务类、解决JCE无限制权限策略问题以及配置web.xml。详细步骤适合初学者参考。
摘要由CSDN通过智能技术生成

最近在做微信企业号的相关应用,原因是以前没有接触过微信方面的东西,因此在开启回调模式的时候感觉无从下手,找不到门路,在网上找了教程,最后也是没有结果。

逼不得已,只能硬着头皮就着官方的文档一步步的往下做,最终终于实现是回调模式的第一步:URL验证。现将代码共享出来,供各位新手借鉴,同时的后续开发,可以共同交流、学习。

1. 要开启企业号的回调模式,首先要进行URL验证,也就是说,你必须要有一个服务器,来保证在公网环境下能够访问你的这个URL,然后才能接着往下走。(假如没有服务器的话,建议使用BAE比较好)。

2. 创建一个web项目,(注意必须是Dynamic Web Project项目),然后创建一个servlet类,来处理企业号发送的请求,命名任意,代码如下:

package org.yhxz.weixin.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;

/**

* 核心请求处理类

*

* @author heqian

*

*/

public class CoreServlet extends HttpServlet {

private static final long serialVersionUID = 4440739483644821986L;

String sToken = "5XaQ8cG6x2pULd";//这个Token是随机生成,但是必须跟企业号上的相同

String sCorpID = "wx4edd47d3a6r4r991";//这里是你企业号的CorpID

String sEncodingAESKey = "jWmYm7qjusnxu65ZRjGtBxmz3KA1tkAj3ykkR6q2B2C";//这个EncodingAESKey是随机生成,但是必须跟企业号上的相同

/**

* 确认请求来自微信服务器

* @throws IOException

*/

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{

// 微信加密签名

String sVerifyMsgSig = request.getParameter("msg_signature");

// 时间戳

String sVerifyTimeStamp = request.getParameter("timestamp");

// 随机数

String sVerifyNonce = request.getParameter("nonce");

// 随机字符串

String sVerifyEchoStr = request.getParameter("echostr");

String sEchoStr; //需要返回的明文

PrintWriter out = response.getWriter();

WXBizMsgCrypt wxcpt;

try {

wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);

sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce, sVerifyEchoStr);

// 验证URL成功,将sEchoStr返回

out.print(sEchoStr);

} catch (AesException e1) {

e1.printStackTrace();

}

}

/**

* 处理微信服务器发来的消息

*/

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO 消息的接收、处理、响应

}

}

3. 接下来就要导入官方的业务类了,然后将其导入到你的项目中。这个可以在官方文档上下载到(注意,虽然官方下载的实例代码中也有验证的代码,但是不建议使用哪个Sample.java,假如不信的可以试试看,反正本人用这个是没通)

下载地址是:

http://qydev.weixin.qq.com/java.zip,

请开发者使用jdk1.6或以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或comm ons-codec-1.8等其他版本),我们有提供,官方下载地址:

http://commons.apache.org/proper/commons-codec/download_codec.cgi。

4. 假如出现异常java.security.InvalidKeyException:illegal Key Size的解决方案:

在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。假如安装了JRE,将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件,假如安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。

5. 下来就是对web.xml文件的配置,代码如下:

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">

coreServlet

org.yhxz.course.servlet.CoreServlet

coreServlet

/coreServlet

index.html

6. 然后将你的项目发布到服务器上,在浏览器中输入URL,假如在你的Tomcat的控制台上出现NullPointException异常,就说明没有问题(出现的原因是:请求的数据为空,这个你懂得)。

7. 接下来就在企业号后台上的操作了,开启回调模式,输入你的URL,随机生成token和EncodingAESKey,点击提交就可以验证通过,注意一定要代码中的和企业号上的token和EncodingAESKey是要一致的。

8. 通过结果图示:

6df054f5c94d79f5e42e84d487ceeb6c.png

9. 接下来的还在继续研究,QQ 463066721

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了验证微信企业回调模式URL,您可以按照以下步骤进行亲测。 首先,您需要在微信企业的后台设置回调模式URL地址。这个URL地址需要指向您的服务器上的一个接收微信回调的脚本。 在服务器上,您可以使用PHP等编程语言编写一个处理微信回调的脚本。下面是一个PHP脚本的例子: ```php <?php $token = "your_token"; // 替换为您设置的Token值 $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $echostr = $_GET["echostr"]; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ echo $echostr; exit; } ?> ``` 在上面的示例代码中,您需要将`your_token`替换为您在微信企业后台设置的Token值。 然后,您可以将这个脚本上传到您的服务器上,并使用浏览器访问该脚本的URL,例如:`http://your_domain.com/callback.php?signature=xxxx&timestamp=xxxx&nonce=xxxx&echostr=xxxx`,其中`your_domain.com`替换为您的域名,`xxxx`替换为实际的参数值。 如果您在微信企业后台设置的URL验证通过,则浏览器会返回一个由微信服务器发送的`echostr`参数值。 通过以上操作,您可以完成对微信企业回调模式URL验证。 ### 回答2: 亲测微信企业回调模式URL验证代码如下: 1. 首先,获得微信企业后台提供的Token,用于加密验证。可以在配置页面或者开发页面找到该信息。 2. 创建一个URL接口用于接受微信企业发来的URL验证请求。接收到请求后,取出请求参数中的`echostr`值。 3. 将token、timestamp(请求时间戳)、nonce(随机数)和echostr按照字典序排序并拼接成一个字符串。 4. 将拼接后的字符串进行SHA-1加密。 5. 将加密后的字符串与微信企业发来的`msg_signature`进行比较,如果一致,则说明URL验证通过。 下面是一个示例代码(使用Python语言): ``` import hashlib import time from flask import Flask, request app = Flask(__name__) @app.route('/wechat', methods=['GET', 'POST']) def handle_wechat(): if request.method == 'GET': token = 'your_token' # 替换成微信企业后台提供的Token signature = request.args.get('signature') timestamp = request.args.get('timestamp') nonce = request.args.get('nonce') echostr = request.args.get('echostr') # 将token、timestamp、nonce按字典序排序并拼接 sorted_str = ''.join(sorted([token, timestamp, nonce])) # 对拼接后的字符串进行SHA-1加密 hashcode = hashlib.sha1(sorted_str.encode()).hexdigest() if hashcode == signature: return echostr else: return 'URL验证失败' if __name__ == '__main__': app.run() ``` 以上就是使用Python编写的微信企业回调模式URL验证代码。当收到微信企业URL验证请求时,会对请求参数进行验证,如果验证成功,则返回`echostr`作为响应内容。 ### 回答3: 亲测微信企业回调模式URL验证代码如下: 在接收微信企业回调请求的URL页面中,需要编写一个方法来处理微信回调验证的逻辑。以下是一个简单的示例代码: ```php <?php $token = "your_token"; // 填写你在微信企业后台设置的Token // 验证URL的方法 function verifyURL($token) { // 接收微信服务器发送过来的参数 $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $echostr = $_GET["echostr"]; // 将Token、timestamp和nonce按照字典序排序 $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); // 将排序后的三个参数拼接成一个字符串 $tmpStr = implode($tmpArr); // 对拼接后的字符串进行SHA1加密 $tmpStr = sha1($tmpStr); // 将加密后的字符串与接收到的signature进行比对 if($tmpStr == $signature) { // 验证通过,返回随机字符串用于校验 echo $echostr; } else { // 验证失败,返回错误信息 echo "URL验证失败"; } } // 调用验证URL的方法 verifyURL($token); ?> ``` 以上代码会先获取微信服务器发送过来的参数,然后对Token、timestamp和nonce进行排序,并拼接成一个字符串进行SHA1加密。最后将加密后的结果与接收到的signature进行比对,如果一致,则表示验证通过,返回随机字符串用于校验;如果不一致,则返回失败信息。 此代码可以在你编写的回调URL页面上直接使用,通过访问该URL来进行URL验证。请注意将代码中的"your_token"替换为你在微信企业后台设置的Token。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值