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权限