微信2
一.微信的LBS应用和开发
1.什么是LBS
LBS(Location Based Service)基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标)
2.微信的LBS接口
根据微信的官方文档编写的内容分析可知,微信的接收消息接口一个地理位置的消息接口
如下图所示:

假设微信客户端发送一个地理位置,那么MsgType节点就会返回location,代表接收到的消息类型为地理位置消息,MsgType在WetChat.class.php文件中用sendType属性来表示.
3.编写php代码返回地理位置的经纬度信息
微信文档仔细观察会发现2个很特别的节点,分别为Location_X和Location_Y分别表示地理位置的纬度和经度,在Api当中对应的属性是$this->lat和$this->lng.
$this->lat:表示纬度
$this->lng:表示经度

微信文档仔细观察会发现2个很特别的节点,分别为Location_X和Location_Y分别表示地理位置的纬度和经度,编写代码获取用户的经度和纬度信息:

测试结果如下:

4.使用百度的LBS云的逆地理编码服务(在百度地图web api上找)
逆地理编码:即逆地址解析,由百度经纬度信息得到结构化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。简单来说就是把经纬信息转化为详细的地址定位信息.
百度的LBS云提供了相关的Api接口给开发者使用,不过前提下是你要注册一个百度帐号并且通过实名认证才能使用这个接口,接口文档的网站地址如下:
http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition
打开地址的链接,找到左侧导航栏,如下图示所示的选项进行查看:

然后在文档中找到”逆地理编码服务”,如下图所示:

在该文档中,我们发现其json格式的api链接如下图所示:

其主要传值的参数其实只有纬度和经度信息:

且其请求方式为get请求,所以我们可以使用curl进行请求,但请求该api需要一个名为ak的参数,指代调用该api接口的密钥,可以在百度开发者中心以下位置找到:

5.使用逆地理编码服务的API接口定位结构地址详细
根据文档的信息,我们可以把地址组合成为以下链接信息:

为了代码的整洁性,我们采用面向对象的方式封装一个第三方的接口类为OptApi
在Lib目录下建立一个名为OptApi.class.php的文件,编写代码如下:

在api.php中调用lbs云服务接口


测试结果如下:

6.获取LBS的周边信息
编写php代码如下:

测试结果如下:

二.图灵机器人的接入
1.为什么需要微信机器人
如果我们希望拥有一个在线的客服功能,当用户输入一些问题有人能自动回复的时候该怎么办呢?
答:可以通过微信聊天机器人对接用户消息
图灵机器人网址:http://www.tuling123.com
图灵机器人是瑞典一个公司开发的类似AlphaGo的服务器程序,这个程序目前在世界上据说支持48种语言,而它对中文的支持是产生在2014年的11月,因此很多公司就会接入图灵机器人来让客服不在线进行回复,同时图灵机器人有学习的能力,比如:搜索一个人叫“彭劲”
这个人不是很出名,但是补充对应的资料给图灵机器人进行显示。
但这个机器人免费使用的情况下它能够对接中文的回答一般不会超过5句,但是图灵机器人目前在中国,它最能够正确反应的信息有天气,有人物百科,有古诗,有笑话,这些图灵机器人的反应速度是很快很准确的。
登录进入图灵机器人后,我们需要做的第一件事情是获取apikey:

图灵机器人拥有开发的文档,它最先跟腾讯合作,所以它提供一系列WebApi给您使用:

2.图灵机器人的get请求方式
接口地址,请求方式:get
http://www.tuling123.com/openapi/api
参数:
info:请求的内容
key:你的apikey
返回格式为json:
text:图灵机器回答的文字内容
因此我们可以编写代码如下,首先封装链接到OptApi.class.php当中

在api.php中接入图灵机器人:

3.使用图灵机器的post请求方式
根据图灵机器人的api文档建议,其实图灵机器人希望我们用post传递,然而问题是传递数据是json格式的数据:

如果希望在curl里面post数据为json那么我们就首先要模拟一个浏览器的头部给curl
在php官方查找文档找到如下图所示的选项:

如果希望在curl的头部设置json格式,那么我们就需要编写以下代码
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
"Content-type:application/json",
"Content-length:".$length
));
因此我们就需要在WeChat.class.php文件中编写CurlPostJson方法如下:

重新测试图灵机器人,我们就需要在OptApi.class.php当中重新封装要给post的url

还需注意,如果使用Post请求图灵机器人,必须传递以下这个3个参数:【get只需2个也可以】
info :你的问题
key : api的key
uesrid:我们一般传递时候使用12345678(随便,必须8位)
在api.php中编写图灵机器人post请求方式代码如下:

测试结果如下所示:

三.微信的access_token凭证
1.什么是access_token
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
2.分析access_token的接口
我们需要先找到access_token的文档,方法如下:

根据分析发现,请求access_token需要使用相关的api链接接口进行请求返回,文档描述和请求方式如下所示:

那么我们就可以调用curl的方法去对access_token进行获取,然而有一个关键的问题就是这个api的链接附带的参数有3个,文档描述如下所示:


在WeChatApi.class.php当中开发者帮我们封装了获取access_token的url地址,如下:

如果希望使用access_token的api连接我们就需要配置类常量如下:


3.在WeChat.class.php中封装获取access_token的方法

我们自定义access_token如下所示:

上传到服务器当中,然后编写test.php代码进行access_token获取的测试:

上传test.php到服务器中进行测试结果如下:


注意:access_token一天只能调用6000次,一次的有效时间为2小时
四.使用微信的群发功能
根据文档分析可知,群发接口如下:

