三方登录(OAuth)
本文说明三方登录插件的开发流程与回调地址配置。
魔方开发者交流群:682866869
文件命名
- 在
modules/oauth/下新建登录插件目录。例如开发微信登录,创建modules/oauth/weixin/。 - 在插件目录中创建同名文件
weixin.php,类名也应与目录名一致。
编写插件(以微信登录为例)
- 创建命名空间:
namespace oauth\weixin;-
创建与文件名一致的
weixin类。 -
配置下列四个必需函数,函数名不可更改;其他功能可自行扩展:
- 插件信息:
meta() - 接口配置:
config() - 生成授权地址:
url($params) - 处理回调:
callback($params)
插件信息函数 meta()
参数
| 键名(固定不能修改) | 是否必填 | 描述 |
|---|---|---|
| name | 是 | 插件名称 |
| description | 否 | 插件描述 |
| author | 否 | 开发者 |
| logo_url | 是 | 接口图片地址,会在后台设置/客户登录页,绑定账号页面显示这个图片。 |
格式如下:
return [
'name' => '微信登录', // 插件名称
'description' => '微信登录', // 描述
'author' => '智简魔方', // 开发者
'logo_url' => 'weixin.svg', // 接口图片地址
];备注:meta() 返回的是一维数组
插件接口配置函数 config()
参数
| 键名(固定不能改) | 是否必填 | 描述 |
|---|---|---|
| type | 是 | type 值 有 text ,textarea(只能这两种类型) |
| name | 是 | name 的值自定义,在下面的 url 和 callback 中会使用到 |
| desc | 否 | 描述信息 |
格式如下:
return [
'App Key' => [
'type' => 'text',
'name' => 'appid',
'desc' => '应用唯一标识,在微信开放平台提交应用审核通过后获得',
],
'App Secret' => [
'type' => 'text',
'name' => 'appSecret',
'desc' => '应用密钥 AppSecret,在微信开放平台提交应用审核通过后获得',
],
];备注:config() 返回的是二维数组 上面的例子中的 App Key 和 App Secret 不是固定的,自定义
生成授权地址函数 url($params)
接收参数$params ,$params 是数组,包含了下面两种信息
①数组包含了 config()函数中的所有参数(config 函数中 name 的值就是数组键,
②外加一个$params['callback']回调地址
返回的类型:string
返回的数据:三方登录地址
回调函数 callback($params)
接收参数$params ,$params 是数组,包含了下面三种信息
①数组包含了 config()函数中的所有参数(就是 config()函数中的 name 的值是这里的键)
②外加一个$params['callback']回调地址
③三方登录成功后跳转返回的参数
返回的类型:array
返回的数据:
| 键名 | 是否必填 | 描述 |
|---|---|---|
| openid | 是 | 三方登录授权成功后返回的用户唯一标识 |
| callbackBind | 否 | all,邮箱和手机号任选绑定。 bind_mobile,输入手机号绑定, bind_email,输入邮箱绑定 login,三方授权登录后跳转到会员中心,直接登录,会创建一个邮箱和手机号是空的用户并绑定该插件模块。 不返回这个参数就会默认是all,(如果是在会员中心绑定账号,该参数会忽略,只有在第一次用相应的三方登录的时候才会判断这个参数) |
| data | 否 | 用户昵称、性别、省份、城市和头像等用户资料;完整格式见下方响应示例。 |
return [
'openid' => $openid['openid'], // 必须
'data' => [
'username' => '用户昵称',
'sex' => '性别,1 男、2 女;其他值需要转换',
'province' => '省份',
'city' => '城市',
'avatar' => '头像图片',
],
'callbackBind' => 'all',
];回调地址说明
- 申请第三方登录 API 时,如需填写回调地址,使用当前域名加
/oauth/callback/和插件文件名。例如微信扫码登录:
http://www.xxx.com/oauth/callback/weixin有的要求填回调域,就填当前域名网址,例如:
http://www.xxx.com/- 插件目录名、文件名和类名应保持一致。