php专区

 首页 > php专区 > PHP应用 > 开放平台 > 【玩转微信公众平台之十】 图文消息回复讲解

【玩转微信公众平台之十】 图文消息回复讲解

分享到:
【字体:
导读:
          我们回复用户的消息类型有多种,可以是简单的文字回复,也可以是音乐回复,或者是图文信息回复(不能只回复一张图片,一定要夹带着文字)。为什么本篇我就只将图文回复呢?原...

我们回复用户的消息类型有多种,可以是简单的文字回复,也可以是音乐回复,或者是图文信息回复(不能只回复一张图片,一定要夹带着文字)。为什么本篇我就只将图文回复呢?原因有多个:
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里是没有内容的,所以就需要我们来传送内容进入,怎么传呢?用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为图片的链接,所以在这之前我们需要事先将图片上面到SAE服务器上(要不然你图片的链接哪来?)。
下面我先搞个回复单图的模式,先配置图文消息的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;
        }
    }
}

好了,就这样。

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

后会有期~~

尊重原创,http://blog.csdn.net/star530/article/details/26139129
分享到:
微信公共服务平台开发(.Net 的实现)9--...
 今天我们来共同学习一下微信公共服务平台中一个重要内容---二维码扫描。众所周知二维码目前应用范围很广,在这里不再叙述背景了,但是值得一提的是目前大家手机上面应用的二维码扫描工具是支持的都是QR码和PDF417码标准,这就是为什么你用各种扫码工具扫出来的都一样的原因,因为大家都使用了同样的标准。       在...
.net mvc 微信开发笔记(六)------上传文...
疯了,不知道是CSDN抽风还是我忘了保存,昨晚写的博今天竟然没了。。看来又要重码一遍。。 微信可以回复视频给用户,也可以给用户广播图文消息,而对应的图片、视频、语音等都需要用户提前上传到微信服务器。上传成功后,微信会返回给开发者一个Media_id,可以通过media_id来调用该文件。 http请求方式: POST/FORM http:/...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……