微信公众号开发
一、公众号类型和注册
微信公众号目前有三种,订阅号、服务号、企业号,另外还有一种后来推出的和公众号带点关系的小程序。
订阅号、服务号和企业号的功能区别如下(更多详细区别戳 参考链接):参考链接
各种类型公众号的区别:
在我们微信的日常使用中可以看到,订阅号会集中放置在“订阅号”中,不会直接出现在聊天栏,而是放在二级目录下(如虎嗅网、36氦)。服务号的话,则是直接放在聊天面板的一级目录中的(如中国移动10086),主要是用以部分大公司企业提供服务,而订阅号主打是咨询和媒体。而企业号主要是用于公司内部交流,使用不多。
公众号是独立于微信的,需要单独注册然后对微信进行绑定,所以你如果不注册而是直接用你的微信号直接去登陆公众号平台是无法登陆的。
公众号的注册根据开发需要进行选择公众号的不同类别,注册流程简单,填写基本信息,邮箱激活,信息登记等流程按照官方走完,你就拥有了一个公众号了。
登陆微信的公众平台,微信提供了两种模式,开发和非开发,非开发模式下提供了一些基本的如消息发送,菜单定义等,而开发模式的话,则除了非开发的基本功能,还可以根据微信提供的接口创造更多有趣的功能。需要注意的是,一个微信只能在两种模式择一,选择开发模式,则非开发模式会关闭。意思就是说,假如你选择开发模式,那么如果你想定义菜单,你无法使用微信后台管理系统提供的方便的自定义菜单的功能,而是必须使用微信提供的自定义菜单的接口,通过调用接口来实现。
二、搭建测试服务器
服务器准备
方式一:买的云主机。推荐 爱名网
方式二:BAE(注册百度账号,然后登录 百度云开发 )
方式三:SAE(注册新浪微博,然后登录SAE ,点击注册「新浪云福利」现在还有1000云豆免费领!一起来用吧!) 比较推荐的方式。
方式四: 购买花生壳这种本地映射外网的工具。通过这样的工具方便我们在本地进行调试。(推荐) 具体文章请参考:如何架设本地web 服务器来调试自己的微信公众号服务
方式五:可以通过免费映射工具。比如:ngrok ,natapp 等; 注:大家看自己情况进行选择。
三、公众号对接介绍
登录微信公众平台官网后,进入到公众平台后台管理页面。 选择 公众号基本设置-》基本配置 ,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey。
众平台官以上配置需要认证后才会得到相应的权限。如果开发阶段,我们可以申请测试账号。
服务器配置:
URL:是开发者用来接收微信消息和事件 的接口URL。(必须以http://开头,目前支持80端口)
Token:可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。注意必须为英文或数字,长度为3-32字符。
EncodingAESKey:由开发者手动填写或随机生成,将用作消息体加解密密钥。(消息加密密钥由43位字符组成,可随机修改,字符范围为A-Z,a-z,0-9。)
同时,开发者可选择消息加解密方式:
明文模式、兼容模式和安全模式。
明文模式:不使用消息体加解密功能,安全系数较低
兼容模式:明文、密文将共存,方便开发者调试和维护
安全模式下:消息包为纯密文,需要开发者加密和解密,安全系数高
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
以上介绍也可以参考 微信开发文档
四、access_token
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口、客服接口、获取用户信息接口、用户分组接口、群发接口等, 开发者在调用这些接口时,都需要传入一个相同的参数 access_token,它是公众账号的全局唯一票据,它是接口访问凭证。
access_token的有效期是7200秒,在有效期内,可以一直使用,只有当access_token过期时,才需要再次调用接口 获取access_token。目前,获取access_token接口的调用频率限制为2000次/天,因此,在实际应用中,我们需要将获取到的access_token存储起来,然后定期调用access_token接口更新它,以保证随时取出的 access_token都是有效的。
接口调用请求说明
http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误): {"errcode":40013,"errmsg":"invalid appid"}
获取token
(1)直接通过浏览器访问。
(2)编写程序,模拟https连接,获得token。
缓存token
(1)可以通过缓存框架把该值通过key-values形式缓存在内存中 。
(2)可以把该值存入数据库中,需要的时候就去提取。
五、获取用户信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。
公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
开发者可通过OpenID来获取用户基本信息。请使用https协议。
我们可以看看官方的文档:获取用户的基本信息。
获取用户信息-请求
接口调用请求说明
http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数说明
获取用户信息-返回
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{ "subscribe": 1, "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", "nickname": "Band", "sex": 1, "language": "zh_CN", "city": "广州", "province": "广东", "country": "中国", "headimgurl": "http://wx.qlog********", "subscribe_time": 1382694957, "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" "remark": "", "groupid": 0 }
错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误): {"errcode":40013,"errmsg":"invalid appid"}
六、网页授权
获网页授权获取用户基本信息
介绍:如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
具体而言,网页授权流程分为四步:
- 引导用户进入授权页面同意授权,获取code
- 通过code换取网页授权access_token(与基础支持中的access_token不同)
- 如果需要,开发者可以刷新网页授权access_token,避免过期
- 通过网页授权access_token和openid获取用户基本信息
用户同意授权,获取code
OAuth2.0授权 通过code换取网页授权access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
开发人员输入自己的Appid,Secret和获取到的code,传到这个url里获取access_token 从返回的数据中获取网页授权返回的openId,跳转页面的时候url带着openId,再然后url通过下面的方式生成新的完整的URL进行跳转。
获取用户信息-请求
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面 参考链接(请在微信客户端中打开此链接体验): Scope为snsapi_userinfo https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
------分割新------
简单随笔,用以记录。