Laravel中微信网页授权
2017-08-14 本文已影响0人
曹轩跃
说明:本文介绍的教程是基于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();