說明:本文介紹的教程是基于Laravel5.4版本,Wechat3.0.*版本組件
1. 安裝組件
composer require "overtrue/laravel-wechat:~3.0"
注意:如果你用了 laravel-debugbar,請禁用或者關掉,否則這模塊別想正常使用!!!
2. 配置
Laravel應用
1 .注冊 ServiceProvider:
Overtrue\LaravelWechat\ServiceProvider::class,
- 創建配置文件:
php artisan vendor:publish --provider="Overtrue\LaravelWechat\ServiceProvider"
- 請修改應用根目錄下的 config/wechat.php 中對應的項即可;
- (可選)添加外觀(門面)到 config/app.php 中的 aliases 部分:
'EasyWeChat' => Overtrue\LaravelWechat\Facade::class,
Lumen應用
- 在 bootstrap/app.php 中 82 行左右:
$app->register(Overtrue\LaravelWechat\ServiceProvider::class);
- ENV 中支持以下配置:
WECHAT_APPID
WECHAT_SECRET
WECHAT_TOKEN
WECHAT_AES_KEY
WECHAT_LOG_LEVEL
WECHAT_LOG_FILE
WECHAT_OAUTH_SCOPES
WECHAT_OAUTH_CALLBACK
WECHAT_PAYMENT_MERCHANT_ID
WECHAT_PAYMENT_KEY
WECHAT_PAYMENT_CERT_PATH
WECHAT_PAYMENT_KEY_PATH
WECHAT_PAYMENT_DEVICE_INFO
WECHAT_PAYMENT_SUB_APP_ID
WECHAT_PAYMENT_SUB_MERCHANT_ID
WECHAT_ENABLE_MOCK
- 如果你習慣使用 config/wechat.php 來配置的話,將 vendor/overtrue/laravel-wechat/src/config.php 拷貝到app/config目錄下,并將文件名改成wechat.php。
3. 使用
Laravel使用
網頁授權實例
<?php
use EasyWeChat\Foundation\Application;
$config = [
// ...
'oauth' => [
'scopes' => ['snsapi_userinfo'],
'callback' => '/oauth_callback',
],
// ..
];
$app = new Application($config);
$oauth = $app->oauth;
// 未登錄
if (empty($_SESSION['wechat_user'])) {
$_SESSION['target_url'] = 'user/profile';
return $oauth->redirect();
// 這里不一定是return,如果你的框架action不是返回內容的話你就得使用
// $oauth->redirect()->send();
}
// 已經登錄過
$user = $_SESSION['wechat_user'];
// ...
授權回調實例
<?php
use EasyWeChat\Foundation\Application;
$config = [
// ...
];
$app = new Application($config);
$oauth = $app->oauth;
// 獲取 OAuth 授權結果用戶信息
$user = $oauth->user();
$_SESSION['wechat_user'] = $user->toArray();
$targetUrl = empty($_SESSION['target_url']) ? '/' : $_SESSION['target_url'];
header('location:'. $targetUrl); // 跳轉到 user/profile
注意:上面的例子呢都是基于 $_SESSION 來保持會話的,在微信客戶端中,你可以結合 COOKIE 來存儲,但是有效期平臺不一樣時間也不一樣,好像 Android 的失效會快一些,不過基本也夠用了。
Lumen使用
網頁授權實例
<?php
use EasyWeChat\Foundation\Application;
$options = [
'app_id' => env('WECHAT_APPID'),
'secret' => env('WECHAT_SECRET'),
'oauth' => [
'scopes' => ['snsapi_userinfo'],
'callback' => '/oauth_callback',
],
];
$app = new Application($options);
$oauth = $app->oauth;
// 未登錄(未授權)
if (empty(app('cache')->get('wechat_user'))) {
app('cache')->put('target_url', '/html');
return $oauth->redirect();
} else {
return redirect('/html');
}
授權回調實例
use EasyWeChat\Foundation\Application;
$options = [
'app_id' => env('WECHAT_APPID'),
'secret' => env('WECHAT_SECRET'),
'oauth' => [
'scopes' => ['snsapi_userinfo'],
'callback' => '/oauth_callback',
],
];
$app = new Application($options);
$oauth = $app->oauth;
// 獲取 OAuth 授權結果用戶信息
$user = $oauth->user();
app('cache')->put('wechat_user', $user->toArray(), 120);
$targetUrl = empty(app('cache')->get('target_url')) ? '/html' : app('cache')->get('target_url');
//header('location:'. $targetUrl); // 跳轉到 user/profile
return redirect($targetUrl);
:pray:注意:$user 里沒有 openid, $user->id 便是 openid.如果你想拿微信返回給你的原樣的全部信息,請使用:$user->getOriginal();