用户授权

产品介绍 

概述

所有支付宝开放平台的用户信息的读写均需要经过用户的许可才允许开发者使用,用户授权基于国际标准的 OAuth2.0 授权机制,基于此机制开发者可以获取支付宝用户信息、给用户发会员卡等。

术语解释

概念

说明

备注

scope

授权范围

一个 scope 表示开发者需要请求用户授权的权限范围,一个 scope 包含至少一个 openapi 接口或者 jsApi接口,一次授权可以组合多个 scope 做组合授权

auth_code

授权码

临时的用户授权凭证,获取后应及时换取下面提到的授权令牌

access_token/auth_token

授权令牌,或者叫访问令牌

长时效的授权凭证,用于调用 openapi.alipay.com 网关进行服务端授权接口调用。注意token需要注意权限范围和有效期

refresh_token

刷新令牌

用于在授权令牌过期后刷新重新获取新的授权令牌,刷新令牌也有有效期

关联产品

获取会员基础信息

scopes 列表

scopes

说明

包含的 openapi 接口

auth_base

静默授权,不会发起授权浮窗;在支付宝客户端获取 auth_code,传入服务端端调用 alipay.system.oauth.token 接口获取支付宝会员标识(user_id)

auth_user

主动授权,需要用户手动点击同意,用户同意后,用于 网站支付宝登录 和 获取用户信息(现已升级为“获取会员基础信息”,且新功能包不再使用 alipay.user.info.share 接口)功能。

alipay.user.info.share

auth_zhima

用户芝麻信息

zhima.credit.score.brief.get

准入条件

  • 该能力对企业支付宝账户和个人支付宝账户(含个体工商户)均开放;

  • 小程序开发者需充分尊重用户个人隐私,妥善使用用户授权。若发现信息存在超出约定范围使用或者不合理使用等情况,平台有权永久收回该小程序的接口权限。

计费模式

免费

快速示例

如下示例仅演示接口调用流程,为了创造更良好的支付宝小程序用户体验,小程序不允许首屏引导用户授权。需要在用户充分了解小程序的业务内容后再引导用户授权,建议将小程序授权环节放在业务流程中。

获取用户授权的演示效果请参考以下示例,实际返回的授权码以真机调试为准。

axml.html

<view class="page"><view class="page-section"><view>请不要一进入小程序就弹框授权,建议先了解小程序的服务内容</view><button type="primary" onTap="getAuthCode">获取授权码</button></view>
</view>

index.js

Page({onLoad() {},data: {},getAuthCode: () => {my.getAuthCode({scopes: 'auth_user',success: ({ authCode }) => {my.alert({content: authCode,});},});},
});

接入指引

接入流程

以获取用户信息举例,整体的接入流程如下(若需要授权其它信息,只需要在调用 getAuthCode 的时候的 scopes 参数使用不同的 scope 即可)。

客户端获取 authcode

通过调用 my.getAuthCode 这个 jsapi 获取用户授权,在 success 回调中可以获取到 authcode,js 代码如下:

my.getAuthCode({scopes: 'auth_user', // 主动授权:auth_user,静默授权:auth_base。或者其它scopesuccess: (res) => {if (res.authCode) {// 认证成功// 调用自己的服务端接口,让服务端进行后端的授权认证,并且利用session,需要解决跨域问题my.request({url: 'https://isv.com/auth', // 该url是您自己的服务地址,实现的功能是服务端拿到authcode去开放平台进行token验证data: {authcode: res.authCode,},success: () => {// 授权成功并且服务器端登录成功},fail: () => {// 根据自己的业务场景来进行错误处理},});}},
});

服务端获取 access_token

服务器端调用 alipay.system.oauth.token 接口换取授权访问令牌,开发者可通过获取到的 auth_code 换取access_token 和用户 ID。auth_code 作为换取 access_token 的票据,每次用户授权完成,回调地址中的 auth_code 将不一样,auth_cod 只能使用一次,一天未被使用自动过期。具体可参见文档alipay.system.oauth.token。 开放平台服务端SDK 的 java 调用示例如下:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode("4b203fe6c11548bcabd8da5bb087a83b");
request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
  • 认证成功 把 uid&token 保存到 session 中,在 session 有效期内就不需要每次都走授权平台进行验证。

  • 认证失败 则返回失败原因,需要再重新走授权流程。

  • 注意 如果仅是为了授权或获取用户 ID,那么到此授权结束。

调用服务端业务接口

在获取到 access_token 后,即可以继续使用该 token 调用 openapi 的授权类接口(比如 alipay.user.info.share、alipay.marketing.card.open等),请注意 token 的权限范围和时效性。

