一:验证微信的Token
2016-01-09 15:28
441 查看
前言:申请到微信公众号的同学,可能会挺感兴趣的,毕竟微信公众号,确实是一个好东西,它提供了一个很好的平台,而且它自带有一套管理模板,对于微信公众号可以很好的管理。
但是也仅仅是很好的管理,因为作为开发者来说,很多功能需要更加人性的自定化,就需要由自己写程序来提供服务,而微信恰恰就提供了这些接口,可以方便的我们去调用微信的功能。
于是我们去开启开发者模式
点击“基本配置”,然后需要输入url,输入token,输入EncodingAESKey(这个可以随机生成),最后点击提交。
问题:?
奇怪的是微信这方面的文档对于这部分好像是没有任何说明(我不知道是不是我没有找到还是怎么的),我输入我个人的域名,然后输入随便输入了32位的token,然后点击随机生成EncodingAESKey,最后选择加密模式,然后点击提交,最后发现微信提示token验证失败,试过好多次,也从微信官方文档查询token这是个什么东西,最后却只得到token是一个随机的字符串,可以自由输入,结果却可想而知。
原因!
百度之后得到,之前输入的url,微信会对这个url发出一个http请求,而这个url,需要正确的对于这个微信的请求作出正确的响应,这样才算验证成功,这下总算弄明白了
由于我已经有了公网的域名,也有了自己的服务器(没有服务器,没有域名的,只要申请一个空间,就可以了,空间会送一个三级域名),所以就开始写代码,这里是一个servlet,你们只要把这个servlet拷贝过去,就可以验证了,下面列出代码:
有自己服务器的,就可以验证成功了
但是也仅仅是很好的管理,因为作为开发者来说,很多功能需要更加人性的自定化,就需要由自己写程序来提供服务,而微信恰恰就提供了这些接口,可以方便的我们去调用微信的功能。
于是我们去开启开发者模式
点击“基本配置”,然后需要输入url,输入token,输入EncodingAESKey(这个可以随机生成),最后点击提交。
问题:?
奇怪的是微信这方面的文档对于这部分好像是没有任何说明(我不知道是不是我没有找到还是怎么的),我输入我个人的域名,然后输入随便输入了32位的token,然后点击随机生成EncodingAESKey,最后选择加密模式,然后点击提交,最后发现微信提示token验证失败,试过好多次,也从微信官方文档查询token这是个什么东西,最后却只得到token是一个随机的字符串,可以自由输入,结果却可想而知。
原因!
百度之后得到,之前输入的url,微信会对这个url发出一个http请求,而这个url,需要正确的对于这个微信的请求作出正确的响应,这样才算验证成功,这下总算弄明白了
由于我已经有了公网的域名,也有了自己的服务器(没有服务器,没有域名的,只要申请一个空间,就可以了,空间会送一个三级域名),所以就开始写代码,这里是一个servlet,你们只要把这个servlet拷贝过去,就可以验证了,下面列出代码:
import java.io.IOException; import java.util.Arrays; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.codec.digest.DigestUtils; @WebServlet("/validateWeiXin.do") public class ValidateWeiXin extends HttpServlet { private static final long serialVersionUID = 1L; private String TOKEN = "这里随便填入32位以内的数字英文,也就是token"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain;charset=utf-8"); // 微信加密签名 String signature = request.getParameter("signature"); // 随机字符串 String echostr = request.getParameter("echostr"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); String[] str = { TOKEN, timestamp, nonce }; Arrays.sort(str); // 字典序排序 String bigStr = str[0] + str[1] + str[2]; // SHA1加密,我这里用的是common-codec的jar包,你们也可以用java自带的消息消息摘要来写,只不过要多写几行代码,但结果都一样的 DigestUtils.sha1Hex(bigStr); String digest = DigestUtils.sha1Hex(bigStr); // 确认请求来至微信 if (digest.equals(signature)) { response.getWriter().print(echostr); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
有自己服务器的,就可以验证成功了
相关文章推荐
- 微信内置浏览器UserAgent的判断
- 微信隐藏分享js
- 搜狗微信公众号文章抓取
- 微信授权机制
- 微信 群好友 的返回微信号 有阉割
- 微信QQ分享回话
- 微信内置浏览器UserAgent的判断
- 微信开发对接
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- 微信卡券核销
- Perl 微信模块--Weixin::Client
- iOS下微信语音播放之切换听筒和扬声器的方法解决方案
- 生成随机密码 可生成微信密钥key
- 第三方微信授权登录的iOS代码分析
- phonegap(cordova) 自定义插件代码篇(六)----android ,iOS 微信支付工具整合
- 关于微信跨号支付
- 微信开发之网页授权获取用户信息(二)
- 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-9系统,3行代码即可集成.
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- iOS下微信语音播放之切换听筒和扬声器的方法解决方案