
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL| 参数名 | 是否必须 | 描述 |
|---|---|---|
| app_id | 是 | 开发者应用的 APPID |
| scope | 是 | 接口权限值,目前只支持 auth_user 和 auth_base 两个值 |
| redirect_uri | 是 | 回调页面,是经过转义的url链接(url 必须以 http 或者 https 开头),比如:http%3A%2F%2Fexample.com 在请求之前,开发者需要先到开发者中心对应应用内,配置授权回调地址。 |
| state | 否 | 商户自定义参数,用户授权后,重定向到 redirect_uri 时会原样回传给商户。 为防止 CSRF 攻击,建议开发者请求授权时传入 state 参数,该参数要做到既不可预测,又可以证明客户端和当前第三方网站的登录认证状态存在关联,并且不能有中文。**说明:**参数 由用户自定义拼接,拼接完成后将参数进行 base64 转码。最后将参数拼接为 state=XXXXX 即可,最大长度 100 位。 |
app_id 和 redirect_uri:
https://auth.example.com/authCallBack,则 redirect_uri 内容需要 encode 处理,为 https%3A%2F%2Fauth.example.com%2FauthCallBack。http://auth.example.com/authCallBack、https://auth.example.com/authRedirect、https://auth.example.com/ 都可以进行 OAuth2.0 授权。但与(auth.example.com)关联的二三级域名,如:http://www.example.com/、http://example.com/ 无法进行 OAuth2.0 授权。| scopes | 描述 | 包含的服务端 API 接口 |
|---|---|---|
| auth_base | 静默授权,不会发起授权浮窗,用户授权并自动跳转到回调页。用户感知为直接进入回调页面(通常是业务页面)。在支付宝客户端获取 auth_code,仅可用于 alipay.system.oauth.token(换取授权访问令牌接口)获取支付宝会员标识(user_id)。 | alipay.system.oauth.token |
| auth_user | 主动授权,需要用户手动点击同意,用户同意后可获取用户的基本信息的(比如头像、昵称等),用于 网站支付宝登录 和 获取用户信息。 | alipay.system.oauth.tokenalipay.user.info.share |

http : //example.com/doc/toAuthPage.html?app_id=2014101500013658&source=alipay_wallet&scope=auth_user&auth_code=ca34ea491e7146cc87d25fca24c4cD11package com.java.sdk.demo;
import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipaySystemOauthApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipaySystemOauthApiToken {
public static void main(String[] args) throws ApiException {
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 初始化alipay参数(全局设置一次)
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
defaultClient.setAlipayConfig(alipayConfig);
AlipaySystemOauthApi api = new AlipaySystemOauthApi();
AlipaySystemOauthTokenModel data = new AlipaySystemOauthTokenModel();
data.setCode("4b203fe6c11548bcabd8da5bb087a83b");
data.setGrantType("authorization_code");
data.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
try {
AlipaySystemOauthTokenResponseModel response = api.token(data);
} catch (ApiException e) {
AlipaySystemOauthTokenDefaultResponse errorObject = (AlipaySystemOauthTokenDefaultResponse) e.getErrorObject();
System.out.println("调用失败:" + errorObject);
}
}
}| 参数 | 参数名称 | 类型(长度范围) | 参数说明 | 是否可为空 | 样例 |
|---|---|---|---|---|---|
| grant_type | 授权类型 | String | 值为authorization_code 时,代表用 code 换取;值为 refresh_token 时,代表用 refresh_token 换取 | 不可空 | authorization_code |
| code | 授权码 | String | 用户对应用授权后得到,即第二步中开发者获取到的 auth_code 值 | 与 refresh_token 二选一 | 4b203fe6c11548bcabd8da5bb087a83b |
| refresh_token | 刷新令牌 | String | 刷新access_token时使用 | 与 code 二选一 | 201208134b203fe6c11548bcabd8da5bb087a83b |
{
"access_token":"20120823ac6ffaa4d2d84e7384bf983531473993",
"refresh_token":"20120823ac6ffdsdf2d84e7384bf983531473993",
"user_id":"2088102150477652",
"re_expires_in":"3600",
"auth_start":"2010-11-11 11:11:11",
"expires_in":"3600"
}| 参数 | 参数名称 | 类型(长度范围) | 参数说明 | 是否可为空 | 样例 |
|---|---|---|---|---|---|
| access_token | 交换令牌 | String | 用于获取用户信息 | 不可空 | publicpBa869cad0990e4e17a57ecf7c5469a4b2 |
| user_id | 用户的 userId | String | 支付宝用户的唯一 userId | 不可空 | 2088102104711111 |
| expires_in | 令牌有效期 | String | 交换令牌的有效期,单位秒 | 不可空 | 300 |
| re_expires_in | 刷新令牌有效期 | String | 刷新令牌有效期,单位秒 | 不可空 | 300 |
| refresh_token | 刷新令牌 | String | 通过该令牌可以刷新 access_token | 不可空 | publicpB0ff17e364f0743c79b0b0d7f55e20bfc |
package com.java.sdk.demo;
import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipayUserInfoApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipayUserInfoApiShare {
public static void main(String[] args) throws ApiException {
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 初始化alipay参数(全局设置一次)
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
defaultClient.setAlipayConfig(alipayConfig);
AlipayUserInfoApi api = new AlipayUserInfoApi();
String authToken = null;
try {
AlipayUserInfoShareResponseModel response = api.share(authToken);
} catch (ApiException e) {
AlipayUserInfoShareDefaultResponse errorObject = (AlipayUserInfoShareDefaultResponse) e.getErrorObject();
System.out.println("调用失败:" + errorObject);
}
}
}| 参数 | 参数名称 | 类型(长度范围) | 参数说明 | 是否可为空 | 样例 |
|---|---|---|---|---|---|
| auth_token | 授权令牌 | String | 通过auth_code获取的access_token | 不可空 | publicpB9ea460ff5b5c468c9ccf5e967dc34963 |
{
"province":"安徽省",
"gender":"F",
"user_id":"2088102104794936",
"city":"安庆",
"nick_name":"支付宝小二",
"avatar":"http://tfsimg.alipay.com/images/partner/T1uIxXXbpXXXXXXXX"
}| 参数 | 参数名称 | 类型(长度范围) | 参数说明 | 样例 |
|---|---|---|---|---|
| user_id | 支付宝用户id | String | 支付宝用户的会员 ID,2088 开头的 16 位数字。 | 2088102104794936 |
| avatar | 用户头像 | String | 如果没有数据(用户未设置)时不会返回该信息,请做好容错。 | https://tfsimg.alipay.com/images/partner/T1k0xiXXRnXXXXXXXX |
| nick_name | 用户昵称 | String | 如果没有数据(用户未设置)时不会返回该信息,请做好容错。 | 张三 |
| 同步返回结果码 | 含义 | 说明 |
|---|---|---|
| 10000 | 业务处理成功 | |
| 40001~40006 | 业务处理失败 | 具体失败原因请参考 公共错误码。其它请参考 API 文档。 |
| 20000 | 业务出现未知错误或者系统异常 | 业务出现未知错误或者系统异常(请一定在确定本次调用结果后,发起重试),可调用查询接口发起查询确定结果。 |
success 表示消息获取成功,支付宝就会停止发送异步通知。如果返回 fail 或其他值,表示消息获取失败,支付宝会根据 投递重试策略 重新发送消息到应用网关地址。success,验签失败返回 fail,重新接收异步进行处理。| 响应值 | 描述 | 是否重试 |
|---|---|---|
| fail | 消息获取失败 | 重试 |
| success | 消息获取成功 | 不重试 |