欢迎各位兄弟 发布技术文章
这里的技术是共享的
我使用的是laravel5.2, 早期版本可能不适合下面的方法。
在routes.php写下接收微信服务器post请求的路径:
Route::post('wechatmp', 'WechatController@responseMsg');
在App\Http\Middleware\VerifyCsrfToken里,将该请求路径去除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;
}
}
后面的微信公众平台开发者文档都有。
小礼物走一走,来简书关注我
这个…有点没明白。所以你的坑是csrf token?
我现在就遇到了这个问题。但按你的方法加了限制也不起作用呢。
非常谢谢你,这个坑还真没发现;这回正好用到laravel框架开发了,拿过之前封装好的微信类就是不能用,原来的项目没问题;研究了很长时间还是没发现;今天正好看到你发的文章,结果问题解决了,谢谢!