博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【玩转微信公众平台之十】 图文消息回复解说
阅读量:6578 次
发布时间:2019-06-24

本文共 4425 字,大约阅读时间需要 14 分钟。

我们回复用户的消息类型有多种。能够是简单的文字回复。也能够是音乐回复,或者是图文信息回复(不能仅仅回复一张图片。一定要夹带着文字)。

为什么本篇我就仅仅将图文回复呢?原因有多个:

1、音乐回复我没搞过。
2、文字回复前一篇说过。
3、图文回复个人认为偏难了点,所以重点讲;
4、博主又要凑博客篇数了...(没错。答对了)
--------------------------
1、在開始解说图文消息回复之前,我要补讲一些东西:在演示样例代码解说的那篇博客里,我以下这段代码跳过去了:

$textTpl = "
%s
0
";
$textTpl这货怎么看起来如此眼熟?没错,我们在回复用户的文字消息(
注意是文字消息)时,都会用到它,如以下这句:
$msgType = "text";$contentStr = "感谢您的关注,回复“1”查看博主ID;回复“2”查看博主爱好";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;

它的作用就是将我们要发给用户的文字消息合成为xml格式文本。这个文本里包括用户的OpenID,公众号的ID,系统时间,消息类型,回复的文字内容。那么,什么是xml格式呢?

XML是一种简单的数据存储语言,它要求每个标签都有開始和结束标记。能够进行嵌套,它里面的每个字段(就是每种信息)都必须以<>开头。</>结尾,例如以下:
博主ID
博主年龄
xml简单分析到这里,
以下回过头来继续看$textTpl这个变量
$textTpl = "
//这里表明是xml格式
//存储微信公众号的ID
//存储用户OpenID
%s
//存储系统时间
//存储消息类型
//存储要发送到消息内容
0
//是否星标(别管这个)
";
恩。上面的代码凝视还算比較好理解吧,
可能唯一不理解的就是[CDATA[%S]]这货是什么玩意。CDATA表示不转义,不理解也没事,主要还是看%s。它表示要转换成字符串的数据类型

翻译成白话文就是%s表示一个刚出生的婴儿。这个婴儿的类型的字符串类型(能够理解为女的),我们都知道婴儿刚出生时所有信息都是一片空白。没有姓名,没有户口之类的,这就是%s的含义,表示一片空白。等待你来开发

如以下这句:
<Content><![CDATA[%s]]></Content>
此时Content里是没有内容的,所以就须要我们来传送内容进入。怎么传呢?用
sprintf()这个函数,它的格式例如以下:
sprintf(baby,$name,$country,...);
第一个參数baby表示将要被传送内容的xml格式变量(婴儿),将$name传给baby中第一个出现%s的位置。将$country传给第2个出现%s的位置。以此类推

最后我们再回过头来看下这句:

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;
是不是知道怎么回事了?
$textTpl就是xml格式变量,接下来将$fromUsername传给textTpl。然后是tuUsername,然后...,最后将全新的textTpl传给resultStr这个变量。然后发送给用户。
2、以下进入正题。怎样回复图文消息。

以下是回复图文消息的一些格式:

        

也能够点击这个链接查看:
上面描写叙述的非常具体了,
这里须要注意单图的时候会显示描写叙述(Descripition),而多图不会显示描写叙述。第一张为item大图,像素为640x320,以下的item图片为小图。像素为80x80,Url为图片的链接。所以在这之前我们须要事先将图片上面到SAEserver上(要不然你图片的链接哪来?)。
以下我先搞个回复单图的模式,先配置图文消息的xml,相似文本消息的$textTpl。

$imageTpl = "
%s
//消息类型为news(图文)
1
//图文数量为1(单图文)
//第一张图文消息
<![CDATA[%s]]> //标题
//描写叙述为空(懒得描写叙述)
//打开前的图片链接地址
//点击进入后显示的图片链接地址
";
好了,图文消息的回复模板已经搞好了。接下来就是将图片消息的标题。图片等信息填满了,代码例如以下:
$title = "哎呦我去,又下雨了";//标题$PicUrl = "http://1.star530.sinaapp.com/weather.jpg";//图片链接$Url = "http://1.star530.sinaapp.com/weather.jpg";//打开后的图片链接$resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $title, $PicUrl,$Url);echo $resultStr;
执行效果例如以下:
恩,就是这样,完整的代码例如以下:
public function responseMsg()    {		//get post data, May be due to the different environments		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];      	//extract post data		if (!empty($postStr)){                              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);                $fromUsername = $postObj->FromUserName;                $toUsername = $postObj->ToUserName;                $keyword = trim($postObj->Content);                $time = time();                $textTpl = "
%s
0
"; $imageTpl = "
%s
//消息类型为news(图文)
1
//图文数量为1(单图文)
//第一张图文消息
<![CDATA[%s]]> //标题
//描写叙述为空(懒得描写叙述)
//打开前的图片链接地址
//点击进入后显示的图片链接地址
"; if(!empty( $keyword )) { $title = "哎呦我去。又下雨了";//标题 $PicUrl = "http://1.star530.sinaapp.com/weather.jpg";//图片链接 $Url = "http://1.star530.sinaapp.com/weather.jpg";//打开后的图片链接 $resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $title, $PicUrl,$Url); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } }}

好了,就这样。

本来是安排一周的时间将微信这个系列教程写完的,结果由于各种原因仅仅完毕了十篇。所以呢,就先写到这吧。等下次有抽空再继续吧...

后会有期~~

尊重原创。转载请注明来源:
你可能感兴趣的文章
Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同
查看>>
iOS7隐藏状态栏 status Bar
查看>>
Android中View绘制流程以及invalidate()等相关方法分析
查看>>
安装ESXI 5.5卡在LSI_MR3.V00解决方案
查看>>
在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)
查看>>
centos 7 卸载 mariadb 的正确命令
查看>>
NSString 的常用操作
查看>>
poj 1274The Perfect Stall
查看>>
[Jmeter系列]Jmeter源码编译步骤(转)
查看>>
关于Windows API、CRT和STL二三事
查看>>
WordPress建站 新手入门
查看>>
让nodeJS支持ES6的词法----babel的安装和使用
查看>>
深入理解java异常处理机制
查看>>
python【1】-基础知识
查看>>
org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER
查看>>
Android Canvas drawText实现中文垂直居中
查看>>
PHP多进程编程(2):管道通信
查看>>
【HTML5】Canvas和SVG的区别
查看>>
李洪强经典面试题8
查看>>
wireshark怎么抓包、wireshark抓包详细图文教程
查看>>