微信开发第十一章 公众账号自定义回复功能
微信官方其实并不推荐经常群发消息,更多的是希望用户通过对话来自己获取服务或者进行搜索。今天我们就讲下如何使用开发模式做自定义回复。
目前公众账号可以接收的用户提交消息请求有四种类型,分别是文字、图片、地理位置和链接,而公众账号回复只有三种格式,文字、图文和音乐,也就是说用户互动的模式最多也就是12种,我们今天先讲三种即文字回复文字、文字回复图文、文字回复音乐。
这强调一下,微信的消息接口通讯有效时间是5秒,也就是说网络不稳定等原因很容易造成用户在5秒内接收不到回复消息,然后就通讯中断了,这几天有人反映关注ZTalk后没有消息提示就是这个问题。
一、文字回复文字之鹦鹉学舌
代码添加位置是在“事件消息”的注释前面,用户消息赋值之后,实际添加的代码是从图上20行开始到41行。
第21行是判断用户发送的消息类型是否文字消息,可以参考事件消息的判断,变动的只是消息类型标示。
第24行是判断如果用户发送了文字消息,那么获取用户发送的文字消息内容赋值给变量$form_Content 。
- ######PS:这里有个函数“trim”,大家可以查下php的函数手册,这个函数作用是去除字符串首尾的空格,有时候用户误在头尾多敲了空格,如果不去除的话就会出现关键字无法匹配,比如“你好 ”如果不去掉尾部空格就无法匹配关键字“你好”。
第26行是判断用户发送的消息内容是否为空,可以参照第9行的逻辑,empty($form_Content)在$form_Content不为空的时候返回0,为空的时候返回1,非(!)0即1表示条件成立,用户发送的消息是有内容的。
第28行到第31行就是完成回复文字消息的功能,其中回复的内容直接用了$form_Content,也就是把用户发送的内容又给回复回去。
第34行是如果用户发送的内容为空白,则返回输入提示。因此第37行的回复消息就是"请输入些什么吧……"。
好了现在去测试下,当你向公众账号输入文字时,公众账号就会回复同样的内容给你,当然你也可以把$form_Content改成直接的字符串,这样就是自动回复了。
二、文字回复图文之餐馆菜单
添加的代码位置在判断用户发送消息不为空的条件判断之后,默认回复之前,这里大家注意下默认回复其实就是将前面文字回复文字的变量用字符串代替了。增加的代码从第29行开始到41行。
第30行判断用户发送过来的消息是否为“菜谱”,这里注意判断是否等于是用两个“=”号。如果是则运行该判断条件下的代码。
第33行先赋值给$return_str一个初始字符串点菜提示“请输入字母编码浏览相应菜品:”,我这里加了两个\n表示空两行。
第34行是一个数组,数组的元素为菜谱的类别。
数组在程序中使用非常普遍,它是一种把具有相同类型的若干变量、数字或者字符串,有序组织起来的一种形式,有点像咱们以前数学课教的集合概念。
数组的每个元素都是由键和值关联组成,我在例子里的定义方式键值会默认生成,第一个元素的键值为0,元素值是“lc.冷菜\n”,数组的每个元素值可以使用“数组名[键值]”的方式获取或者输出,比如$return_arr[0]的值就是“lc.冷菜\n”。
数组可以用来做数据的存储、排序、检索等,它的概念比较复杂但是很重要,希望大家能够去看些资料认真学习下。
第35行是用implode函数将$return_arr转化成字符串,然后加到之前赋值过的$return_str后面,其运行结果为:
"请输入字母编码浏览相应菜品:\n\nlc.冷菜\nhb.杭帮菜\nsk.烧烤\nwp.外婆烧\nml.麻辣\nrc.热菜\ntp.甜品"。
- ######implode函数的使用方法为implode(分隔符,数组),将数组内元素转化成字符串,并将分隔符插入元素之间,我在例子里分隔符为空值,所以最后转化的字符串是首尾相连中间没有分隔符的。
后面的就不解释了,输出文字消息同时退出运行。
添加的代码位置在菜谱的大括号后面。第42行到51行和之前的是一样的,唯一不同的是ArticleCount我设置成了10,也就是图文消息条数为10条(编辑模式里多图文消息最多只有8条,开发模式里是10条),不清楚的可以看第十期教程,我直接讲下改进的部分。
第53行到105行我定义了一个数组$return_arr,这个数组里共有10个元素,每个元素又是一个结构相同的数组,这些数组都有三个元素分别对应标题、图片和链接,为了偷懒,我9个列表消息只是换了标题,没有图片和连接,不知道大家看明白没有。
这个数组其实就相当于我把菜单的10道菜里不同的数据按照相同的结构做了集合,然后使用一个循环读取语句将这些数据拼接成将要输出的图文消息。
第107行的foreach是一个将数组中每个元素按照键值顺序遍历一遍的函数,通俗的说就是将$return_arr这个数组里的元素按照先后顺序读取出来,每次读取一个元素,读取出来的元素赋值给$value,所以这个$value的值会随着每次循环改变。即第一次循环时$value=$return_arr[0],第二次循环时$value=$return_arr1……
每次读取的$value其实就是$return_arr一个元素,根据上面的数据结构这个元素又是一个数组,里面有三个元素,分别对应了标题、图片和链接,值是$value[0]、$value1、$value2,将这三个数据拼接到图文消息模板,同时与前一次的$resultStr拼接。这样做的好处在于减少了代码的长度,把图文消息模板复用了,另外这个数组的结构其实跟数据库里读取出来的结构是一样的,所以也是想让大家一点点熟悉起来。
等循环结束就执行第116行,完成最后的闭合拼接,然后输出结果。公众账号就将这个包含10条菜品的图文消息发送给了用户。
三、文字回复音乐之表情传意
很多人,真的很多人,几乎每天都有人在公众平台上问我同一个问题,就是你怎么可以放超过60秒的歌曲,我的答案只有一个,就是用开发模式的音乐消息回复接口实现的。今天就给大家介绍下如何使用音乐接口来回复用户消息,让用户有好的欣赏体验。
回复音乐消息里的音乐是以链接形式加载到回复数据模板里的,类似咱们回复图文消息里的图片链接,SO,我们音乐文件的链接获取也参照图片连接方式,一种呢是找网上在线收听的链接,不过真不是很保险,很多是防盗链的,比图片还严格,另外一种呢就是放到云存储平台上,这里建议大家如果要把音乐做成常态功能,必须选择专业的云存储平台,比如又拍云、七牛。
这个消息回复里支持的音乐格式目前我只测试过MP3、AAC两个,肯定是没有问题的,这里需要注意的是上传的文件名必须用英文或数字,文件名里不要有中文、空格、单双引号等,大小写无所谓。如果资源允许可以上传一个低码率的音乐文件,再上传一个高码率的音乐文件,因为微信里听音乐会自动识别网络环境选择不同音质的版本。
第124行代码是判断用户发送的表情是不是微笑。就是微信表情第一排第一个,这里大家肯定会很奇怪微笑表情符号不是“[微笑]”吗,老贼我最早也犯过这个错,折腾半天才发现其实微信接口发送过来的表情代码是这样的。
第127行这里是消息类型,音乐消息的类型是music。
第128行到137行就是调用wx_tpl.php里的音乐消息模板,用sprintf将格式化的数据写入到变量中去。其中“我的歌声里是”是title,“曲婉婷”是DESCRIPTION,第一首歌的链接是低码率的,第二首是高码率的,微信会根据环境自动选择。
后面就是输出到用户手机上,用户接收到的就是音乐播放器,点击播放键就可以欣赏音乐了,是不是很简单?
ZTalk秘籍
如何收集所有表情的代码呢?在第10期教程里有个秘籍是让大家调试接口时可以把输出结果文件保存到Storage上,然后查看文件检查程序是否正常。咱们就用这个法子抓取所有表情的代码。
这些就是真正的表情符号,我这里就发了第一屏幕的,大家抓取完就把代码都删除了吧,否则这里有个结束语句在那里,不去掉就不会执行后面的程序。
接下来会再讲下图片、地址和链接的开发怎么做。视频请点击Vol9视频版!
今天讲的源码放到服务器上供大家下载,请在ZTalk里回复“微信代码”获取下载地址。带来不便非常抱歉……
相关文章
- 微信开发第一章 微信公众号的注册、设置与登陆
- 微信开发第二章 公众平台后台介绍
- 微信开发第三章 公众平台群发消息
- 微信开发第四章 公众平台编辑模式(上)
- 微信开发第五章 公众平台编辑模式(下)
- 微信开发第六章 公众账号自动回复
- 微信开发第七章 公众平台开发模式
- 微信开发第八章 新浪云计算平台注册和使用
- 微信开发第九章 用微信开发模式做欢迎词
- 微信开发第十章 公众账号发送欢迎图文消息
- 微信开发第十一章 公众账号自定义回复功能
- 微信开发第十二章 公众账号接收非文字消息
- 微信开发第十三章 公众账号接收非文字消息
- 微信开发第十四章 公司通讯录开发(一)
- 微信开发第十四章 公司通讯录开发(二)
- 微信开发第十四章 公司通讯录开发(三)
- 微信开发第十四章 公司通讯录开发(四)
- 微信开发教程 微信问答系统
- 微信开发第十五章 自定义菜单开发
- 微信开发第十六章 微信音乐播放器(一)
- 微信开发第十六章 微信音乐播放器(二)
- 微信开发第十六章 微信音乐播放器(三)