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

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

-------------
虽然之前已经通过了前面的开发者验证,但是我们的微信公众平台仍然不会自动回复消息。为什么呢? 原因就在于自动回复消息的功能并没有“打开。还记得上篇我说过, 在wechatCallbackapiTest这个类中有三个函数valid,responseMsg,checkSignature,valid和checkSignature主要是用来验证用的,而responseMsg则是用来回复消息的。
下面看下 wx_sample.php 文档里的第8、9行
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
第8行的意思是将wechatCallbackapiTest这个类由抽象转成实体化,什么意思呢? 假设wechatCallbackapiTest是一个手机,虽然你想要用这个手机做很多事,但前提是这个手机要是你的啊!不管这个手机再好,但它终究是抽象的,和你没关系的。那要怎么变成你的呢?很简单,用new 来购买下,将这个手机买下来。等快递送手机上门时,你手里拿着手机才会有那种实实在在的感觉。
好了,既然手机已经拿到了,那肯定就可以使用手机里的功能了,目前手机有两大功能,一个是验证接口,一个是回复消息。 第9行这行代码就是调用valid()这个函数来实现接口验证,但是我们之前已经验证接口成功了(要不然你以为自己是怎么成为开发者的?),所以以后都不需要验证接口,那么就将这行代码删掉或者注释掉,如下:
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
下面就要调用消息回复的函数,类似调用接口验证的写法,我们这样写:
$wechatObj->responseMsg();//调用回复消息的函数
既然回复消息的“开关”打开了,想必现在我们的公众平台应该可以自动回复消息了吧? 在测试之前要先将上面修改的代码打包成zip文件,然后按照之前的方法上传到SAE服务器上(如果忘了猛戳这里)。
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保存着客户端用户发来的文本信息,因此我们如果跟处理用户发来的关键词,那就要先处理$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
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值