大概思路:用户访问我们的某个例如www.baidu.com/home/index/index
我们判断Session是否有用户的uid
如果没有,跳到授权页面 (url里面带上当前页面www.baidu.com/home/index/index 或者 把当前url放入Session)
跳到授权页面,拿到用户信息,根据openid或者uid去数据库查询用户,存在即更新用户信息,不存在即添加用户信息。并且把uid放入Session里面,跳回授权之前访问的页面(url里面获取或者Session获取之前访问的页面)
ThinkPHP5.1+EasyWeChat 企业微信授权
composer安装EasyWeChat
$ composer require overtrue/wechat:~4.0 -vvv
授权代码demo
<?php
/**
* Created by PhpStorm.
* User: Pasa吴
* Date: 2019/4/7
* Time: 21:15
*/
namespace app\home\controller;
use EasyWeChat\Factory;
use think\Controller;
use think\facade\Session;
use app\admin\model\User AS M_User;
/**
* 企业微信公众号授权
*/
class Index extends Controller
{
protected $app;
protected $oauth;
protected $config;
public function __construct()
{
parent::__construct();
$this->config = [
'corp_id' => 'xxx',
'agent_id' => 1000014, // 如果有 agend_id 则填写
'secret' => 'xxxx',
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
'log' => [
'level' => 'debug',
'file' => __DIR__ . '/wechat.log',
],
'oauth' => [
'scopes' => ['snsapi_userinfo'],
//授权地址
'callback' => 'https://pasawu.top/home/index/authorization',
],
];
$this->app = Factory::work($this->config);
$this->oauth = $this->app->oauth;
}
/**
* 首页
* @return mixed|\Symfony\Component\HttpFoundation\RedirectResponse
*/
public function index()
{
//判断是否已经授权
if (!Session::has('uid')) {
//授权后转回的url
Session::set('target_url', "https://pasawu.top/home/index/index");
return $this->oauth->redirect();
}
Session::get('uid');
return $this->fetch('index');
}
/**
* 授权
*/
public function authorization()
{
// 获取 OAuth 授权结果用户信息
$user = $this->oauth->user();
//保存用户信息 返回uid放入Session
$uid = M_User::add($user->toArray(), $user->getNickname());
Session::set('uid', $uid);
header('location:' . Session::get("target_url")); // 跳转到授权之前的页面
}
}
本文为Pasa吴原创文章,转载无需和我联系,但请注明来自Pasa吴博客https://www.pasawu.top
最新评论