1、接入公众平台
推荐查看官方文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
1、公众号有 编辑模式 和 开发模式
开发模式交互: 用户关注公众号后发送消息,先到 微信服务器, 再转发到 指定的服务器(我们定义的应用),等处理完再返回给微信服务器,进而返回给用户。
所以想进行接入公众平台测试要有: 一、独立域名的网站(用来和微信服务器交互,单纯测试的话,可以用花生壳,参考上一篇);
二、微信公众号(这里由于测试,直接用微信的公众帐号测试号,通过手机微信扫描二维码即可登陆。
地址: http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login )
登陆之后,可以在接口配置信息看到 如下图:
1、配置接口信息
URL: 是指开发者用来接收微信消息和事件的接口URL,如果服务器域名是mypc.cn,应用名为weixin, 用weixinValidate.do来接收消息,url如图上
Token: 可由开发者可以任意填写,用作生成签名(该Token会和接口URL(如weixinValidate.do)中包含的Token进行比对,从而验证安全性),可以随便填写,但注意保密。
详情参考 接入指南 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
这二个都是从应用得到的,点提交后,提示 配置成功才证明 我们的服务器接入公众平台。
下面是服务器的weixinValidate.do
首先看文档了解到
代码如下:
@Controller public class ValidateController { @RequestMapping(value = "/weixinValidate",method = RequestMethod.GET) @ResponseBody public String weixinValidate(String signature, String timestamp, String nonce, String echostr ){ // 1)将token、timestamp、nonce三个参数进行字典序排序 String[] arrs = {WeixinUtil.TOKEN,timestamp,nonce}; //WeixinUtil.TOKEN: 抽取出来的TOKEN,为了重用 Arrays.sort(arrs); // 2)将三个参数字符串拼接成一个字符串进行sha1加密 String str = arrs[0] + arrs[1] + arrs[2]; // 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 if (signature.equals(SecurityUtil.SHA1(str))){ //确认此次GET请求来自微信服务器,返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败 return echostr; }else return null; } }
将应用部署到服务器后,重启后。 回到刚才 微信的公众帐号测试号的接口配置信息,点提交后,提示 配置成功才证明 我们的服务器接入公众平台。
这时候就接入成功了。
微信后台发送消息是一个GET请求,URL会带上signature、timestamp、nonce这3个参数;
如果是别人伪造的请求,由于不知道token,所以,无法计算出正确的signature;
timestamp和nonce 防止第三方通过监听后重放攻击