智简魔方文档

第三方登录开发

位置

三方登录插件放在 public/plugins/oauth/ 目录下。

目录结构

public/plugins/oauth/qq/
|--- Qq.php (入口文件)
|--- config.php (配置项客户配置项,在插件设置中显示)
|--- qq.svg (登录界面上要显示的图片)

开发流程(本文以QQ为例)

创建QQ目录,示例

public/plugins/oauth/qq/

目录名以 小写字母+下划线 形式,必须以字母开头,如 qq

创建config.php

注意返回的键不要是name,callback,state,code,system_oauth_state以及三方跳转自带的参数,

示例

return [

    'app_key'            => [    # 在后台插件配置表单中的键名(统一规范:小写+下划线),会是config[app_key]

        'title' => 'AppKey',            # 表单的label标题

        'type'  => 'text',           # 表单的类型:text文本,password密码,checkbox复选框,select下拉,radio单选,textarea文本区域,tip提示

        'value' => '',     # 表单的默认值

        'tip'   => 'AppKey',  # 表单的帮助提示

    ],

    'app_secret'    => [

        'title' => 'AppSecret',

        'type'  => 'password',

        'value' => '',

        'tip'   => 'AppSecret,保存后不应完整回显',

    ],

];

创建入口文件

①示例:Qq.php

②操作步骤

命名空间 namespace oauth\qq (控制器下命名空间对应相应目录即可,其它同理);

以目录名 大驼峰+.php,创建在根目录下,如 qq\Qq.php,类需要继承app\common\lib\Oauth

③文件中需要定义info属性,示例:

// 插件基础信息
public $info = [

'name'        => 'Qq',      // 必填 插件标识,一般就是该类名 (唯一)

'title'       => 'QQ',      // 必填 插件显示名称

'description' => 'QQ',      // 必填 插件功能描述

'author'      => 'idcsmart',// 必填 作者

'version'     => '1.0.0',   // 必填 插件版本

'author_url'  => '',        // 选填 作者链接

'help_url'    => 'https://connect.qq.com/', // 选填 申请链接

        'logo_url'    => 'qq.svg',  // 必填 图标地址

];

④必须实现url和callback 两个方法

方法名称描述参数返回
url生成授权地址接收数组 $params,包含 config.php 中的所有参数、callback 回调地址和 system_oauth_state;配置参数的键不要覆盖第三方参数string,第三方登录地址
callback处理回调接收数组 $params,包含 config.php 中的所有参数、callback 回调地址和第三方登录成功后跳转返回的参数array,第三方用户信息

url 方法的请求地址如下,其中 name 为插件标识:

GET /console/v1/oauth/:name

如果授权地址需要 state 参数,必须使用系统传入的 system_oauth_state,系统会自动验证。参数示例:

$params = [
    'app_id' => '123',
    'callback' => 'test.com',
    'system_oauth_state' => '123',
];

授权地址返回示例:

https://graph.qq.com/oauth2.0/authorize/test

callback 方法的请求地址如下,其中 name 为插件标识:

GET /console/v1/oauth/callback/:name

返回示例:

return [
    'openid' => '', // 必须,第三方登录授权成功后返回的用户唯一标识
    'data' => [
        'username' => '', // 可选,名称
    ],
];

⑤实现可选方法

方法名称描述请求地址参数返回
receive如果需要接受三方服务商推送信息,可以使用该接口来实现见下方请求地址,name 是插件标识数组包含 config.php 中的所有参数;数组可能不包含请求体参数,需要自行获取根据要求自行返回中断即可
ANY /console/v1/oauth/:name/command/receive

查看

到后台插件管理界面刷新就会看到新添加的插件,安装、配置即可使用。

示例

参考qyweixin,qq,weixin,dingtalk

系统源码参考

app\home\controller\OauthController
app\home\model\OauthModel