Laravel+easywechat 開發微信公眾號

JasonZhang發表於2019-01-25

1.在laravel中使用easywechat

composer require "overtrue/laravel-wechat:~4.0"

2.建立配置檔案:

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

3.修改應用根目錄下的 config/wechat.php

 /*
     * 公眾號
     */
    'official_account' => [
        'default' => [
            'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'),         // AppID
            'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'),    // AppSecret
            'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'token'),           // Token
            'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''),                 // EncodingAESKey

            /*
             * OAuth 配置
             *
             * scopes:公眾平臺(snsapi_userinfo / snsapi_base),開放平臺:snsapi_login
             * callback:OAuth授權完成後的回撥頁地址(如果使用中介軟體,則隨便填寫。。。)
             */
            // 'oauth' => [
            //     'scopes'   => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),
            //     'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
            // ],
        ],
    ],

4.定義路由

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

一定是 Route::any, 因為微信服務端認證的時候是 GET, 接收使用者訊息時是 POST !

5.建立控制器 WechatController

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();
    }
}

6.在中介軟體 App\Http\Middleware\VerifyCsrfToken排除微信相關的路由

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        // 跳過csrf
        'wechat',
    ];
}

然後將這個程式碼上傳到雲伺服器(注:伺服器一定要在公網中(或透過某種工具使自己的電腦對映到公網上),否則微信無法驗證)
預設配置好虛擬主機,(必須用80埠(http://)/443埠(https://)),指向:專案名/public
7.在公眾號後臺修改配置資訊
file
Token必須和我們配置檔案中寫的token一致,EncodingAESKey是可選引數(相容模式下必填),配置我們點選啟用就基本配置完成了

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章