群发消息接口需要使用到access_token作为参数,并且使用post进行数据提交,数据提交格式如下所示:

如果需要在微信中进行群发,首先我们需要获取相关的用户openId(可以通过网页授权存储到数据库中进行循环获取),如果暂时没有保存到数据库中,那么可以通过测试账号中的关注列表进行获取:
第1步:获取大约4个openId

第2步:需要在Lib/Command当中定义一个命令行执行脚本,代码如下:
编写Common.php如下所示:

第3步:在WetChat.class.php当中找到群发消息接口如下:

构造群发数据包如下:

调用群发接口功能的方法SendMass():

如果成功发送就会errcode==0

上传到Lib/Command目录中,使用php命令进行执行


使用命令行执行是比较安全,其实也可以使用浏览器进行执行!注意:重复内容是不能群发多次的,一个月只能够群发4次,但是群发功能在现实开发当中我们必须要成为正式的开发者,并且拥有服务号认证才可以使用.
五.使用草料二维码生成器和媒体上传接口
有很多人喜欢在QQ或者泡泡当中发送网址的连接给用户,甚至有一些人在微信当中发送链接信息给用户,这时其实在用户的角度出发,这个体验并不好.为了提高整个体验,其实最早在国外twitter的公司就提出了一种叫做二维码的服务,其实二维码就是一些网站的连接图片,这个二维码是可以有效的提高用户的体验,因此如果我们需要发送一些网址信息的时候,建议在微信使用二维码进行发送.使用草料二维码生成器就可以生成一个网址的二维码.

问题来了,那么我们如何在微信服务器端发送二维码给用户呢?当用户发送传智播客的时候,那么就回复二维码的网址给用户,所以我们就需要把二维码进行上传,可以使用媒体上传接口进行上传.
媒体上传接口在WeChat.class.php当中定义如下:

查看文档,发觉上传媒体有如下说明:


发觉文档比较重新,于是我去可以一个叫media.php的文件

把代码复制到Lib/Command/Common.php中,然后再Lib/Command建立目录Media
然后把二维码下载后上传到该目录当中,然后编写命令行上传脚本如下:

六.客服回复接口
1.什么是客服回复接口
当用户和公众号产生特定动作的交互时,微信将会把消息数据推送给开发者,开发者可以在48小时内调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。其功能类似于文本回复接口和图文回复接口,但它的性能和速度优于文本回复接口和图文消息接口
其原理图如下:

2.使用客服回复接口回复文本消息
需求:客户端发送”您好”,我们就用客服回复接口回复”亲,您需要什么帮助吗?”,分析WeChat.class.php内容可知,有以下的接口:
接口会调用我们CurlRequest方法,使用post方式进行接口的请求,分析时候我们看到有一个api的url地址获取WeChatApi.class.php文件,内容如下:

对应的Url地址如下:

我们就可以在api.php当中编写以下代码:

测试结果如下:

3.使用客服回复接口回复图文消息
需求:如果微信客服端发送信息为”手鼓女神”那么我们就从数据库中调用相关手鼓女神类别的相关信息回复给客户端,如果客户端发送的信息是”斯诺克”,那么我就从数据库中调用相关斯诺克类别的信息回复给客户端,需求实现的步骤如下:
第1步:设计数据库表wx_news

第2步:使用pdo连接数据库,使用单例设计模式连接数据库

第3步:把DB类集合到api.php当中

第4步:在api.php当中编写数据数据获取方法getNews($type)

第5步:在api.php当中调用客服的图文回复接口

编写客服回复图文消息接口代码如下:

测试结果如下:

如果数据是实时那么数据库的压力就依然存在,所以如果希望优化这些数据,那么我们可以加入一个nosql的中间层(memcache)
七.使用memcache优化图文消息和access_token
1.回顾memcache

2.优化图文回复消息的数据库查询
如果我们需要优化图文回复消息,那么我们就需要生成两个key,一个叫snk,一个叫girl

3.优化access_token
access_token一天只能调用6000次,一次有效时间其实有2个小时,但如果每一次请求就覆盖上一次的access_token,对于有1000人访问的微信公众号来说,一个人最多只能请求6次,如果我们把1天分为24小时,然后access_token每一次请求都缓存1小时,那么1天当中access_token顶多被调用24次,大大节约6000次的开销,因此我们可以根据我们的需要把access_token存入到memcache当中进行缓存操作,我们可以修改WeChat.class.php当中GetAccessToken方法如下:

八.在微信当中使用菜单接口(创建和删除)
其实微信开发者在2014年的时候就已经提供了这个接口给我们,并且实现一定的封装,建议我们使用命令进行运行.分析文档可知,菜单定义如下:

在WeChatApi.class.php当中有封装对应的连接

编写代码在Lib/Command/CreateMenus.command.php如下:

在菜单有一个推送事件,有3个重要的属性
$this -> sendType == ‘event’
$this -> Event = ‘CLICK’ //单表有单击在菜单表示为type

代表当前菜单只能用于点击,而不能跳转

代表当前菜单只能跳转而不能触发点击事件
$this->EventKey=’自定义的key’//对应菜单中key定义

在api.php当中定义点击事件如下:

如果希望删除菜单,分析文档可知,删除菜单比较简单,但删除菜单就是全部一起删除,删除菜单会存在一个缓存的问题,正常来说删除后要24小时生效,如果希望马上看到效果需要先取消关注,然后再重新关注,才能看到效果

编写代码RemoveMeus.command.php代码如下:


浙公网安备 33010602011771号