深入授权机制

用户授权auth_code

  • 说明 auth_code 一次有效,auth_code 有效期为3分钟到24小时(开放平台规则会根据具体的业务场景动态调整auth_code 的有效期,但是不会低于3分钟,同时也不会超过24小时),超过有效期的 auth_code 即使未使用也将无法使用。 用户的每次授权动作都会生成一个新的 auth_code。

  • 建议 基于安全考虑,开发者在获取 auth_code(用户授权码)后应尽快调用 alipay.system.oauth.token 接口换取access_token(访问令牌)。

授权scope

  • 说明 scope 为公开的资源,其使用不需要签约,但是其包含的接口是否需要签约请看具体的功能包或者接口定义。 开发者可以在授权请求中包含一个或者多个用户授权范围,每个授权范围称为一个 scope,一个 scope 包含若干个开放平台接口,请求的多个 scope 通过英文逗号分隔。 授权的流程是通用的,在不同的业务场景需要授权的范围不同,需要根据具体产品接入文档中指定的 scope 替换本文中的scope参数。

  • scope 有效期: 这里的 scope 有效期和前面的 auth_code 有效期是两个概念。 scope的有效期会影响开发者最终获取到的access_token和refresh_token的有效期,不同scope的有效期请参考具体的产品文档。

  • 建议: 为了产品体验考虑请按需请求需要的 scope,过多的授权范围容易导致用户放弃授权。建议在做产品的登录场景中使用 auth_base 或者 auth_user 做用户引流,后续根据需要具体业务需要引导用户请求特定scope的用户授权。

access_token

  • 有效期: access_token 取决于授权时指定的 scope 的有效期,如果授权时指定多个 scope,最终的 access_token 的有效期取决于有效期最短的 scope。 access_token 截止时间=(授权时间点)+(授权后调用 alipay.system.oauth.token 返回的 expires_in)。

  • 令牌存储要求:

    • 确保 access_token 的安全保存;

    • 根据 appId + uid +单个 scope 为索引保存 access_token,否则会因为 appid 令牌混用和不同 scope 的令牌相互覆盖导致接口调用报错,若前后多次授权范围相同,仅保存授权截止时间最长的 access_token 即可。授权截止时间 = 授权时间点+ alipay.system.oauth.token 返回的 expires_in。

注意:用户可以取消授权,取消后 access_token 即使在有效期也无法使用。

refresh_token

  • 说明: 用auth_code 调用 alipay.system.oauth.token 接口获取 access_token 时会返回一个 refresh_token(刷新令牌),在 refresh_token 有效期内可以通过 refresh_token 同样调用 alipay.system.oauth.token 刷新一个新的 access_token。

  • 有效期:

    • refresh_token 取决于授权时指定的scope的有效期,如果授权时指定多个 scope,最终的 refresh_token 的有效期取决于有效期最短的 scope。

    • refresh_token 截止时间=(第一次获得该 refresh_token 的时间 + alipay.system.oauth.token 返回的 re_expires_in)。

  • 使用:

    • 使用 refresh_token 调用 alipay.system.oauth.token。

    • 刷新后可以得到一个新的 access_token,access_token 截止时间重新计算(对应可以看到 expires_in 不会变),原来的 accesss_token 会立即失效;同时会得到一个新的refresh_token,原来的 refresh_token 会失效,新 refresh_token 截止时间不会重新计算(对应可以看到 re_expires_in 会减少)。

注意:用户可以取消授权,取消后 refresh_token 即使在有效期也无法使用。

API 列表

接口名称

描述

my.getAuthCode

获取用户授权码

alipay.system.oauth.token

换取授权访问令牌

如果您在调用 API 时出现报错:

  • 欢迎前往 开放社区 提问、留言;

  • 在 公共错误码 中根据错误码的类型,查找相关错误码及解决方案;

  • 在 蚂蚁问答 问答页面直接输入您遇到的错误码;

  • 在 云排查 中排查遇到的问题;

  • 您还可以在 文档中心 直接搜索您要的答案。

官方文档:传送门

