您的位置:首页 > 移动开发 > 微信开发

微信-------通过开发者请求验证

2016-06-06 14:30 148 查看
本文介绍了,微信公众号在开发者模式下通过微信服务器验证的设置

准备工作

验证过程及原理

验证通过后的处理

相关说明

准备工作:

申请到应用引擎,用于部署自己的应用,笔者用的是新浪云

在微信公众平台上面点击基本配置—->服务器配置—–>修改配置

填上URL,以及Token,如图



URL:http://1.*************applinzi.com/WeixinServlet(微信服务器通过像这个地址发送请求,完成验证)

Token:token(可随意填写,微信服务器通过token加上timestamp以及nonce生成signature即微信加密签名)

验证过程及原理:

(在此之前必须已经把自己的应用部署的服务器上,能够通过登记的URL进行访问)

- 微信服务器根据填写的URL 发送一个get请求

参数描述
echostr随机字符串(用于返回表通过应用验证)
nonce随机数(参与生成加密签名)
timestamp时间戳(参与生成加密签名)
signature加密签名(通过token、nonce、timestamp生成)
###应用接收到请求,处理并反馈(验证是来自微信服务器的请求返回echostr)

那么如何处理微信服务器发送过来的请求呢

很简单!判断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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信