博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众平台企业号回调模式的URL验证
阅读量:6911 次
发布时间:2019-06-27

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

hot3.png

微信公众平台企业号回调模式的URL验证 博客分类: java

模式的URL验证——Java [问题点数:40分,无满意结帖,结帖人u011429034]

微信公众平台企业号回调模式的URL验证——Java [问题点数:40分,无满意结帖,结帖人u011429034]

            不显示删除回复             显示所有回复             显示星级回复             显示得分回复             只显示楼主            
u011429034 本版等级: T1
 
结帖率:100%
楼主 发表于: 2014-10-24 11:44:55
 
最近在做微信企业号的相关应用,因为以前没有接触过微信方面的东西,因此在开启回调模式的时候感觉无从下手,找不到门路,在网上找了教程,最后也是没有结果。
逼不得已,只能硬着头皮就着官方的文档一步步的往下做,最终终于实现是回调模式的第一步:URL验证。现将代码共享出来,供各位新手借鉴,同时的后续开发,可以共同交流、学习。
1. 要开启企业号的回调模式,首先要进行URL验证,也就是说,你必须要有一个服务器,来保证在公网环境下能够访问你的这个URL,然后才能接着往下走。(如果没有服务器的话,建议使用BAE比较好)。
2. 创建一个web项目,(注意必须是Dynamic Web Project项目),然后创建一个servlet类,来处理企业号发送的请求,命名任意,代码如下:
Java code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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,如果不信的可以试试看,反正我用这个是没通)
    下载地址是:
,
请开发者使用jdk1.6或以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或comm ons-codec-1.8等其他版本),我们有提供,官方下载地址:
4. 如果出现异常java.security.InvalidKeyException:illegal Key Size的解决方案:
在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:
下载后解压,可以看到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文件的配置,代码如下:
Java code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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
>
            
org.yhxz.course.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.html</welcome-file>
    
</welcome-file-list>
</web-app>
6. 然后将你的项目发布到服务器上,在浏览器中输入URL,如果在你的Tomcat的控制台上出现NullPointException异常,就说明没有问题(出现的原因是:请求的数据为空,这个你懂得)。
7. 接下来就在企业号后台上的操作了,开启回调模式,输入你的URL,随机生成token和EncodingAESKey,点击提交就可以验证通过,注意一定要代码中的和企业号上的token和EncodingAESKey是要一致的。
8. 通过结果图示:

转载于:https://my.oschina.net/xiaominmin/blog/1597298

你可能感兴趣的文章
nfs常见问题解决方法
查看>>
centOS 6 安装mongoDB
查看>>
Java基础学习总结(10)——static关键字
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
Linux实用工具
查看>>
JDBC Statement 实例- 查询结果集
查看>>
MyBatis学习总结(11)——MyBatis动态Sql语句
查看>>
SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
Java消息服务JMS详解
查看>>
RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
查看>>
Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)...
查看>>
2 curses库IO处理--光标操作
查看>>
DB2中的is null与=‘’
查看>>
git的使用
查看>>
win10中“windbg+vmware+win7双机调试”设置
查看>>
socket结构体
查看>>
网关和路由的区别
查看>>
如何评判一个App外包公司的实力?
查看>>
Grin交易原理详解
查看>>
磁盘分区以及挂接挂载
查看>>