码迷,mamicode.com
首页 > 微信 > 详细

【笔记——微信】微信公众号开发之微信验证

时间:2014-12-11 10:17:26      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

bubuko.com,布布扣

以上是整个流程

所需配置包括:

1、在微信公共号设置页面填写自己服务器的地址,具体到接收请求的地址。

2、在接受请求的地址进行验证。

具体实现:(Tomcat 作为服务器,jsp技术实现)

微信会要求对填写的地址进行验证,很简单,他会发送一个get请求到填写的地址,获取他,并按照官方说明进行返回,这一步骤也是为了自己的服务器安全,可以区别改请求是否来自微信官方服务器。

 1     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
 2             IOException {
 3         //获取参数
 4         String signature = req.getParameter("signature");    
 5         //自己生成的signature
 6         String localSignature = "";
 7 
 8         //生成signature
 9         localSignature = WeiXinUtils.createLocalSignature(req);
10     
11         //配置输出
12         PrintStream out = new PrintStream(resp.getOutputStream());
13         
14         //如果自己算出的signature与微信提供的一样,证明这是由微信发送过来的消息
15         if(signature.equals(localSignature)){
16             String echostr = req.getParameter("echostr");
17             //把从微信服务器获取的echostr返回给微信服务器
18             out.print(echostr);
19         }else{
20             //这里是另外加上去的,与验证无关,只是自己用来提示验证出错
21             out.print("验证出错");
22         }    
23     }

 

一下是本地生成signature方法,大概步骤是先对获取的微信数据进行字典排序,然后尽心sha-1算法加密得到的结果就是本地signature

 1     public static String createLocalSignature(HttpServletRequest req){
 2         String timestamp = req.getParameter("timestamp"); 
 3         String nonce = req.getParameter("nonce");
 4         // create local key
 5         String localsignature = "";
 6         // 进行字典排序
 7         String[] so = new String[] { token, timestamp, nonce };
 8         Arrays.sort(so);
 9 
10         // 把字符串进行链接
11         String value = "";
12         for (String str : so) {
13             value = value + str;
14         }
15 
16         try {
17             //进行sha-1加密
18             MessageDigest md = MessageDigest.getInstance("SHA-1");
19             byte[] by = md.digest(value.getBytes());
20             localsignature = StringUtil.byteToString(by); //得到结果字符
21         } catch (NoSuchAlgorithmException e) {
22             e.printStackTrace();
23         }
24 
25         return localsignature;
26     }

附上byteToString(byte[] b)方法

 1     public static String byteToString(byte[] b)
 2     {
 3         String hs = "";
 4         String stmp = "";
 5 
 6         for (int n = 0; n < b.length; n++) {
 7             stmp = (Integer.toHexString(b[n] & 0Xff));
 8             if (stmp.length() == 1) {
 9                 hs = hs + "0" + stmp;
10             } else {
11                 hs = hs + stmp;
12             }
13         }
14         return hs.toLowerCase();
15     }

以上就是微信验证的全部内容

【笔记——微信】微信公众号开发之微信验证

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/kirno/p/4156877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!