我使用的是laravel5.2, 早期版本可能不适合下面的方法。
- 在routes.php写下接收微信服务器post请求的路径:
Route::post('wechatmp', 'WechatController@responseMsg');
-
在AppHttpMiddlewareVerifyCsrfToken里,将该请求路径去除CSRF TOKEN的保护,官网说明:
class VerifyCsrfToken extends BaseVerifier { protected $except = [ 'wechatmp', ]; }
在这里补充一下,csrf Token是一种laravel自身提供的请求保卫机制。必须符合csrf token的验证,对方发来的post请求才会被接受,常用在laravel的ajax请求。当然如果我们真的要开放某个接口,就使用上面的方式,把这个接口对应的csrf token关掉。
-
按照你熟悉的方式,在WechatController里写responseMsg:
-
public function responseMsg(Request $request){ $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); // $this->test($RX_TYPE) ; switch ($RX_TYPE) { case "text": $resultStr = $this->receiveText($postObj); break; case "image": $resultStr = $this->receiveImage($postObj); break ; case "voice": $resultStr = $this->receiveVoice($postObj) ; break ; case "event": $resultStr = $this->receiveEvent($postObj); break; default: $resultStr = "unknow msg type: ".$RX_TYPE; break; } echo $resultStr; }else { echo ""; exit; } }
后面的微信公众平台开发者文档都有。
-
- https://blog.csdn.net/tianlebest/article/details/60667259