微信后台怎么确保你填的url有效呢?
最近在研究微信公众号的开发。 这些文章是我的笔记。
首先,你需要有一个公众号并注册。 现在个人只能注册订阅号。 订阅号部分接口未开放。 我们只好先看看它的开放接口。
我们先登录后台,看看公众平台的开发者文档,《开发者必读》中的《接入指南》。 我建议您仔细阅读本指南。
先简单说一下微信公众号的发展。 有了微信公众号之后,需要有一个服务器(可以用百度bae,或者新浪sae或者阿里云服务器),登录微信公众号后台,进入最左边的菜单“开发” - “基本配置”,您可以启用服务器配置。
在这里,您填写服务器地址 url 和令牌(有关详细信息,请参阅文档)。 你要确保你填写的url有响应。 然后,当有人向你的公众号发送消息时,微信服务器会将消息发送到你配置的url,然后将你的url的响应返回给其他人。 大致过程是这样的。
指南非常清晰,并提供了php代码示例,我们要做的就是将其翻译成java版本。 我指的是这个博客。 第一次访问的代码比较简单,所以基本都是直接copy过来的。 特此说明,对方博客目前无法访问。
其实这第一篇我们要做的就是配置并提供一个可以响应微信服务器的url。 那么武汉公众号运维,微信后台如何保证你填写的url有效呢? 当你在服务器配置中填写你的url,点击确定后,微信服务器会向填写的服务器地址URL发送GET请求。 GET请求携带四个参数:
范围
描述
微信加密签名结合了开发者填写的token参数、请求中的参数、nonce参数。
时间戳
随机数
随机数
随机字符串
如果你的url可以响应这个请求,首先要验证,》如果确认GET请求来自微信服务器,请原样返回参数内容,则访问生效,成为开发者成功,否则访问将失败。”
验证方法如下:
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
不知道大家看到这里有没有疑惑呢? 你是不是觉得:如果我不验证,就直接返回参数的内容? 微信后台能让我配置成功吗? 我自己试了一下,答案是肯定的! 为什么? 因为只要返回你配置的url,微信后台就会认为你的url可以正确响应,可用。 至于你有没有真的验证过,微信服务器不知道。 之所以要验证,是为了确认请求来自微信服务器。 反正微信告诉你验证方法。 如果你不去验证武汉公众号运维,由此带来的安全问题是你自己的事。
处理get请求的类如下:
/** *@ClassName: WeixinController *@Description: 响应Controller *@author zhutulang *@date 2016年1月4日 *@version V1.0 */ @Controller @RequestMapping("/weixinCon") public class WeixinController { private Logger log =Logger.getLogger(WeixinController.class); @RequestMapping(method =RequestMethod.GET) public void get(HttpServletRequest request,HttpServletResponse response) { log.info("请求进来了..."); // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 String signature =request.getParameter("signature"); // 时间戳 String timestamp =request.getParameter("timestamp");// 随机数 String nonce =request.getParameter("nonce"); // 随机字符串 String echostr =request.getParameter("echostr"); PrintWriter out = null; try { out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败 if (SignUtil.checkSignature(signature,timestamp, nonce)) { out.print(echostr); } } catch (IOException e) { e.printStackTrace(); } finally { out.close(); out = null; } } }