如何获取access_token(授权访问令牌)

简介: 该步骤主要是为获取access_token(授权访问令牌),用于商户后续的业务逻辑调用,如获取支付宝用户信息、发放会员卡、闪电开票等。一、文档地址官方文档地址:[url]https://docs.

该步骤主要是为获取access_token(授权访问令牌),用于商户后续的业务逻辑调用,如获取支付宝用户信息、发放会员卡、闪电开票等。

一、文档地址

官方文档地址:[url]https://docs.open.alipay.com/289/105656[/url]

二、开发前准备工作

调用步骤:[url]https://openclub.alipay.com/read.php?tid=12194&fid=69[/url]

注意事项:1、支持沙箱测试;2、不需签约,不需要添加功能;3、支持第三方调用

三、接口调用流程

1、应用授权URL拼接

拼接规则:[url]https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL[/url]

(1)APPID:商户调用应用的appid

(2)scope:根据对应产品功能选择

auth_user:【获取用户信息】、【网站支付宝登录】 

auth_base:【用户信息授权】 

auth_ecard:【商户会员卡】 

auth_invoice_info:【支付宝闪电开票】 

auth_puc_charge:【生活缴费】 

auth_zhima:【芝麻评分】 

auth_user_assets:【菜品营销】

多个scope时用”,”分隔,如scope为”auth_user,auth_ecard”时,此时获取到的access_token, 既可以用来获取用户信息,又可以给用户发送会员卡。 

该参数详解:[url]https://openclub.alipay.com/read.php?tid=1795&fid=67[/url]

(3)redirect_uri:必须是应用中设置的授权回调地址

(4)state:商户自定义参数,用户授权后,重定向到redirect_uri时会原样回传给商户。

68_25168_808cd049d1a5056.png

2、获取auth_code

用户访问拼接好的应用授权URL,授权成功后,会自动回调授权URL中设置的授权回调地址页面,即redirect_uri,获取授权成功后的app_auth_code。

3、获取access_token

获取access_token必须通过alipay.system.oauth.token(换取授权访问令牌) 接口调用获取。

具体代码调用方式参见换取授权访问令牌请求示例。

注:到此为止,用户信息授权结束,后续具体的功能根据对应接口对接

四、换取授权访问令牌请求示例

1、参数说明

(1)grant_type:

authorization_code表示换取auth_code。 

refresh_token表示刷新refresh_token。

(2)code:授权码,grant_type的值为authorization_code,该值必须填写。

参数值为授权后获取的auth_code;

(3)refresh_token:刷新令牌,grant_type值为refresh_token,该值不能为空。

参数值为此接口的响应参数refresh_token(至少需要通过grant_type=authorization_code调用此接口一次才能获取)。

注意事项:

以上参数是公共请求参数,该接口没有biz_content参数,必须通过request的方式传参。

2、JAVA版本请求示例

public static void main(String[] args) throws AlipayApiException {		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);		AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();		/**		 * 用户授权没有AlipaySystemOauthTokenModel,直接使用request		 */		//值为authorization_code时,代表用code换取;值为refresh_token时,代表用refresh_token换取		request.setGrantType("authorization_code");		//授权码,用户对应用授权后得到。即下面获取到的AccessToken		//每次用户授权完成,回调地址中的auth_code将不一样,auth_code只能使用一次,一天未被使用自动过期。 		request.setCode("1f80c8d6c21b4a8a94345e07d823QB89");		//刷新令牌,上次换取访问令牌时得到		//request.setRefreshToken("43e3bee07f354cc5a7780446412bSX75");		try {//		    AlipaySystemOauthTokenResponse response = alipayClient.execute(request);		    System.out.println(response.getBody());		} catch (AlipayApiException e) {		    //处理异常		    e.printStackTrace();		}	}

响应参数:

{"alipay_system_oauth_token_response":{"access_token":"composeBd364827b102144cf992fb7ce6e327X89","alipay_user_id":"2088102175794899","expires_in":600,"re_expires_in":660,"refresh_token":"composeBdefde11796f24938bafebefcf7834D89","user_id":"2088102175794899"},"sign":"NtsgUCZg04C5DdRnBdFSyFgg8K5pcFSnGbGV67zpo6tAuDEUB6421lAm2mdG8UHdO1PlLoSdSZmXgNZgin3bkjFe4hyOQUroPLb64whTCas5BsKBODL2s0+8LlrGnF7VJNkOSaWrDIh15DFNSKLvtA3gtvo3gvZK5gbY/428HzEE8HpBC85CEZuAA+0RsVXJvk/lvcXtAfjEKs5c1s45aOq8UmcH+HjAjmcPptNHokxYF+iY++xRgaypz7PeHMJsJNI8PS0CvznYySXwvHi9z/Ooav79X5gjjftqpd/2aSeUljbXdlf66LhcBaAFj8eT1r/Zkz+xQ2jE5M8i95HniQ=="}

3、PHP版本请求示例

$aop = new AopClient ();$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';$aop->appId = 'your app_id';$aop->rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串';$aop->alipayrsaPublicKey='请填写支付宝公钥,一行字符串';$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset='GBK';$aop->format='json';$request = new AlipaySystemOauthTokenRequest ();$request->setGrantType("authorization_code");$request->setCode("1f80c8d6c21b4a8a94345e07d823QB89");//$request->setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");$result = $aop->execute ( $request); echo json_encode($result);

响应参数:

{"alipay_system_oauth_token_response":{"access_token":"composeBd364827b102144cf992fb7ce6e327X89","alipay_user_id":"2088102175794899","expires_in":600,"re_expires_in":660,"refresh_token":"composeBdefde11796f24938bafebefcf7834D89","user_id":"2088102175794899"},"sign":"NtsgUCZg04C5DdRnBdFSyFgg8K5pcFSnGbGV67zpo6tAuDEUB6421lAm2mdG8UHdO1PlLoSdSZmXgNZgin3bkjFe4hyOQUroPLb64whTCas5BsKBODL2s0+8LlrGnF7VJNkOSaWrDIh15DFNSKLvtA3gtvo3gvZK5gbY/428HzEE8HpBC85CEZuAA+0RsVXJvk/lvcXtAfjEKs5c1s45aOq8UmcH+HjAjmcPptNHokxYF+iY++xRgaypz7PeHMJsJNI8PS0CvznYySXwvHi9z/Ooav79X5gjjftqpd/2aSeUljbXdlf66LhcBaAFj8eT1r/Zkz+xQ2jE5M8i95HniQ=="}

4、.NET版本请求示例

IAopClient client = new DefaultAopClient(config.gatewayUrl, config.app_id, config.private_key, "json", "1.0", "RSA2", config.alipay_public_key, config.charset, false);request.GrantType = "authorization_code";request.Code = "1f80c8d6c21b4a8a94345e07d823QB89";//request.RefreshToken = "201208134b203fe6c11548bcabd8da5bb087a83b";AlipaySystemOauthTokenResponse response=client.execute(request);Console.WriteLine(response.Body);

响应参数:

{"alipay_system_oauth_token_response":{"access_token":"composeBd364827b102144cf992fb7ce6e327X89","alipay_user_id":"2088102175794899","expires_in":600,"re_expires_in":660,"refresh_token":"composeBdefde11796f24938bafebefcf7834D89","user_id":"2088102175794899"},"sign":"NtsgUCZg04C5DdRnBdFSyFgg8K5pcFSnGbGV67zpo6tAuDEUB6421lAm2mdG8UHdO1PlLoSdSZmXgNZgin3bkjFe4hyOQUroPLb64whTCas5BsKBODL2s0+8LlrGnF7VJNkOSaWrDIh15DFNSKLvtA3gtvo3gvZK5gbY/428HzEE8HpBC85CEZuAA+0RsVXJvk/lvcXtAfjEKs5c1s45aOq8UmcH+HjAjmcPptNHokxYF+iY++xRgaypz7PeHMJsJNI8PS0CvznYySXwvHi9z/Ooav79X5gjjftqpd/2aSeUljbXdlf66LhcBaAFj8eT1r/Zkz+xQ2jE5M8i95HniQ=="}

五、注意事项

1、sope设置正确

不同的scopes的值对应的是不同的access_token,不同的token可调用不同的接口,token的效用也因此不一样,所以这些token切忌混用

该参数详解:[url]https://openclub.alipay.com/read.php?tid=1795&fid=67[/url]

2、auth_code有效期

auth_code只能使用一次,有效期目前至少为5分钟,最长为24小时,超时未使用自动过期。

3、access_token有效期

access_token截止时间=(授权时间点)+(授权后调用alipay.system.oauth.token返回的expires_in)

4、auth_base作用

scope参数中的auth_base(用户信息授权)用于静默授权,若单传该参数无法获取用户信息,必须配合auth_user(获取用户信息、网站支付宝登录)。

5、用户信息授权实现场景

获取会员信息集成流程:[url]https://openclub.alipay.com/read.php?tid=14599&fid=68[/url]

网站支付宝登录集成流程:[url]https://openclub.alipay.com/read.php?tid=14600&fid=68[/url]

6、用户如何取消授权

只能用户取消授权,商户取消授权方式如下:

地址:[url]https://openauth.alipay.com/auth/tokenManage.htm[/url]

68_25168_78506198c00676a.png

7、沙箱授权URL拼接规则

拼接规则:[url]https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL[/url]

68_25168_fc5470d09bf608a.png

六、常见问题

1、Q:报错isv.invalid-token:无效的令牌?

A:排查方案:[url]https://openclub.alipay.com/read.php?tid=4738&fid=68&ant_source=zsearch[/url]

 

如果还是报错,请按如下方式进行提问:

正确提问方式:使用环境(沙箱还是正式环境)+接口名称(中文+英文)+ 请求参数 + 报错信息详情

 

目录
相关文章
|
前端开发 Java 数据安全/隐私保护
聊聊 OAuth 2.0 的 Token 续期处理
Token 校验逻辑 // CheckTokenEndpoint.checkToken @RequestMapping(value = "/oauth/check_token") @ResponseBody public Map checkToken(@RequestPara.
1768 0
|
4月前
|
API 定位技术 开发者
【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
27 0
【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。
EMQ
|
9月前
|
JSON 安全 算法
深入解析 MQTT 中基于 Token 的认证和 OAuth 2.0
本文将深入了解基于 Token 的认证和 OAuth 2.0,阐述它们的原理并展示它们在 MQTT 中的应用。
EMQ
248 0
深入解析 MQTT 中基于 Token 的认证和 OAuth 2.0
|
存储 JSON 安全
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
授权代码授权类型可能是您将遇到的最常见的 OAuth 2.0 授权类型。Web 应用程序和本机应用程序都使用它在用户授权应用程序后获取访问令牌。 这篇文章是我们探索常用的 OAuth 2.0 授权类型系列文章的第一部分。如果您想在深入了解 OAuth 2.0 之前稍微回顾一下并了解更多信息,请查看OAuth 到底是什么?
97 0
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
|
安全 API 数据安全/隐私保护
详谈微信网页授权access_token与普通access_token区别
还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群
详谈微信网页授权access_token与普通access_token区别
|
安全 API 数据安全/隐私保护
api漏洞系列-通过access_token绕过权限
主要业务逻辑 Zopim仪表板帐户的所有者具有创建代理和禁用代理的能力,当禁用代理时,它限制用户访问他登录到仪表板(这是可以的),但没有使access_token过期。如果access_tokens被重用,我们就可以再次获得对帐户的访问权! 想象一下这样一种情况:所有者创建代理并提供管理访问权,当所有者知道其配置文件时,他只禁用它!但是在这里禁用帐户似乎不安全,帐户可以通过access_token使用。
422 0
|
存储 算法 Shell
登录凭证(cookie+session和Token令牌)
登录凭证(cookie+session和Token令牌)
280 0
登录凭证(cookie+session和Token令牌)
|
XML NoSQL 关系型数据库
微信公众平台开发(二)——access_token、日志
微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息。
微信公众平台开发(二)——access_token、日志
|
Java
如何获取第三方应用授权app_auth_token
一,说明    1.第三方应用文档:[url]https://docs.open.alipay.com/20160728150111277227/intro[/url]     2.作用:代替商户发起相关逻辑请求 二,配置    1.
4892 0
|
Java
JWT令牌如何将令牌token转换为登录者的信息的?
java项目的权限认证系统大家都熟悉,之前本人也用到过几种认证token的方式,其中JWT是我觉得最神秘的一种,因为我一直没搞明白,在认证完成后,访问业务接口时,接口是怎么把请求头中的token转换为接口中的用户信息的,直到HandlerMethodArgumentResolver这个接口进入我的视野。
181 0
JWT令牌如何将令牌token转换为登录者的信息的?