大家好,我是IT修真院深圳分院第6期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网复盘项目中用到的知识点,微信公众号开发。
1.背景介绍
微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,就可以进行开发了
微信公众平台公分4大板块:订阅号、服务号、小程序、企业号。按照微信2016年公开课规划,企业号后续将与企业微信合并
订阅号和服务号均为传统意义的“公众号”,两者开发模式完全相同,只不过服务号可以使用更多的服务接口,而订阅号则是“阉割版”的服务号。
2.知识剖析
微信公众号开发的实质
微信公众号的开发,实质上是一个只能运行在微信内置浏览器上的普通WEB项目,如果不在微信公众号上从菜单进行跳转,是不能正常打开网页的,要么直接提示,要么获取不到数据
而我们项目中使用到微信的功能,就是从微信公众号的自定义菜单跳转到我们的WEB项目上,然后从微信拉取微信的用户信息,如微信昵称、微信头像、用户openid,性别、地址等
微信公众平台接入
1、配置好服务器
2、申请公众号或测试号
3、开发者基本配置
4、实现服务
微信服务号简单流程。
1. 基本配置接口
2. 获取access_token,这是一个微信全局密匙,用以创建或删除菜单、获取openid等等
3. 创建自定义菜单,并从自定义菜单跳转到WEB服务器
4. 获取微信端CODE,然后使用CODE换取用户openid
5. 使用openid拉取用户信息
总结:获取access_token——》创建自定义菜单——》获取CODE——》使用CODE获取openid——》使用openid获取用户信息
3.常见问题
全局access_token 和 网页授权access_token的区别?
4.解决方案
关于网页授权access_token和普通access_token的区别
1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;
2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。
5.编码实战
6.扩展思考
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口、客服接口、获取用户信息接口、用户分组接口、群发接口等,开发者在调用这些接口时,都需要传入一个相同的参数access_token,它是公众账号的全局唯一票据,它是接口访问凭证。
access_token的有效期是7200秒(两小时),在有效期内,可以一直使用,只有当access_token过期时,才需要再次调用接口获取access_token。在理想情况下,一个7x24小时运行的系统,每天只需要获取12次access_token,即每2小时获取一次。如果在有效期内,再次获取access_token,那么上一次获取的access_token将失效。
目前,获取access_token接口的调用频率限制为2000次/天,如果每次发送客服消息、获取用户信息、群发消息之前都要先调用获取access_token接口得到接口访问凭证,这显然是不合理的,一方面会更耗时(多了一次接口调用操作),另一方面2000次/天的调用限制恐怕也不够用。因此,在实际应用中,我们需要将获取到的access_token存储起来,然后定期调用access_token接口更新它,以保证随时取出的access_token都是有效的。
1.如何定时获取access_token?
在Java中,如果要定时执行某项任务,需要用到java.util.Timer类,对于喜欢使用框架的朋友,可以采用 开源的任务调度框架quartz,Spring框架也支持quartz。除此这外,还有一种方法就是启动一个线程,在线程的run()方法中写一个死循环,然后使用Thread.sleep()来保证线程定时执行某项任务。
2.将access_token保存在哪?
对于access_token的存储,可以考虑存储在文件、数据库或内存中。具体采用哪种存储方式,需要根据项目实际情况而定。如果只有一台服务器,直接将access_token存储在内存中是最简便有效的方式。
定期获取并存储access_token的流程为:Web服务器启动时就加载一个Servlet,在Servlet的init()方法中启动一个线程,在线程的run()方法中通过死循环+Thread.sleep()的方式定期获取access_token,然后将获取到的access_token保存在public static修饰的变量中。
7.参考文献
官方文档
百度
8.更多讨论
1.为什么微信的API和任务的时候不一样。
A:因为微信的个人信息是存储在微信服务器上面的。
2.官方文档中为什么没有java代码demo?
A:倒是有PHP的,毕竟最好的语言。java如果个人水平高,照着文档提示直接写一个出来。如果写不出来,只能去copy别人的了。
推荐个SDK:https://github.com/Wechat-Group/weixin-java-tools
号称目前最好的微信SDK
3.多线程不会怎么办?
A:new Thread,start。就是这么简单,什么锁?我也不懂。
感谢大家观看
PPT:PPT
视频:视频
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
小礼物走一走,来简书关注我
赞赏支持
作者:blue
链接:
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。