【玩转微信公众平台之九】 第一个功能:消息自己主动回复

这篇就来实现我们微信公众平台的第一个功能:消息自己主动回复。

-------------
尽管之前已经通过了前面的开发人员验证,可是我们的微信公众平台仍然不会自己主动回复消息。为什么呢?原因就在于自己主动回复消息的功能并没有“打开

还记得上篇我说过,在wechatCallbackapiTest这个类中有三个函数valid,responseMsg。checkSignature。valid和checkSignature主要是用来验证用的。而responseMsg则是用来回复消息的。


以下看下wx_sample.php 文档里的第8、9行

$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
第8行的意思是将wechatCallbackapiTest这个类由抽象转成实体化。什么意思呢?假设wechatCallbackapiTest是一个手机,尽管你想要用这个手机做非常多事,但前提是这个手机要是你的啊!无论这个手机再好,但它终究是抽象的,和你没关系的。那要怎么变成你的呢?非常easy。用new 来购买下,将这个手机买下来。等快递送手机上门时。你手里拿着手机才会有那种实实在在的感觉。


好了,既然手机已经拿到了。那肯定就能够使用手机里的功能了。眼下手机有两大功能。一个是验证接口,一个是回复消息。第9行这行代码就是调用valid()这个函数来实现接口验证,可是我们之前已经验证接口成功了(要不然你以为自己是怎么成为开发人员的?),所以以后都不须要验证接口,那么就将这行代码删掉或者凝视掉。例如以下:

$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
以下就要调用消息回复的函数,相似调用接口验证的写法。我们这样写:
$wechatObj->responseMsg();//调用回复消息的函数
既然回复消息的“开关”打开了,想必如今我们的公众平台应该能够自己主动回复消息了吧?在測试之前要先将上面改动的代码打包成zip文件,然后依照之前的方法上传到SAEserver上(假设忘了猛戳这里)。


1、这时候向你的公众平台发送随意文字。就能够返回信息
,例如以下:

这里的"Welcome to wechat world!"几个字是怎么来的呢?看代码48行是不是又这么一句:

$contentStr = "Welcome to wechat world!";
没错,仅仅要将我们要回复的文字放到$contentStr这个变量中,那么微信就会自己主动回复我们想要的文字。以下我将这句话换成“风一般的男纸”,代码例如以下:
$msgType = "text";
$contentStr = "风一般的男纸!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
上传到SAE上试试。例如以下图:

2、关键词自己主动回复。

在之前我们实用编辑模式实现过关键词自己主动回复。这次我们用开发模式来试试。
在上一篇的代码分析力我们知道第35行的 $keyword保存着client用户发来的文本信息,因此我们假设跟处理用户发来的关键词,那就要先处理$keyword。代码例如以下:

$msgType = "text";
if($keyword == "1")
{
	$contentStr = "博主ID:star特530";
}
else if($contentStr == "2")
{
	$contentStr = "博主爱好:唱歌、跳舞、看书";
}
else
{
	$contentStr = "能说人话吗?";
}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;

上面代码实现的功能是:当用户发“1”过来时。微信平台回复他“博主ID:star特530”。当用户发来“2”时,微信平台回复“博主爱好:唱歌、跳舞、看书”。当用户发来的消息不是"1"也不是"2"时,微信平台就回复”能说人话吗?“。
保存,上传到SAE,效果例如以下:

3、关注回复。所谓关注回复。就是当别人关注你时须要回复他的内容,这个我之前在编辑者模式的使用时有提到过。
在代码45行之前加入以下这么一段代码:

$type = $postObj->MsgType;//获取用户发来的消息类型(可能是文字。也可能是事件推送)
$customevent = $postObj->Event;//获取用户是关注还是取消关注
//当消息类型为事件推送。而且customevent 为 subscribe(关注)的情况时
if($type == "event" and $customevent == "subscribe")
{
	$msgType = "text";
	$contentStr = "感谢您的关注,回复“1”查看博主ID。回复“2”查看博主爱好";
	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
	echo $resultStr;
}

以下我又一次关注下公众号,測试例如以下:


最后补充一下,就是微信回复的消息,除了英文部分外,其它都是乱码。这是怎么回事呢?由于微信传输信息採用的是XML格式,而XML格式採用的是UTF-8编码。因此我们要将中文转码为UTF-8编码。方法例如以下:

在Dreamweaver中“改动”菜单 中选择 “页面属性”。然后选择“标题/编码”。在编码的下拉列表中选择最上端的Unicode(UTF-8)保存更新后就可以正常显示。

any question?

no!

OK!,that is all.

恩,本篇到此结束。


尊重原创,转载请注明来源:http://blog.csdn.net/star530/article/details/25916211
posted on 2017-04-25 08:23  ljbguanli  阅读(316)  评论(0编辑  收藏  举报