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,

  1. 创建配置文件:

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

  1. 请修改应用根目录下的 config/wechat.php 中对应的项即可;
  2. (可选)添加外观(门面)到 config/app.php 中的 aliases 部分:

'EasyWeChat' => Overtrue\LaravelWechat\Facade::class,

Lumen应用

  1. 在 bootstrap/app.php 中 82 行左右:

$app->register(Overtrue\LaravelWechat\ServiceProvider::class);

  1. 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
  1. 如果你习惯使用 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();

上一篇下一篇

猜你喜欢

热点阅读