【微信公众平台】 之 消息自动回复

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

虽然之前已经通过了前面的开发者验证,但是我们的微信公众平台仍然不会自动回复消息。

为什么呢?原因就在于自动回复消息的功能并没有“打开”

在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();//调用回复消息的函数

既然回复消息的“开关”打开了,想必现在我们的公众平台应该可以自动回复消息了吧?在测试之前要先将上面修改的代码文件,然后上传到服务器上。

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;
}

下面我重新关注下公众号,测试如下:

 

【微信公众平台】 之 消息自动回复

 

【微信公众平台】 之 消息自动回复

上一篇:微信关键字自动回复功能实现


下一篇:用Python快速实现一个垃圾分类APP|附带微信小程序