Skip to content

App 授权(微信小程序)

App 登录授权是基于标准的 OAuth 2.0 协议实现的,通过金山文档帐号授权登录第三方 App 的能力。

准备工作

在使用 App 登录授权能力之前,你需要先仔细阅读服务商指南,根据文档中的指示在开发者后台 创建一个应用,并获得应用的app_idapp_key

第一步:获取授权码

移动应用跳转金山文档微信小程序进行用户授权,需要第三方 App 接入微信开放平台 SDK,跳转金山文档微信小程序,然后调用金山文档开放平台授权能力,获取授权码。

请先参考微信开放平台移动应用接入指南(iOS/Android),接入微信开放平台 SDK,并根据应用在微信开放平台上注册的信息,完成 SDK 的初始化操作。

此外,iOS 应用还需要按照上述文档要求,配置好应用的 Universal Link。

参考文档:

微信移动应用:APP 拉起小程序功能

微信小程序:小程序打开 APP

跳转到金山文档小程序示例

weixin.launchMiniProgram(
  {
    id: 'gh_c90b888d5c93', //金山文档微信小程序原始ID
    path: 'pages/thirdPartyAuth/thirdPartyAuth?appId=SX20220606WJJQNJ&scope=access_personal_files,download_personal_files',
    state: '' //由用户自定义,授权成功后会带回 |
  },
  res => {
    // 用户授权后返回code
    // 格式json:{"code":"xxxxxx",state:'xxxxx' }
  },
  err => {
    // 返回错误
  }
)

代码示例

Android :参考微信官方文档 Android 开发示例

iOS :参考微信官方文档 iOS 开发示例

跳转传递参数说明:

名称类型是否必传说明
appId
string
应用 APPID,查看应用信息
scope
string
需申请的权限,用,分割,具体类型请参照 scope 权限说明
switchAccount
boolean
是否打开账号切换弹出层,默认为false,不打开
state
string
由用户自定义,授权成功后会带回

第二步:获取令牌

提示

由于应用appkey和获取到的access_token安全级别比较高,后续刷新access_token、通过access_token获取用户信息等步骤,必须从服务器调用接口。

使用场景

需要获取令牌

请求地址:/api/v1/oauth2/access_token

请求方法:GET

签名方式:无

Header 参数

名称是否必填说明
Content-Type
固定为:application/json

Query 参数

名称类型是否必填说明
code
string
用户授权返回 code
app_id
string
应用 APPID
app_key
string
应用 APPKEY

请求地址示例

[GET] https://developer.kdocs.cn/api/v1/oauth2/access_token?code={code}&app_id={APPID}&app_key={APPKEY}

返回参数

名称类型说明
code
int
非 0 表示失败,参考错误码说明
+
data
access_token {}
令牌内容

返回示例

{
  "code": 0,
  "data": {
    "app_id": "SX20220706XGEQGL",
    "access_token": "XiDvqrCkvBtAAooijpoMyHQiyeXUhPjk",
    "expires_in": 86400,
    "refresh_token": "oWtTFhASVZhwKpwOaxNtoRTourVnPxCC"
  },
  "result": "ok"
}

第三步:刷新过期的令牌

由于 access_token 的有效期较短,当 access_token 过期后,可以使用 refresh_token 进行刷新

refresh_token 有效期为 90 天,当 refresh_token 失效之后,需要用户重新授权。

使用 refresh_token 刷新 access_token 时,会返回一个新的 access_token,原 access_token 自动失效。

使用场景

刷新 access_token

请求说明

请求地址:/api/v1/oauth2/refresh_token

请求方法:POST

签名方式:无

Header 参数

名称是否必填说明
Content-Type
固定为:application/json

Query 参数

名称类型是否必填说明
app_id
string
应用唯一标识

Body 参数

名称类型是否必填说明
app_key
string
应用密钥
refresh_token
string
填写通过code获取到的refresh_token参数

请求示例

[POST]  https://developer.kdocs.cn/api/v1/oauth2/refresh_token?app_id={app_id}

{
    "app_key": "{app_key}",
    "refresh_token": "{refresh_token}"
}

返回参数

名称类型说明
code
int
非 0 表示失败,参考错误码说明
+
data
refresh_token {}
新的令牌内容

返回示例

{
  "code": 0,
  "data": {
    "access_token": "XiDvqrCkvBtAAooijpoMyHQiyeXUhPjk",
    "app_id": "SX20220706XGEQGL",
    "expires_in": 7776000,
    "refresh_token": "oWtTFhASVZhwKpwOaxNtoRTourVnPxCC"
  },
  "result": "ok"
}

关键字段说明

字段说明有效期描述
code
授权码
5 分钟
通过服务商前端发送至服务商后端,被换取令牌接口消费后会失效
access_token
令牌
24 小时
储存在服务商后端,所有与开放平台的通信都在后端完成,有效的避免令牌被泄露
refresh_token
刷新令牌
90 天
用于对令牌进行刷新,防止频繁进行登录授权,提升用户体验