第三方登录开发
位置
三方登录插件放在 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/testcallback 方法的请求地址如下,其中 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