支付宝小程序授权登陆篇相关推荐

  1. php 支付宝小程序授权登陆验签_星巴克“啡快”登陆支付宝小程序,让你“飞快”取到咖啡...

    当代年轻人的生活方式是怎样的? 靠地铁通勤,靠咖啡续命 早上睁不开眼,咖啡来一杯 中午昏昏欲睡,咖啡来一杯 晚上熬夜加班,咖啡来一杯 喝完这杯,还有一杯 "宁可食无肉,不可早无星" ...

  2. JAVA支付宝小程序授权登陆,并生成二维码(证书方式)

    接入准备 https://opendocs.alipay.com/open/284/106001?ref=api 根据文档进行创建小程序.配置相关信息(接口加签方式选择证书) 生成二维码文档https ...

  3. 支付宝小程序授权登录 (Java 后台篇)

    支付宝小程序授权登录 (Java 后台篇) 开始 : 实现支付宝小程序授权登录功能, 本文主要是介绍支付宝小程序授权登录流程,与关键登录与处理代码. 流程 : 关键代码 : 1.获取用户信息 /*** ...

  4. 支付宝小程序授权/获取用户信息

    支付宝小程序授权/获取用户信息 目录: 文章目录 支付宝小程序授权/获取用户信息 获取支付宝小程序授权token 解析支付宝小程序接口响应加密数据 获取支付宝小程序授权token ​ 前提准备工作: ...

  5. uniapp支付宝小程序授权用户信息、授权手机号码

    需求说明 uniapp开发支付宝小程序授权用户信息和用户手机号码过程中,与微信小程序的API是有所不同的,相同是都是需要<button></button>点击事件触发.接下来简 ...

  6. uniapp 支付宝小程序手机号登陆

    开发支付宝小程序,在登录的时候,由于需要手机号登陆,所以需要在支付宝小程序后台去申请手机号登陆权限. 支付宝小程序登陆组件设置 <!-- #ifdef MP-ALIPAY --> < ...

  7. 微信小程序授权登陆判断+证件照换底色UI设计(第三周)

    日期 工作内容 2020年8月16日 (因涉及版权问题)图片素材重新查找 2020年8月17日 图片上传 2020年8月18日 小程序授权判断完善,小程序跳转页面新架构 2020年8月19日 证件照尺 ...

  8. 小程序php mysql_PHP+TP小程序授权登陆实现

    仅供大家参考学习 1.先说明一下官方:为优化用户体验,使用 wx.getUserInfo 接口直接弹出授权框的开发方式将逐步不再支持. 小程序与小游戏获取用户信息接口调整,请开发者注意升级. 2.使用 ...

  9. 关于微信小程序授权登陆之后需要在个人信息页展示信息,如微信头像,昵称这件事

    开发时使用uniapp进行开发,不过用什么开发都不重要. 在搞完微信授权登陆后,又遇到需要把用户昵称和头像展示在个人信息页的情况,在试了很多方法后,发现了便利的方法. 有想过从数据库获取数据,也想过从 ...

  10. uni-app小程序授权登陆示例

    我用的是uni-app,和原生略有差别,但差别不大. 使用promise,我也是初学,不合理处请包涵. authorize.js 这是个类库,所有的登陆相关都在这里,我没有细化分开. //author ...

最新文章

  1. 2022-2028年中国2,3,6-三甲基苯酚行业市场研究及前瞻分析报告
  2. 7-6 混合类型数据格式化输入 (C语言)
  3. linux 代码格式化工具 clang-format
  4. Windows系统下nodejs、npm、express的下载和安装教程详解
  5. QT跨平台项目开发经验(项目打包)
  6. 关于Office 中的墨迹功能(可作word电子签名)
  7. java的Teacher类_java类的继承 - osc_tauwfamo的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 基于JAVA+Servlet+JSP+MYSQL的毕业生就业管理系统
  9. iPhone 13 的十大爆料:“十三”到底“香不香”?
  10. Linux操作系统中的路由表配置
  11. HDFS分布式文件系统知识总结
  12. 惠普1020plus无法连接计算机,惠普1020打印机连不上是怎么回事
  13. 用CAJViewer识别图片文字
  14. Pycharm处理 E501 line too long 警告
  15. 如何进行电子邮箱申请(mail163),入门一分钟,终身受益
  16. matlab生成的数值为inf,计算值时为Nan / inf
  17. 很全的zencart 模板修改
  18. 图片url显示服务器,服务器上图片的url地址
  19. 查看并修改Linux主机名命令hostname
  20. php7安装(多个php版本共存)

热门文章

  1. matlab的fft点数,MATLAB快速傅里叶变换(fft)函数详解
  2. Python入门篇(下)
  3. 程序员涨工资大多数靠跳槽吗?
  4. Google Earth Engine——在控制台中打印出喜马拉雅山脉的动态图,需要用到join链接来实现(含案例)
  5. 计算机编程实训视频教程,C++网络编程实践视频教程 共84节课 陈硕主讲
  6. Vue中axios的封装
  7. taskmgr多开补丁
  8. 网络广告计费形式有那些?
  9. 1-n奇数之和c语言,c语言1-n奇数之和
  10. keepalived配置文件相关简单解释