熟悉阿北的伙计知道最近我搞了一个专门针对于yii2的微信SDK,已经开源, github,也欢迎你们给我加个星星哈。
当用户和公众号发生互动(好比输入文本、点击菜单等),微信容许咱们接收这些信息并给予回复,固然咱们须要先配置并提供用于接收的url,这就是服务端。php
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;** 不然微信服务器给咱们服务器推送的消息会被挡住。git
你可能对上面还不是太懂,不要紧,咱们一点点说。github
$message是一个数组,它表明用户给公众号发的消息(文本、语音、视频等等),咱们能够根据$message数组的MsgType值来判断具体类型,这里有一个特殊的类型就是event,针对于event类型的消息还须要经过Event来区别。数组
关于$message的消息的类型能够经过下面两个连接查看服务器
如今咱们已经能收到用户发送的消息了,可是微信规定咱们还要给用户一个响应或SUCCESS,这部分逻辑咱们能够写到以下代码中微信
$server->setMessageHandler(function($message) { return "欢迎你"; });
回复的类型也有不少种,不过你不用担忧,这些yii2-wx已经帮你处理好了。yii2
假设咱们如今要回复一个文本,能够以下代码app
use abei2017\wx\mp\message\Text; $server->setMessageHandler(function($message) { return (new Text(['props'=>['Content'=>'欢迎你'])) });
考虑到回复文本消息出镜率很是高,所以当你回复文本类型时,你还有一种更加简洁的方式yii
$server->setMessageHandler(function($message) { return "欢迎你"; });
是的,yii2-wx能够判断是否为字符串而且自动初始化Text类对象。ide
咱们能够给用户回复六种类型的消息,依次以下:
文本类型
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'=>'']]]]);