微信公众号教程(9)公众帐号发送欢迎图文消息

   公众帐号发送欢迎图文消息php

 原文:http://www.cnblogs.com/imaker/p/6249972.htmlhtml

昨天已经讲了如何实现用户订阅公众帐号时发送欢迎词,但这个貌似体现不出开发模式的优点啊,我用编辑模式作不是更加简单嘛,那么今天就来个升级版的欢迎词吧。先看最后的效果,以下图:浏览器

 

 

当用户关注公众帐号时自动回复一个多图文消息,每一个图文消息能够对应一篇文章或者本身网站的某个网页,用户点击就能够查看,是否是很是棒,特别适合一些企业用来作公司业务介绍。如今就教你们如何实现,顺便就能够把图文消息的回复讲了。缓存

 

1、使用SAE的分布式存储服务服务器

 

在编辑模式里作图文消息回复时,直接经过关键字回复就能够很方便的实现,可是编辑模式下的关注回复不能用图文消息,因此你们都是用文字的,可是在开发模式里就可使用了,图文消息的输出格式以下:微信

其中图片是用图片连接(在上图标签PicUrl处)的形式出现,也就是图片得先上传到服务器,而后将图片链接放置到输出代码里,这里提供三种图片链接生成方法:微信开发

 

一、直接复制第三方网站的图片连接,好比咱们在百度图片搜索到某张图片,将该图片的连接直接复制过来就能够,很是方便,可是若是第三方网站把图片删除或者说有防盗链机制,就会形成图片不显示。因此不推荐这类方式,除非能够保证该图片连接永久有效。微信公众平台

 

二、将图片上传到新浪微博、腾讯微博这些地方发微博(微信的素材管理图片连接不能使用),而后将图片连接复制过来,这里要注意的是记得把微博水印关掉,不然这个图片上就带着你的微博名字了。dom

 

三、我们都已经在用云计算平台了,就顺便用下云存储服务吧,我目前本身是在用又拍云存储,那个有点复杂后面作具体完整项目时再介绍。分布式

 

如今先使用SAE的 Storage存储服务,这是SAE为开发者提供分布式文件存储,由于SAE平台限制使用本地存储,全部须要持久化的文件好比图片、音乐等只能保存到Storage上。

 

首先是启动Storage服务,进入我们的应用首页,在左边导航里找到”Storage”这个选项,以下图:

 

 

点击打开后右边页面会进入开启“Storage”服务的设置页面,以下图:

点击“新建一个domain”按钮,进入存储空间的设置页面,以下图:

  1. 存储空间的名称,只能由数字和字母组成,根据本身喜爱取个吧。

  2. 存储空间的介绍,用来提示该空间的用途,好比我这个是用来放图片和音乐文件的。

  3. 是否私有云存储,若是打勾则没法经过URL直接访问,只能经过程序接口读取访问,我们不用搞那么复杂因此别打勾了

  4. 缓存时间。这个能够减小服务器的负担,通常设6小时就能够了。

  5. 防盗链设置。能够设置可以访问文件的白名单网址,我们也不用搞那么复杂所别打勾了。

建立成功之后在右边会出现存储空间管理,如图:

 

  1. 存储空间属性修改,除了名称不能修改之外其余均可以,包括设置访问权限、说明、防盗链以及缓存时间修改等。

     

  2. 删除该存储空间,删除时将会将会把该空间内全部文件都删除,因此当心操做。

     

  3. 管理存储空间。点击后进入管理页面,能够看到存储空间默认的容量是10G,确定够用,以下图:

 

  1. 下载客户端,直接用应用程序管理存储空间,有点像FTP管理,我们如今是初学者,不用去管这个。

     

  2. 返回Storage的管理首页。

     

  3. 新建子目录方便文件分类,好比能够建一个目录叫pic,里面存放图片文件。

     

     

    上传文件,点击后弹出文件上传窗口,跟普通的文件上传操做同样,支持批量上传,我就很少介绍了,微信开发模式只支持jpg和png文件,请注意图片文件格式。另外须要注意的是文件名须要规范,不要和以前的已经上传的文件同名,不然会覆盖掉,建议每次上传前使用日期+编号+文件名的方式。这里给你们一个我上传图片后的样例:

 

点击图片名称就会在新窗口打开该图片,复制浏览器的URL就是该图片的连接,能够直接用到图文消息的代码里。

 

可能有朋友会说为何不把图片直接上传到SAE的代码管理目录里访问,确实能够这样作,可是不推荐这样作,一个是代码的空间大小默认只有100M,扩容会增长开销,二是代码空间是用来跑脚本的,同等流量费用要高不少,三是代码空间不容许写入文件,未来没法实现经过程序上传图片的功能。

 

 

2、制做多图文消息

 

啰嗦一大堆朋友们都等急了吧,如今咱们开始作图文消息欢迎词!

 

昨天我教你们的是用户订阅后回复文字消息,最后实际输出的是一个通过拼装的符合文字消息回复格式的字符串,其结构以下图:

 

里面的一些带“$”的变量在前面代码都赋了值,最后回复到微信公众平台接口的实际消息是这样:

 

 

如今打开SAE的代码管理,进入编辑模式,修改咱们的微信接口文件,首先将代码中第29行到第31行的三行代码注释掉,就是输出文本消息的三行代码,如图所示:

 

 

注释多行代码使用/*.....*/来包含,在中间的全部内容都再也不被执行。

 

