前言
前后大概做微信公众平台开发差不多两年,不过说实话,也没做什么高精尖的东西,都是一些简单的调用,一些简单的页面,系统间连调等,不过微信公众平台文档倒是没少读,现在功能越来越多,也被玩出了很多花样,如果以后有机会再深入学习吧。
这次趁着离职做工作交接,就顺便把自己开发过程的一些东西简单总结一下,希望能帮助后来的初学者。
文档学习顺序
首先,要学习公众平台的开发,不建议去买那些书籍,因为他们写的东西大部分就是微信公众平台开发者文档里面写的东西,只要你仔细通篇阅读一遍,有开发基础的人很快就可以开发了。
然后就是阅读顺序,因为我开始做微信开发的时候还没有开发这么多的接口,而且现在的接口功能实在太多,顺序阅读确实影响心情,所以我就按照我当年学习的流程给大家介绍一下吧
接入指南
首先,系统框架要选择好(java,php,nodejs……),然后就可以按照这里的流程,将系统部署好。
但是问题来了
1,我还没有申请下来公众号怎么办。
目前公众号的申请越来越严格(要各种证件),对于很多开发者而言,尤其是一些公司要各种流程各种签字的那种,怎么才能快速进行开发,方法就是使用微信公众平台测试账号登陆,每个人都可以申请。申请下来的测试号拥有绝大部分正常公众号拥有的功能(主要是没有微信支付相关的接口),这些接口足够前期项目工程搭建包括一些功能的开发与调试。
2,没有外网80端口怎么办。
我们知道外网80端口是个很特殊的东西,如果你有一台可以随意开发的云服务器(比如阿里云)自然好,要是舍不得这个钱怎么办?
去下载一个新花生壳,注册一个账号(以前是砸蛋抢名额,现在是收1元)。如何使用就请自行度娘了。花生壳会帮你生成一个外网动态域名(可以使用80端口),并映射到内网地址上,使用这个域名,把请求地址填写到URL上,后台把接入逻辑写好(其实直接把echostr返回去就可以了,验证什么的以后再说吧)
如果一切顺利的话恭喜你,接入成功
接受文本消息
接入成功以后,我们就开始做一个最简单的操作吧,就是在微信里对着自己的公众号(或测试号)发个“你好”,然后返回给用户一个“你好”,返回给用户报文参考被动回复消息。其实这里就是对xml报文的一个解析工作,根据MsgType与Content进行判断和逻辑处理,然后再按照要求返回一个xml报文,一次交互就完成了。
同理,图片语音等等都一样,以及接受事件推送道理是一样的,就是根据报文的标示进行自己的逻辑判断并拼装好报文返回。
以文本消息为例,最简单的交互功能就都能实现了。
获取access token
前面讲的是简单的交互,这里才是公众平台的重中之重。
首先你与公众平台的所有交互都是通过接口实现的,而接口对访问者的审核,实际上就是oauth授权的一种方式,通过获取access_token这个临时凭证来确认你的身份以及你所拥有的权限。
请求与报文里面写的很清楚,这里面说明一点就是这个access_token一定要保证唯一,防止几台服务器分别去请求,这样只有最后请求的那台是有效的,前面的token会自动失效。所以尽量保存到数据库里。
自定义菜单
现在无论是订阅号还是服务号都可以使用自定义菜单的功能了。这里根据自己的需求,设置一个菜单,然后等大概3分钟左右,重新打开微信,就能看见你的菜单或者更新后的菜单了。
获取用户基本信息
如果你的自定义菜单流程走通,说明你的access_token就没有问题了,那么剩下的绝大部分接口其实都是这个流程,调用接口,然后链接里面携带参数。
这里获取用户基本信息,个人建议每个用户关注以后都在本地数据库保存一份用户信息,这样后面的很多操作都会方便许多
素材管理
身为公众平台,营销手段自然少不了,其中图片的问题就需要素材管理来帮忙解决了。
素材管理处理的当然不仅仅是图片,最新的素材管理里面新增了永久素材,这样就是那些没有图片服务器的小伙伴们的福音啊(以前都是要上传一份,然后本地留一份,现在保存个id就行了)。
这里就考验你们对文件编程的基础能力了。
群发消息
我们使用公众号,最多使用的就是推送图文信息用作营销,这里要充分结合好素材管理的部分。
模板消息
我们使用招行公众号的时候会发现,使用信用卡之后,就能发送给您一笔消息,是白色的框框那种,这种消息就是特殊的模板消息,在测试号里面是自己定义模板测试的,在正式号里面是选择行业,然后选择官方提供给你的模板。
消息加解密
上面的东西完成后,一个基础框架就算有了,然后来解决消息的安全问题。
首先是消息重复校验,因为5秒没有反应的话会再发送一次,这个在网速慢的手机用户上提现的很明显,推荐使用FromUserName + CreateTime 排重。
然后就是消息加密,在正式号里面有个安全模式的选项,选择之后报文变成密文。至于加解密的代码,官方都已经提供好了。
有关于Jurisdiction policy files are not signed by trusted signers!异常,可以参考我的另一篇博客。
页面开发
有关于跳转到页面的部分,微信最新推出了JSSDK规范用于同一管理微信内一些分享朋友圈等操作。
这部分可以参考微信jssdk分享开发经验(强行为自己增加阅读量 ^^)
而有些需要从网页获取用户信息的操作可以使用网页授权获取用户基本信息
其中这两个操作所使用的认证方式一定要仔细看,因为和access_token很像但是又不一样。
其实这两个功能是可以连起来使用的,进入页面就获取用户信息(注意,这里的openid与用户关注后给你的openid是一样的,也可以说你能确定未来关注你公众号的用户信息)。使用获取用户信息,然后再自定义分享出去的链接(链接里面挂用户id),这样就能实现所谓的分享活动。
数据统计
新开发出了数据统计接口,不过个人测试结果,好像这个接口的数据不是很稳定,有时为空。所以最好还是分析自己的日志数据。关于数据的展现,个人推荐使用百度的echarts。
微信支付相关
单位的公众号没有申请微信支付的权限,所以有关于微信支付的功能我没做过,这里就放个链接好了。
其他
之前自己练手的时候写了个Java版和nodejs版,各位可以拿去简单搭建一个试试
java版:https://github.com/bambooleaf/weixinServer
nodejs版:https://github.com/bambooleaf/wechat_node