Keywords: WeChat public platform Development modelGraphic and text messages
Author: Fangbei Studio
Original text: http://www.cnblogs .com/txw1958/p/weixin-97-news.html
In this WeChat public platform development tutorial, we will introduce how to flexibly use the image and text messaging function. We will only introduce graphic messages in passive reply messages. The graphic messages sent by customer service messages and advanced group messaging interfaces are basically the same as the graphic messages introduced in this article.
This article is divided into the following four parts:
In the WeChat public platform message, the XML structure of the graphic message in the passive response message is as follows.
<span><</span><span>xml</span><span>></span> <span><</span><span>ToUserName</span><span>></span><span><![CDATA[</span><span>toUser</span><span>]]></span><span></</span><span>ToUserName</span><span>></span> <span><</span><span>FromUserName</span><span>></span><span><![CDATA[</span><span>fromUser</span><span>]]></span><span></</span><span>FromUserName</span><span>></span> <span><</span><span>CreateTime</span><span>></span>12345678<span></</span><span>CreateTime</span><span>></span> <span><</span><span>MsgType</span><span>></span><span><![CDATA[</span><span>news</span><span>]]></span><span></</span><span>MsgType</span><span>></span> <span><</span><span>ArticleCount</span><span>></span>2<span></</span><span>ArticleCount</span><span>></span> <span><</span><span>Articles</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>Title</span><span>></span><span><![CDATA[</span><span>title1</span><span>]]></span><span></</span><span>Title</span><span>></span> <span><</span><span>Description</span><span>></span><span><![CDATA[</span><span>description1</span><span>]]></span><span></</span><span>Description</span><span>></span> <span><</span><span>PicUrl</span><span>></span><span><![CDATA[</span><span>picurl</span><span>]]></span><span></</span><span>PicUrl</span><span>></span> <span><</span><span>Url</span><span>></span><span><![CDATA[</span><span>url</span><span>]]></span><span></</span><span>Url</span><span>></span> <span></</span><span>item</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>Title</span><span>></span><span><![CDATA[</span><span>title</span><span>]]></span><span></</span><span>Title</span><span>></span> <span><</span><span>Description</span><span>></span><span><![CDATA[</span><span>description</span><span>]]></span><span></</span><span>Description</span><span>></span> <span><</span><span>PicUrl</span><span>></span><span><![CDATA[</span><span>picurl</span><span>]]></span><span></</span><span>PicUrl</span><span>></span> <span><</span><span>Url</span><span>></span><span><![CDATA[</span><span>url</span><span>]]></span><span></</span><span>Url</span><span>></span> <span></</span><span>item</span><span>></span> <span></</span><span>Articles</span><span>></span> <span></</span><span>xml</span><span>></span>
The parameter description is as follows.
Parameter | Is it necessary | Explanation | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ToUserName | Yes | Receiver account (received OpenID) | |||||||||||||||||||||||||||||||||
FromUserName | Yes |
|
|||||||||||||||||||||||||||||||||
CreateTime | Yes | Message creation time (integer) | |||||||||||||||||||||||||||||||||
MsgType | Yes | news | |||||||||||||||||||||||||||||||||
ArticleCount | Yes | The number of graphic and text messages is limited to 10 messages | |||||||||||||||||||||||||||||||||
Articles | Yes | For multiple graphic and text messages, the first item is a large image by default. Note that if the number of graphic and text messages exceeds 10, there will be no response | |||||||||||||||||||||||||||||||||
Title | No | Picture and text message title | |||||||||||||||||||||||||||||||||
Description | No | Picture and text message description | |||||||||||||||||||||||||||||||||
PicUrl | No | Image link supports JPG and PNG formats. The best effect is 360*200 for large images and 200*200 for small images | |||||||||||||||||||||||||||||||||
Url | No | Click on the graphic message to jump to the link |
从中可以知道,图文消息的类型为news,图文消息个数最大为10(注意在编辑模式中,可以设置最大条数为8)。超过10条,微信将不再响应。
多图文消息中会有大图和小图的区别,第一个item中的图片为大图,其他item中的图片为小图。
根据上述定义,我们定义图文消息的回复代码实现如下:
<span>//</span><span>回复图文消息</span> <span>private</span> <span>function</span> transmitNews(<span>$object</span>, <span>$newsArray</span><span>) { </span><span>if</span>(!<span>is_array</span>(<span>$newsArray</span><span>)){ </span><span>return</span><span>; } </span><span>$itemTpl</span> = "<span> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </span>"<span>; </span><span>$item_str</span> = ""<span>; </span><span>foreach</span> (<span>$newsArray</span> <span>as</span> <span>$item</span><span>){ </span><span>$item_str</span> .= <span>sprintf</span>(<span>$itemTpl</span>, <span>$item</span>['Title'], <span>$item</span>['Description'], <span>$item</span>['PicUrl'], <span>$item</span>['Url'<span>]); } </span><span>$xmlTpl</span> = "<span><xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> </span><span>$item_str</span><span></Articles> </xml></span>"<span>; </span><span>$result</span> = <span>sprintf</span>(<span>$xmlTpl</span>, <span>$object</span>->FromUserName, <span>$object</span>->ToUserName, <span>time</span>(), <span>count</span>(<span>$newsArray</span><span>)); </span><span>return</span> <span>$result</span><span>; }</span>
上述代码中,先将各item连接形成item_str,再将item_str赋值到xml模板中,组装一个图文消息。组装时,将object中的发送、接收方互换位置,计算出图文项的个数。
而在构造图文消息并使用图文回复的代码如下所示
<span>if</span> (<span>strstr</span>(<span>$keyword</span>, "单图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); }</span><span>else</span> <span>if</span> (<span>strstr</span>(<span>$keyword</span>, "图文") || <span>strstr</span>(<span>$keyword</span>, "多图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0]['PicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); }</span>
一个完整的体验代码可参考 微信公众平台开发接口PHP SDK完整版
图文消息从item的个数上来分,可以分为单图文消息和多图文消息,其中单图文消息中item数为1,多图文消息中item数从2~10都包括。
虽然图文消息只有两种类型,但其实可以通过设置不同的参数构造出更多的展示效果。
单图文消息
单图文消息就是一个图文消息。
下面代码定义一个基本的图文消息
<span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title" =>"大学英语四六级成绩查询", "Description" =>"点击图片进入", "PicUrl" =>"http://365jia.cn/uploads/13/0301/5130c2ff93618.jpg", "Url" =>"http://israel.sinaapp.com/cet/index.php?openid=".<span>$object</span>->FromUserName);
它的回复效果如图所示。其特点是标题粗体显示,内容字体则为灰色显示,如果有图片,则同时显示日期。
再看一下不定义图片和链接时的情况,代码如下
<span>$aqiArray</span> = <span>array</span><span>(); </span><span>$aqiArray</span>[] = <span>array</span>("Title" =><span>$cityAir</span>[0]['area']."空气质量", "Description" =>"空气质量指数(AQI):".<span>$cityAir</span>[0]['aqi']."\n". "空气质量等级:".<span>$cityAir</span>[0]['quality']."\n". "细颗粒物(PM2.5):".<span>$cityAir</span>[0]['pm2_5']."\n". "可吸入颗粒物(PM10):".<span>$cityAir</span>[0]['pm10']."\n". "一氧化碳(CO):".<span>$cityAir</span>[0]['co']."\n". "二氧化氮(NO2):".<span>$cityAir</span>[0]['no2']."\n". "二氧化硫(SO2):".<span>$cityAir</span>[0]['so2']."\n". "臭氧(O3):".<span>$cityAir</span>[0]['o3']."\n". "更新时间:".<span>preg_replace</span>("/([a-zA-Z])/i", " ", <span>$cityAir</span>[0]['time_point'<span>]); </span>"PicUrl" =>"", "Url" =>"");
其效果如下所示。
可以看到,这时,由于没有图片,所以也不显示日期了,另外没有带链接,所以“查看全文”也不显示了。
多图文
多图文消息一个最大的特点就是:描述内容不会在返回中显示,所以没有必要定义描述了。
下面是一个基本的多图文消息的定义
<span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
其实现效果如下
如果觉得首图太大,占地方,也可以不填写。
比如这样的代码
<span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title" =>"微信公众平台开发教程", "Description" =>"", "PicUrl" =>"", "Url" =>""<span>); </span><span>$content</span>[] = <span>array</span>("Title" =>"【基础入门】免费\n1. 申请服务器资源\n2. 启用开发模式\n3. 消息类型详解\n4. 获取接收消息\n5. 回复不同消息", "Description" =>"", "PicUrl" =>"http://e.hiphotos.bdimg.com/wisegame/pic/item/9e1f4134970a304e1e398c62d1c8a786c9175c0a.jpg", "Url" =>"http://m.cnblogs.com/99079/3153567.html?full=1"<span>); </span><span>$content</span>[] = <span>array</span>("Title" =>"【初级教程】双11六折促销\n1.小黄鸡机器人\n2.英语类公众账号开发", "Description" =>"", "PicUrl" =>"http://g.hiphotos.bdimg.com/wisegame/pic/item/3166d0160924ab186196512537fae6cd7b890b24.jpg", "Url" =>"http://israel.duapp.com/taobao/index.php?id=1");
其效果如下所示
$content = array(); $content[] = array("Title" =>"欢迎关注方倍工作室","Description" =>"", "PicUrl" =>"", "Url" =>""); $content[] = array("Title" =>"【1】新闻 天气 空气 股票 彩票 星座\n". "【2】快递 人品 算命 解梦 附近 苹果\n". "【3】公交 火车 汽车 航班 路况 违章\n". "【4】翻译 百科 双语 听力 成语 历史\n". "【5】团购 充值 菜谱 贺卡 景点 冬吴\n". "【6】情侣相 夫妻相 亲子相 女人味\n". "【7】相册 游戏 笑话 答题 点歌 树洞\n". "【8】微社区 四六级 华强北 世界杯\n\n". "更多精彩,即将亮相,敬请期待!";, "Description" =>"", "PicUrl" =>"", "Url" =>""); $content[] = array("Title" =>"回复对应数字查看使用方法\n发送 0 返回本菜单", "Description" =>"", "PicUrl" =>"", "Url" =>"");
其效果如下所示
因为图文消息有更好的视觉效果,很多朋友都想要实现图文消息的回复。主要有以下几种情况
1. 关注时回复图文消息
放到订阅事件下就行了,代码如下
<span>//</span><span>接收事件消息</span> <span>private</span> <span>function</span> receiveEvent(<span>$object</span><span>) { </span><span>$content</span> = ""<span>; </span><span>switch</span> (<span>$object</span>-><span>Event) { </span><span>case</span> "subscribe": <span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>break</span><span>; </span><span>case</span> "unsubscribe": <span>$content</span> = "取消关注"<span>; </span><span>break</span><span>; } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); } </span><span>return</span> <span>$result</span><span>; }</span>
2. 发送关键字回复图文消息
通过判断关键字既可实现,
<span>//</span><span>接收文本消息</span> <span>private</span> <span>function</span> receiveText(<span>$object</span><span>) { </span><span>$keyword</span> = <span>trim</span>(<span>$object</span>-><span>Content); </span><span>if</span> (<span>strstr</span>(<span>$keyword</span>, "单图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); }</span><span>else</span> <span>if</span> (<span>strstr</span>(<span>$keyword</span>, "图文") || <span>strstr</span>(<span>$keyword</span>, "多图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); }</span><span>else</span><span>{ </span><span>$content</span> = <span>date</span>("Y-m-d H:i:s",<span>time</span>())."\n技术支持 方倍工作室"<span>; } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0]['PicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); } }</span>
3. 点击菜单时回复图文消息
在菜单点击事件中响应即可
<span>//</span><span>接收事件消息</span> <span>private</span> <span>function</span> receiveEvent(<span>$object</span><span>) { </span><span>$content</span> = ""<span>; </span><span>switch</span> (<span>$object</span>-><span>Event) { </span><span>case</span> "subscribe": <span>$content</span> = "欢迎关注方倍工作室 "<span>; </span><span>break</span><span>; </span><span>case</span> "CLICK": <span>switch</span> (<span>$object</span>-><span>EventKey) { </span><span>case</span> "COMPANY": <span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>break</span><span>; </span><span>default</span>: <span>$content</span> = "点击菜单:".<span>$object</span>-><span>EventKey; </span><span>break</span><span>; } </span><span>break</span><span>; } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); } </span><span>return</span> <span>$result</span><span>; }</span>
4. 回复多个图文消息
由于回复消息一次只能回复一条,因此要回复多个图文消息,就需要使用其他接口。这需要已经认证的服务号才能拥有权限。
可以回复图文消息的接口有客服接口及高级群发接口,如果被动回复不够,就可使用客服接口来发送。
===========================================================
How to follow Fangbei Studio’s WeChat public platform account:
1. WeChat address book-add friend-search public account-search for “Fangbei Studio”
2. WeChat address book-add friend-search Number - enter "pondbaystudio"
3. Use WeChat to scan the QR code below