热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

支付宝小程序授权登陆篇

用户授权产品介绍 概述所有支付宝开放平台的用户信息的读写均需要经过用户的许可才允许开发者使用,用户授权基于国际标准的OAuth2.0授权机制,基于此机制开发者可以获取支付宝用户信息
用户授权

产品介绍 《支付宝小程序授权登陆篇》

 

客户端获取 authcode

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

 

 

 

my.getAuthCode({
scopes: 'auth_user', // 主动授权:auth_user,静默授权:auth_base。或者其它scope
success: (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 时出现报错:

 

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

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

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

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

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

 官方文档:传送门


推荐阅读
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • OAuth2.0指南
    引言OAuth2.0是一种应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据,或者一个基于地理的应用可以访问Foursquare的用户数据等。 ... [详细]
  • html结构 ... [详细]
author-avatar
儒雅的天麟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有