yii2-wx / 微信的服务端验证

熟悉阿北的伙计知道最近我搞了一个专门针对于yii2的微信SDK,已经开源, github,也欢迎大家给我加个星星哈。

当用户和公众号发生互动(比如输入文本、点击菜单等),微信允许我们接收这些信息并给予回复,当然我们需要先配置并提供用于接收的url,这就是服务端。

use abei2017\wx\Application;

$config = [];
$app = new Application(['conf'=>$config);
$server = $app->driver("mp.server");

$server->setMessageHandler(function($message) {
    return "欢迎你";
});

$response = $server->serve();
return $response;

上面的代码接收用户传过来的$message并给予回复一句"欢迎你",在yii2中还要关掉csrf验证,因此在接口控制器中要有如下设置 **public $enableCsrfValidation = false;** 否则微信服务器给我们服务器推送的消息会被挡住。

你可能对上面还不是太懂,没关系,我们一点点说。

$message

$message是一个数组,它代表用户给公众号发的消息(文本、语音、视频等等),我们可以根据$message数组的MsgType值来判断具体类型,这里有一个特殊的类型就是event,针对于event类型的消息还需要通过Event来区别。

关于$message的消息的类型可以通过下面两个链接查看

  • https://mp.weixin.qq.com/wiki...
  • https://mp.weixin.qq.com/wiki...

回复

现在我们已经能收到用户发送的消息了,但是微信规定我们还要给用户一个响应或SUCCESS,这部分逻辑我们可以写到如下代码中

$server->setMessageHandler(function($message) {
    return "欢迎你";
});

回复的类型也有很多种,不过你不用担心,这些yii2-wx已经帮你处理好了。

  • Image
  • Music
  • News
  • Text
  • Transfer
  • Video
  • Voice

假设我们现在要回复一个文本,可以如下代码

use abei2017\wx\mp\message\Text;
$server->setMessageHandler(function($message) {
    return (new Text(['props'=>['Content'=>'欢迎你']))
});

考虑到回复文本消息出镜率非常高,因此当你回复文本类型时,你还有一种更加简洁的方式

$server->setMessageHandler(function($message) {
    return "欢迎你";
});

是的,yii2-wx可以判断是否为字符串并且自动初始化Text类对象。

回复消息类型归总

我们可以给用户回复六种类型的消息,依次如下:

文本类型

use abei2017\wx\mp\message\Text;
$msg = new Text(['props'=>['Content'=>'欢迎你']);

图片类型

use abei2017\wx\mp\message\Image;
$msg = new Image(['props'=>['MediaId'=>'xxxx']);

语音类型

use abei2017\wx\mp\message\Voice;
$msg = new Voice(['props'=>['MediaId'=>'xxxx']);

视频类型

use abei2017\wx\mp\message\Video;
$msg = new Video(['props'=>['MediaId'=>'xxxx','Title'=>'标题(选填)','Description'=>'简介(选填)']);

音乐类型

use abei2017\wx\mp\message\Music;
$msg = new Music(['props'=>['ThumbMediaId'=>'xxx','Title'=>'标题(选填)','Description'=>'简介(选填)','MusicURL'=>'音乐链接(选填)','HQMusicUrl'=>'高质量音乐链接(选填)']]);

图文类型

use abei2017\wx\mp\message\News;
$msg = new News(['props'=>['ArticleCount'=>1,'Articles'=>[['Title'=>'','Description'=>'','PicUrl'=>'','Url'=>''],['Title'=>'','Description'=>'','PicUrl'=>'','Url'=>'']]]]);

你可能感兴趣的:(yii2,微信,yii2-wx,github)