这篇就来实现我们微信公众平台的第一个功能:消息自动回复。
虽然之前已经通过了前面的开发者验证,但是我们的微信公众平台仍然不会自动回复消息。
为什么呢?原因就在于自动回复消息的功能并没有“打开”。
在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:特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; }
下面我重新关注下公众号,测试如下: