该步骤主要是为获取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时会原样回传给商户。
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]
7、沙箱授权URL拼接规则
拼接规则:[url]https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL[/url]
六、常见问题
1、Q:报错isv.invalid-token:无效的令牌?
A:排查方案:[url]https://openclub.alipay.com/read.php?tid=4738&fid=68&ant_source=zsearch[/url]
如果还是报错,请按如下方式进行提问:
正确提问方式:使用环境(沙箱还是正式环境)+接口名称(中文+英文)+ 请求参数 + 报错信息详情