分享

微信公众号创建自定义菜单之前的准备工作

 龙点书院 2017-02-13

微信公众号现在还没菜单,所以首页给我们的微信公众号创建几个菜单出来。

想做出菜单,当然是通过代码来做,通过阅读微信文档发现,我们通过代码访问微信API时,会经常用到一个access_token,可以说accees_token就是我们访问API的钥匙。

access_token是公众号的全局唯一票据,公众号调用各种接口时都需要使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。所以我们首先解决的问题是,如何统一地来管理我们应用中的access_token,而不是每次需要时去生成一次,因为这样会非常低效。

我们提供的解决方法就是使用缓存,第一次获取到access_token后将它放到缓存里并且设置缓存的过期时间是2个小时,然后每次需要access_token时直接去缓存获取,如果获取不到了说明过期了,我们就重新生成一次再丢入缓存,这样基本上只需要每隔2个小时左右生成一次access_token,而且因为大部分情况下我们都是直接从缓存中获取access_token的,所以效率很高。

一般的PHP框架都提供了缓存的实现,我们只要知道怎么使用就好了,因为Think-php是目前国内使用最多的PHP框架,我们打算也随大流,使用Thinkphp来作为我们的框架。

(1)在官方下载3.2.3的完整版本。

(2)将解压后的文件拷贝到edu83cn项目目录下。

(3)在Eclipse里面刷新项目根目录,我们就可以看到所有被复制进来的文件。

(4)重启WAMP服务器,访问edu83cn项目地址,这样在我们的application目录下就会自动生成Common和Home目录结构,如图所示。

微信公众号创建自定义菜单之前的准备工作

我们将把access_token令牌管理类放在Application下面的Home/common目录下。我们在该目录下创建一个TokenUtil.class.php的类,其命名空间就是Home\Controller。增加一个静态方法fetchToken(),其目的就是判断缓存中是否存在token,存在则返回,不存在则先获取保存到缓存中。ThinkPHP默认的缓存是文件缓存,默认情况下缓存数据永不失效。

在配置文件convention.php里面可以查看到,如图所示。

微信公众号创建自定义菜单之前的准备工作 我们来看看fetchToken()的实现代码,如图所示。
微信公众号创建自定义菜单之前的准备工作

代码很少但是完成的功能却很多,这也是PHP的一个优点。上面的代码中,我们省略了具体的获取最新Token的代码部分,因为它需要调用微信API来做,而调用微信API也需要做一个封装,所以放到后面统一来说。

我们分析一下后台代码和微信平台之间的所有关联,发现有2种类型的交互:第1种就是当用户在手机端点击微信公众号而触发的各种动作,这种类型的交互是由用户发起,经过微信平台转发给我们的后台程序,我们只需要在后台程序里面获取到这个消息并给出一个响应就可以了;第2种则是由我们的后台程序主动出发的,例如生成菜单、获取access_token这些,都市我们的后台程序主动发起,然后调用一个API接口,这类操作需要我们自己准备请求数据并且发起一个POST或者GET请求。

上面说的通过调用API获取access_token就是属于第2种。所以就会涉及发送GET请求和POST请求问题。因为ThinkPHP作为一个服务器的脚本语言框架,它本身没有提供直接的发送POST请求的辅助类,需要我们自己写,所幸的是像这种模拟发送GET请求和POST请求 需求是PHP开发最常见的应用场景了,所以我们可以很容易地在网上找到已有的工具类,拿来直接使用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多