laravel结合easyWeChat的使用

工欲善其事必先利其器

  • 框架要求
    Laravel>= 5.1

  • 安装
    Laravel < 5.8
    composer require “overtrue/laravel-wechat:~4.0”
    Laravel >= 5.8
    composer require “overtrue/laravel-wechat:~5.0”

配置

Laravel 应用
1.在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 + 无需手动注册)

'providers' => [
    // ...
    Overtrue\LaravelWeChat\ServiceProvider::class,
],

'aliases' => [
    // ...
    'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class, ],

2.创建配置文件:

php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"

3.修改应用根目录下的 config/wechat.php 中对应的参数即可。
4.每个模块基本都支持多账号,默认为 default。

使用

在中间件 App\Http\Middleware\VerifyCsrfToken 排除微信相关的路由,如:

protected $except = [
    // ...
    'wechat',
];

下面以接收普通消息为例写一个例子:
假设您的域名为 overtrue.me 那么请登录微信公众平台 “开发者中心” 修改 “URL(服务器配置)” 为: http://overtrue.me/wechat。

路由:

Route::any('/wechat', 'WeChatController@serve');

注意:一定是 Route::any, 因为微信服务端认证的时候是 GET, 接收用户消息时是 POST !

注意:在laravel中有token验证,所以有两种方法
1.在将csrf验证关闭(不安全,不推荐) 详情:http://www.cnblogs.com/HD/p/4555369.html
2.我们在项目中使用:
在中间件VerifyCsrfToken.php中修改内容为:

protected function tokensMatch($request)
{
    // If request is an ajax request, then check to see if token matches token provider in
    // the header. This way, we can use CSRF protection in ajax requests also.
    $token = $request->ajax() ? $request->header('X-CSRF-TOKEN') : $request->input('_token');
    return $request->session()->token() == $token;
}

public function handle($request,\Closure $next){
    //todo:需要在添加了登录验证之后,取消
    if($request->method() == 'POST')
    {
        return $next($request);
    }

    return parent::handle($request,$next); }

然后在vue中的bootstrap.js中的引入axios中添加

window.axios.defaults.headers.common = {
    'X-CSRF-TOKEN': document.querySelector('meta[name="X-CSRF-TOKEN"]').content,
    'X-Requested-With': 'XMLHttpRequest'
};

在index.blade.php中添加

<meta name="X-CSRF-TOKEN" content="{{csrf_token()}}">

关于laravel 的 csrf token的更多详情,请看:http://www.cnblogs.com/zhuchenglin/p/7723997.html

以上基本可以配置完成,主要在于laravel的token验证。

创建控制器 WeChatController:

<?php

namespace App\Http\Controllers;

use Log;

class WeChatController extends Controller
{

    /**
     * 处理微信的请求消息
     *
     * @return string
     */
    public function serve()
    {
        Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志

        $app = app('wechat.official_account');
        $app->server->push(function($message){
            return "欢迎关注 overtrue!";
        });

        return $app->server->serve();
    }
}

然后将这个代码上传到云服务器(注:服务器一定要在公网中(或通过某种工具使自己的电脑映射到公网上),否则微信无法验证)
默认配置好虚拟主机,(必须用80端口(http://)/443端口(https://)),指向:项目名/public
然后打开微信公众号后台(我用测试账号来说明问题,如果是真正的服务号的话,要开启开发者模式)

填写的url要能找到你那个控制器中的serve()方法

Token要和上面的配置文件中填写的一样

如果按照上面的步骤一步一步来的话,应该可以保存成功(即初步验证成功)

(0)

相关推荐