熟悉阿北的夥計知道最近我搞了一個專門針對於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'=>'']]]]);