而后在注释前面开始写图文消息回复,前面咱们看到过图文消息回复的格式了,如今就是要拼接出一个符合图文消息回复格式的字符串,当用户关注时回复给用户,首先咱们把图文消息的公共部分先赋值,如图:

 

代码从30行开始,前面的跟昨天是同样的,就是监测是否用户订阅事件。

 

首先是赋值给$resultStr这个变量图文消息的数据头部,跟文本消息的差很少,只是昨天是用了sprintf这个函数直接将数据写到模板里去了,今天是拿模板直接来用,实际效果是同样的,与文字消息不一样的是:

 

第34行,MsgType变成了news;

 

第35行多了一个ArticleCount,这个值表示多图文消息的条数,包括了封面消息在内,我这里是5,各位能够根据本身实际修改。

 

当ArticleCount为1,只放一条消息时则为单图文消息,大于2,放了两条消息以上则为多图文消息。

 

第36行是图片消息列表标签的开始,最后会有一个</Articles>来闭合整个图文消息列表。

 

PS:在php里字符串的拼接使用“.”,echo "A"."B";输出的是AB。固然高级程序猿为了提升运行效率会使用其余方法来拼接字符串,这里就不说了。

 

而后是封面消息,如图下:

 

 

这里能够看到$resultStr和“=”之间多了一个“.”,这也是字符串拼接语法,等于$resultStr=$resultStr.“....”,将新的字符串拼接到以前已经赋值的$resultStr后面再赋值给$resultStr。

 

图文消息里用<item>...</item>来区分各条消息,每条图文消息数据格式都同样,分别为:

 

第41行,图文消息的标题

 

第42行,图问消息的摘要,若是是多图文能够为空不填写,若是是单图文消息须要填写。

 

第43行,封面图片,放置图片连接,官方给出较好的效果为大图即多图文的封面消息图片为640*320,小图即列表消息的缩略图80*80,注意这里的图片其实能够跟实际连接打开的文章图片不一致。

 

第44行,文章连接,放置点击该图文消息时打开的页面,这里能够放置本身的网页连接,好比淘宝店的或者本身网站的,固然也能够放置微信公众平台的图文消息连接(ZTalk的文章查询里其实放的都是微信文章连接,省事又省流量,哈哈哈)。

 

剩下就是放四个列表消息,结构跟封面消息实际上是同样的,只是在多图文消息模式下默认会将第一个消息做为封面消息,如图:

 

只须要将前面的封面消息复制粘贴一下,而后把标题、摘要、图片和链接这些修改下就能够了。

 

最后是把图文消息的尾巴加上,如图:

 

第76行就是我前面说的闭合图文消息内容;

 

第77行是用来星标用户请求消息的,因为这个消息是实际上是用户订阅事件,不用打星标,因此这里的值为0。

 

第78行是闭合整个输出图文消息结构的。

 

好了,如今保存下,从新关注下公众帐号,看看是否成功回复了一个图文菜单,是否是颇有成就感!

 

给你们一个做业:试试关注时回复单条图文或者5条以上的多图文消息。

 

ZTalk秘籍

 

微信开发的调试是个很麻烦的事情,为何呢?由于接口是微信来调用的,全部的结果都是返回到微信公众平台去的,咱们没法获得运行结果,除了语法错误还能够直接打开接口网页看错误提示,好比下图表示个人代码第16行语法错了:

 

其余错误就全得从公众帐号里看了,但实际上只要有错,公众帐号里啥反应都没有了,通常来讲就是逻辑出错或者变量没有获取到值什么的,这个时候就须要设置一些断点来检查,好比咱们在今天的这个课程中若是发现订阅后没有任何欢迎提示,咱们能够在输出前设置一个断点,将结果先保存成一个文件,而后查看该文件检查结果是否正确,如图:

 

 

前面说了SAE不容许在本地生成文件,因此咱们得把文件生成到Storage存储空间去。

 

第87行是新建一个Storage的对象,定义为$s;

 

第88行是写入一个文件到Storage空间,格式为$s->write(空间名称,写入文件名,写入的内容)

 

而后咱们取消并从新订阅公众帐号后,到Storage会看到多了一个test.txt的文件,如图:

 

点击打开后就能够看到内容,若是正常的话里面内容就是多图文消息的XML数据,如图:

 

 

若是文件没有生成,或者文件里面是空的,就说明程序运行有问题,我们把断点上移,由于程序运行通常是从上至下的,因此咱们能够把断点放到第一个逻辑判断处,如图我移动到了是否接收到微信接口发送消息的判断位置:

 

 

主要是监测有没有收到微信的请求,我直接用字符串"get_post"(记得字符串要用双引号包含)来代替以前的变量,而后在公众号里发送任意字符,再查看Storage里的test.txt文件,若是正常文件应该生成,而且里面应该有“get_post”,不然就是出错了,那要检查公众平台是否已经和SAE应用正常通信了。

 

断点通常是检查变量的赋值是否正确,或者是否从接口获取到了值,或者代码逻辑是否正确。好比能够移到图中这个逻辑判断后面,文件写入内容直接用字符串好比"subscribe",而后取消关注再订阅公众号,监测是否收到了订阅事件,若是文件里有subscribe字样就表示运行正常,不然就是出错了:

 

 

 

今天的课就先到这里,明天讲关键字回复以及……N多人关心的如何播放音乐!!!!