欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

用laravel搭一个微信公众号后台的坑

我使用的是laravel5.2, 早期版本可能不适合下面的方法。

  1. 在routes.php写下接收微信服务器post请求的路径:

Route::post('wechatmp', 'WechatController@responseMsg');
  1. 在App\Http\Middleware\VerifyCsrfToken里,将该请求路径去除CSRF TOKEN的保护,官网说明

class VerifyCsrfToken extends BaseVerifier
{
  
    protected $except = [
       'wechatmp', 
    ];
}

在这里补充一下,csrf Token是一种laravel自身提供的请求保卫机制。必须符合csrf token的验证,对方发来的post请求才会被接受,常用在laravel的ajax请求。当然如果我们真的要开放某个接口,就使用上面的方式,把这个接口对应的csrf token关掉。

  1. 按照你熟悉的方式,在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;
        }
    }

后面的微信公众平台开发者文档都有。

             

小礼物走一走,来简书关注我

赞赏支持
                       日记本        
    Web note ad 1    
    登录 后发表评论
     
    该叶无法找到  
    2楼 · 2016.07.07 22:16

    这个…有点没明白。所以你的坑是csrf token?


    @该叶无法找到 是我坑了自己...没好好读文档...


    2016.07.08 13:59 回复  


    @stois :flushed:你在正文里说明确一点,可以把csrf的作用也讲讲。我给收了,帮助更多的人


    2016.07.08 14:02 回复  
     
    voidlh  
    3楼 · 2016.10.31 04:15

    我现在就遇到了这个问题。但按你的方法加了限制也不起作用呢。


    @voidlh 哪一步出了问题?还是不能发post?


    2016.11.01 10:29 回复  


    @stois 我的也不能进入到POST中,,无法得到微信服务器传来的值


    2016.12.10 15:44 回复  
     
    追逐明天_a346  
    4楼 · 2017.02.24 16:36

    非常谢谢你,这个坑还真没发现;这回正好用到laravel框架开发了,拿过之前封装好的微信类就是不能用,原来的项目没问题;研究了很长时间还是没发现;今天正好看到你发的文章,结果问题解决了,谢谢!



    作者:stois
    链接:https://www.jianshu.com/p/542e8ff8bd37
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


    来自  https://www.jianshu.com/p/542e8ff8bd37

    普通分类: