极简版授权请求参数和返回
授权请求参数
使用极简版 SDK 接入 authcenter
PURE_OAUTH_SDK
(原先为 LOGIN 或者 AUTHACCOUNT)。原先没有设定使用默认值的话需要新增(业务流程及参数不会变化,授权通过此参数决定回调类型)。极简版 SDK 接入
https://authweb.alipay.com/auth?auth_type=`**PURE_OAUTH_SDK**`&app_id=2016051801417322&scope=auth_user&state=XXXXXXX
对比说明
https://authweb.alipay.com/auth?auth_type=PURE_OAUTH_SDK
app_id=2016051801417322
scope=auth_user
state=XXXXXXXXX(自定义 base64 编码)
// auth_type:指定为PURE_OAUTH_SDK
// app_id: 与原来保持一致
// scope:与原来保持一致
// state:商家自定义参数。为防止CSRF攻击,建议开发者请求授权时传入state参数,该参数要做到既不可预测,又可以证明客户端和当前第三方网站的登录认证状态存在关联。只允许base64字符(长度小于等于100)
// 其它参数:均不需要,由于不过OpenAPI,所以也无需签名流程
参数说明
参数 | 类型 | 必填 | 最大长度 | 描述 |
---|---|---|---|---|
auth_type | String | 是 | 14 | 极简版 SDK 固定参数,传其它参数无效。示例值:PURE_OAUTH_SDK |
app_id | String | 是 | 16 | 支付宝分配给开发者的应用 ID。示例值:2014123100022800 |
scope | String | 是 | 8 | 极简版 SDK 固定参数,传其它参数无效。auth_base:为用户基础授权,仅用于静默获取用户支付宝 UID。 auth_user:获取用户信息,网站支付宝登录。 |
state | String | 是 | 100 | OAuth 2 协议参数,可设置为随机字符串的 base64 编码(100位以内),防止 CSRF,详细信息可查看 OAuth2 协议内容。 |
唤起部分
https://authweb.alipay.com/auth?auth_type=PURE_OAUTH_SDK&app_id=2016051801417322&scope=auth_user&state=XXXXXXX
iOS 样例
( void )auth
{
NSDictionary *params = @{kAFServiceOptionBizParams: @{
// 上文的参数部分值
@"url" : @"xxx"
},
// 回跳当前应用的scheme,不需要://
kAFServiceOptionCallbackScheme: @"apsdkdemo" ,
};
[AFServiceCenter callService:AFServiceAuth withParams:params andCompletion:^(AFServiceResponse *response) {
NSLog ( @"%@" , response.result);
// 直接从response.result上获取业务结果参数,如授权的authcode
if (AFResSuccess == response.responseCode) {
NSString *authCode = response.result[ @"code" ];
NSString *msg = response.result[ @"msg" ];
// 按原有业务处理进行...
}
}];
}
Android 样例
public void auth () {
// 商家对接业务所约定的参数
Map<String, String> bizParams = new HashMap<>();
bizParams.put( "url" , "xxx" ); // key为URL,value是上文的URL值
// 授权完成后回跳的scheme
// 需与@{link com.alipay.sdk.app.AlipayResultActivity}的配置保持一致
String scheme = "xxx" ;
OpenAuthTask task = new OpenAuthTask( this );
// 支付宝SDK目前已支持的支付宝客户端内业务
OpenAuthTask.BizType bizType = OpenAuthTask.BizType.AccountAuth;
task.execute(scheme, bizType, bizParams, callback);
}
回跳处理
-[AFServiceCenter handleResponseURL:withCompletion:]
把回跳 URL 给到极简版 SDK,极简版 SDK 处理完 URL 会把业务出参返回给业务,同时该接口上的 block 只有在跳转支付宝客户端授权过程中压后台 App 被系统清除时才会被回调。iOS 示例
( BOOL )application:( UIApplication *)app openURL:( NSURL *)url options:( NSDictionary < NSString *, id > *)options
{
if ([url.host isEqualToString: @"apmqpdispatch" ]) {
[AFServiceCenter handleResponseURL:url withCompletion:^(AFServiceResponse *response) {
// 该接口上的block只有在跳转支付宝客户端授权过程中压后台App被系统kill掉时才会被回调
if (AFResSuccess == response.responseCode) {
NSLog ( @"%@" , response.result);
/* 数据样例
{
"app_id" = 2016051801417322;
"auth_code" = 41f084c3ab4b4be6b6dd8d25dac1YF46;
"result_code" = SUCCESS;
"scope" = auth_user;
"state" = XXXXX(自定义 base64 编码);
}
*/
}
}];
return YES ;
}
return YES ;
}
Android 示例
/**
* 支付宝SDK结果回调,主线程中执行
* 为了避免内存泄漏,支付宝SDK内不强引用该回调
* 请持有该callback引用,以免callback被回收导致无法获取业务结果
*/
private OpenAuthTask.Callback callback = new OpenAuthTask.Callback() {
@Override
public void onResult ( int i, String s, Bundle bundle) {
if (i == OpenAuthTask.OK) {
/* 数据样例
"app_id" = 2016051801417322;
"auth_code" = 41f084c3ab4b4be6b6dd8d25dac1YF46;
"result_code" = SUCCESS;
"scope" = auth_user;
"state" = XXXX(自定义 base64 编码);
*/
String authCode = bundle.getString( "auth_code" );
// 执行原有处理逻辑
}
}
};