微信公众号入门笔记(一)启用服务器配置

最近研究了下微信公众号开发,这几篇文章是我的笔记。

 

首先你要有个公众号,去https://mp.weixin.qq.com/注册。现在个人只能注册订阅号,订阅号有些接口是不开放的,没办法我们只好先看看它开放的接口了。

 

我们登录后台,去看一下公众平台开发者文档,“开发者必读”里面的“接入指南”。我建议你认真读一下这篇指南。

 

我简单说一下微信公众号开发是怎么回事。在你有了个微信公众号之后,你还要有个服务器(你可以用百度bae,或者新浪sae或者阿里云服务器),登录微信公众号后台,在最左边的菜单“开发”—“基本配置”里,你可以启用服务器配置。

 

 

在这里,你填入服务器地址url和token(具体看文档)。你要确保你填的url能够响应。那么,当别人向你的公众号发消息时,微信服务器会将该消息发送到你配置的url,然后会将你的url的响应返回给别人。大致的流程就是这样。

 

指南上写的很清楚了,并提供有php代码示例,我们要做的就是把它翻译成java版的。我参考了这篇博客 http://m.blog.csdn.net/blog/bd_zengxinxin/19357163,第一篇接入的代码比较简单,所以基本直接拷贝自它,特此说明,另外这篇博客现在访问不了了。

 

事实上,我们在这第一篇要做的就是配置提供一个能响应微信服务器器的url。那么,微信后台怎么确保你填的url有效呢?当你在服务器配置中填上你的url点击确定后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

参数

描述

signature

微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

timestamp

时间戳

nonce

随机数

echostr

随机字符串

 

你的url要能响应这个请求,首先你要对其进行校验,“若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。”

校验方法如下:

 

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

 

不知你看到了这里会不会有疑问?你是否会想:如果我不校验,直接返回echostr参数内容呢?微信后台允许我配置成功吗?笔者亲试过,答案是可以!为什么呢?因为只要你配置的url返回了echostr,那么微信后台就认为你的url能正确响应,是可用的。至于你是否真的去做了校验,微信服务器并不知道。你之所以要校验是为了确认请求是来自微信服务器,反正微信告诉了你校验方式,你不去校验,由此带来的安全问题就是你自己的事了。

 

处理get请求的controller类如下:

/**
 *@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; 
                 } 
             } 
}


 其它相关代码可查看:

http://download.csdn.net/detail/zhutulang/9423587

 

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值