用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;
        }
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • iphone 和 ipad都有 1.modal: 弹出一个view,只能在该view上操作,而不能切换到其他vie...
    我真不是他舅阅读 496评论 0 1
  • 今天去市场买菜很开心
    __0650阅读 129评论 0 0
  • 烟雨随声,我听见了声,烟雨而至。我渴望行走,却不愿奔跑。我渴望漫步在 的雨巷中,走走停停,倚头随想。浮生于此,...
    Noe阅读 407评论 0 0
  • Java 基本语法 2.2 Java 关键字 "const"和"goto"无实际意义 Java 语言基础 2.4....
    我是阿喵酱阅读 333评论 0 1