微信-------通过开发者请求验证
2016-06-06 14:30
148 查看
本文介绍了,微信公众号在开发者模式下通过微信服务器验证的设置
准备工作
验证过程及原理
验证通过后的处理
相关说明
在微信公众平台上面点击基本配置—->服务器配置—–>修改配置
填上URL,以及Token,如图
![](https://img-blog.csdn.net/20160608144027563)
URL:http://1.*************applinzi.com/WeixinServlet(微信服务器通过像这个地址发送请求,完成验证)
Token:token(可随意填写,微信服务器通过token加上timestamp以及nonce生成signature即微信加密签名)
- 微信服务器根据填写的URL 发送一个get请求
###应用接收到请求,处理并反馈(验证是来自微信服务器的请求返回echostr)
那么如何处理微信服务器发送过来的请求呢
很简单!判断signature是否是微信服务器发过来的就成
我们要做的工作就是
首先,拿到timestamp,nonce加上我们自己设置的token,对这三个参数按字典序排序后拼接成一个字符串。
然后,对这个字符串进行SHA-1加密
最后,加密过后的字符串如果与微信服务器发送过来的signature一样,那么就通过了我方应用的验证。
具体实现代码如下:
本文域名后面跟着的WeixinServlet是一个servlet
准备工作
验证过程及原理
验证通过后的处理
相关说明
准备工作:
申请到应用引擎,用于部署自己的应用,笔者用的是新浪云在微信公众平台上面点击基本配置—->服务器配置—–>修改配置
填上URL,以及Token,如图
URL:http://1.*************applinzi.com/WeixinServlet(微信服务器通过像这个地址发送请求,完成验证)
Token:token(可随意填写,微信服务器通过token加上timestamp以及nonce生成signature即微信加密签名)
验证过程及原理:
(在此之前必须已经把自己的应用部署的服务器上,能够通过登记的URL进行访问)- 微信服务器根据填写的URL 发送一个get请求
参数 | 描述 |
---|---|
echostr | 随机字符串(用于返回表通过应用验证) |
nonce | 随机数(参与生成加密签名) |
timestamp | 时间戳(参与生成加密签名) |
signature | 加密签名(通过token、nonce、timestamp生成) |
那么如何处理微信服务器发送过来的请求呢
很简单!判断signature是否是微信服务器发过来的就成
我们要做的工作就是
首先,拿到timestamp,nonce加上我们自己设置的token,对这三个参数按字典序排序后拼接成一个字符串。
然后,对这个字符串进行SHA-1加密
最后,加密过后的字符串如果与微信服务器发送过来的signature一样,那么就通过了我方应用的验证。
具体实现代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String token = "token"; //此处token是在微信工作平台上填写的Token String endstr = ""; // 获取相关参数 String timestamp = req.getParameter("timestamp");// 时间戳 String signature = req.getParameter("signature");// 加密签名(结合了token、timestamp以及nonce) String nonce = req.getParameter("nonce");// 随机数 String echostr = req.getParameter("echostr");// 随机字符串,验证通过返回 // 开始验证 // 对token、timestamp以及nonce 按字典序排序 String arrays[] = new String[] { token, timestamp, nonce }; Arrays.sort(arrays); // 将排序后的三个参数按顺序拼接成一个字符串,并对其进行sha1加密 String result = ""; for (String str : arrays) { result += str; } try { MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] hash = md.digest(result.getBytes()); Formatter formatter = new Formatter(); for (byte b : hash) { formatter.format("%02x", b); } endstr = formatter.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // 将加密后的字符串与signature比较,相同则验证通过返回随机字符串 if (endstr.equals(signature)) { PrintWriter pw = resp.getWriter(); pw.print(echostr); pw.close(); } else { } }
验证通过后的处理
通过后,只需原样返回微信服务器发送过来的随机字符串(echostr)即可,服务器在收到返回的echostr后,整个验证过程就算处理完毕了。**相关说明:
在微信公众号中设置URL 不要只写一个域名,要写能够处理这个请求的地址,可以是JSP也可以是servlet本文域名后面跟着的WeixinServlet是一个servlet
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 突击部队拼多多
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 「Linux 中国」2018 微信文章排行榜
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- 一个微信群的兴亡
- 微信服务号推送模板消息接口
- 我也有微信朋友圈了 Android实现
- PHP限制页面只能在微信自带浏览器访问的代码
- HTML5实现微信拍摄上传照片功能
- 微信小程序去哪里找 小程序到底如何使用(附小程序名单)
- 使用jQuery.wechat构建微信WEB应用