2.OAuth2的code授权流程及接口简介
2.1 code授权流程
![alt text](image.png)

      授权流程可以简单归纳为： 
        1.获取授权码code（步骤1234）； 
        2.授权码code换取长时令牌refreshToken以及短时访问令牌accessToken（步骤56），使用accessToken调用电商授权API（步骤789）； 
        3.若短时访问令牌accessToken过期，则使用长时令牌refreshToken刷新短时访问令牌accessToken，再使用新的accessToken进行调用。

     下面将详细介绍每一步的调用过程及用到的接口

2.2 获取授权码code
授权页面地址示例：https://open.kwaixiaodian.com/oauth/authorize?app_id=xxx&redirect_uri=xxx&scope=xxx,xxx&response_type=code&state=xxx

使用说明：
1、若应用为”商家后台””快分销”“快赚客”自研应用，需要现在应用的测试用户或授权用户列表中添加用户后，用户打开授权页面完成授权；
2、若应用为第三方ISV应用，需要上架到服务市场，用户需在服务市场订购了服务完成授权。

页面参数说明:

参数名

是否必须

描述

app_id

是

应用的 appKey

response_type

是

授权的类型，默认为"code"

scope

是

APP已经拥有且需要获取用户授权的权限包，多个用 “,” 连接，比如merchant_item。可至“应用中心-APP详情页”查看APP已获得的权限包列表，平台所有权限包见下文

redirect_uri

是

授权成功的回调uri，为APP在创建时填写的回调地址

state

否

状态值，成功授权后回调时会原样带回

      如果授权成功，授权服务器会将用户的浏览器重定向到应用 ：http(s)://redirect_uri?code=CODE&state=STATE

参数名

参数类型

是否必须

code

string

用来换取access_token 的授权码，有效期为 2 分钟且只能使用一次，在用户首次允许授权时返回

state

string

如果请求时传递参数，会回传该参数

2.3 用授权码code换取长时令牌refreshToken以及访问令牌accessToken
      请求地址: https://openapi.kwaixiaodian.com/oauth2/access_token  ** 此接口为后端接口**

      请求方法: GET

      请求参数:

参数名

是否必须

描述

app_id

是

开发者appKey

grant_type

是

授权的类型，"code"

code

是

2.2中获取到的code

app_secret

是

开发者的appSecret

    正确返回值:

参数名

描述

result

返回结果类型，1为正确，其他为不正确

access_token

临时访问令牌，作为调用授权API时的入参，过期时间为expires_in值，授权用户、app和权限组范围唯一决定一个access_token值

refresh_token

长时访问令牌，默认为180天，授权用户、app和权限组范围唯一决定一个refresh_token值
注意：refresh_token值不需要存储固定值，因access_token48小时过期时间内需要用长时令牌refreshToken刷新访问令牌accessToken，每次刷新会换取新的refreshToken

open_id

用户对该开发者的唯一身份标识

expires_in

access_token过期时间，单位秒，默认为172800，即48小时

scopes

本次授权中，用户允许的授权权限范围，即access_token和refresh_token中包含的scopes

    异常返回值：

参数名

描述

result

返回结果类型，详情查看本文错误码简介

error

错误类型

error_msg

错误详情，用于提示具体的错误原因

2.4 用长时令牌refreshToken刷新访问令牌accessToken
       当access_token 过期时，可以使用(在有效期内的) refresh_token重新获取新的access_token，不需要显式的用户授权过程，若refresh_token也过期了，则需要再次经过用户授权，因此需要关注refresh_token的时效（默认180天），需要在时效内用此接口再换取新的refresh_token才不会出现用户授权频繁失效的情况。该接口只支持authorization_code模式获取access_token 刷新，刷新得到新的access_token 和refresh_token, 旧的refresh_token 随即在5分钟内失效。

       使用子账号的refreshToken刷新accessToken时以下情况会报错：1、子账号被禁用、删除或状态不可用；2、子账号的主账号和APP不存在授权关系。

       当且仅当子账号状态可用，且子账号的主账号和APP存在授权关系时，才可正确获取到子账号的accessToken。

       请求地址: https://openapi.kwaixiaodian.com/oauth2/refresh_token  ** 此接口为后端接口**

       请求方法: POST

       请求参数:

参数名

是否必须

描述

grant_type

是

授权的类型，必须是"refresh_token"

refresh_token

是

长时访问令牌，默认为180天，2.3接口中返回的值

app_id

是

开发者 appId

app_secret

是

开发者的appSecret

    正确返回值:

参数名

描述

result

返回结果类型，1为正确，其他为不正确

access_token

临时访问令牌，作为调用授权API时的入参，过期时间为expires_in值

expires_in

access_token过期时间，单位秒，默认为172800，即48小时

refresh_token

长时访问令牌，默认为180天，会返回新的refresh_token，原有的refresh_token即失效
注意：refresh_token值不需要存储固定值，因access_token48小时过期时间内需要用长时令牌refreshToken刷新访问令牌accessToken，每次刷新会换取新的refreshToken

refresh_token_expires_in	
refresh_token 的过期时间，单位秒，默认为180天

scopes	
access_token包含的scope

    异常返回值：

参数名

描述

result

返回结果类型，详情查看本文错误码简介

error

错误类型

error_msg

错误详情，用于提示具体的错误原因

 

 ===
 4.授权错误码简介
result

error

异常描述

100200100

invalid_request

缺少必要的请求参数

100200101

unauthorized_client

app 非法，例如 开发者不存在，app 不存在或状态不正确等

100200102

access_denied

请求被拒绝，授权和后续API，访问中出现任何的Token 错误都会返回这个异常，存在三种可能
invalid refresh_token  无效token
refreshToken.discarded  refreshToken已经用过，不能重复使用
refreshToken.revokedAuthorization 用户已经撤销授权

100200103

unsupported_response_type

responseType 错误

100200104

unsupported_grant_type

换取accessToken 使用的grantType 错误

100200105

invalid_grant

换取accessToken 使用的 code 错误

100200106

invalid_scope

权限 scope 错误，或者用户取消了授权等

100200107

invalid_openid

用户的 openid 无效

100200500

server_error

服务器内部错误，开发者侧无法处理

 

5.权限组列表
    权限组用于控制APP调用API和接受消息的权限范围，只有当APP拥有该API所属的权限组才可以调用API，只有当APP拥有该消息所属的权限组才可以消费消息，列表中说明了现有的权限组以及对应的权限组的API和消息。快手电商开放平台会根据开发者创建的应用类型授予默认的权限组，若开发者需要申请额外的权限组，请发邮件到open@kuaishou.com并说明理由。

Scope

描述

备注

user_base

授权之后的默认权限

所有应用默认拥有此权限组

user_info

用户基本信息

所有应用默认拥有此权限组

merchant_user

商家用户信息

用户API权限

merchant_item

读取或更新店铺的商品数据

商品API和商品消息权限

merchant_order

读取或更新店铺的订单信息

订单API和订单消息权限

merchant_refund

读取或更新店铺的售后信息

退款单API和退款单消息权限

merchant_distribution

读取或更新分销信息

分销API权限

merchant_logistics

读取或更新物流信息

物流API权限

merchant_promotion

读取或更新营销信息

营销API权限

merchant_cs

读取或更新店铺的客服信息

客服API权限

merchant_comment

读取或更新店铺的评价信息	评价API权限
merchant_servicemarket

获取应用在服务市场的订购信息	服务市场API权限
