靜默授權與主動授權對于使用者來說的差別
- 靜默授權使用者是沒有感覺的,實際商戶是悄悄的就把使用者的user_id(PID)擷取到
- 主動授權使用者是有感覺的并且需要使用者去進行點選授權确定按鈕的,使用者如果不經授權的話,商戶是拿不到使用者的資訊的。
靜默授權與主動授權對于商戶來說的差別
- 靜默授權商戶隻能拿到使用者的user_id(PID)這個資訊
- 主動授權商戶可以拿到使用者的user_id(PID)、頭像、昵稱等資訊
靜默授權與主動授權對于小程式稽核的差別
- 靜默授權在小程式中的任何地方都可以任意調用授權的,都不會影響稽核
- 主動授權不能在小程式首頁直接彈出授權窗進行授權的
靜默授權與主動授權scope的差別
- 靜默授權scope=auth_base
- 主動授權scope=auth_user(會員資訊)、auth_ecard(會員卡)、auth_invoice_info(支付寶閃電開票)、auth_puc_charge(生活繳費)
靜默授權與主動授權使用場景
- 靜默授權主要使用場景為商戶擷取使用者的user_id(PID)來進行區分使用者
- 主動授權主要使用場景為商戶擷取使用者的資訊例如昵稱頭像,進行個人資訊的展示,以及會員卡開卡,閃電開票,生活繳費等功能
靜默授權與主動授權的代碼示例
靜默授權:在前端進行靜默授權擷取到code碼
my.getAuthCode({
scopes: 'auth_base',
success: ({ authCode }) => {
console.log('App Hide: ' + JSON.stringify(authCode));
},
});
},
把code碼傳到前端使用alipay.system.oauth.token(換取授權通路令牌)
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode("7f7d1f4b47894014b3eb9043c2caUB10");
// request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response;
try {
response = alipayClient.execute(request,null,APPAUTHTOKEN);
if(response.isSuccess()){
System.out.println("調用成功" + response.getBody());
} else {
System.out.println("調用失敗"+ response.getCode());
}
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
傳回response值:
{"alipay_system_oauth_token_response":{"access_token":"authbseB77127d297e7a47e7b64060ea38c64X10","alipay_user_id":"20880049095928573054948551013310","expires_in":31536000,"re_expires_in":31536000,"refresh_token":"authbseBbaa44351529c48f9b0a9e585a8668D10","user_id":"2088802394200105"},"sign":"iSFOsNrZGR/3swD0KuJJE2t/t4gWWJxWAN9tHeMyZSugotBMyDLEfmRuF1K4eCmOCbFPAPye/0kGdwJfYCXD7JDH09X4Lku6brhU6yHnY7jouRpnbFltRTcSk2cgMbnHdNp3Xmf6HzaoNeGTM4zvxTZqFcMmjbKAbKxbdUvCjT+U362yjvywGGvrFXxb7i+0NoT8wgJ3UJG/s6yiLLhN6GHeD68k8uA6nqR8xz5xefiZd6156nNtXQaGMpfn7jOvU6hSlQR0kWd9DZNxqHqoTSej9u0/Qeh5uAsIQVqHKcL9Ou5TbyZ10IyEg+R4rlG6dS9r6FFT81tnIQCFEVZl4g=="}
其中令牌值的字首為authbse
主動授權(擷取會員資訊為例)
my.getAuthCode({
scopes: 'auth_user',
success: ({ authCode }) => {
console.log('App Hide: ' + JSON.stringify(authCode));
},
});
和靜默授權一緻。
擷取到的傳回response值:
{"alipay_system_oauth_token_response":{"access_token":"authusrB3eac6725350f462e9cf1e904d600cC10","alipay_user_id":"20880049095928573054948551013310","expires_in":1296000,"re_expires_in":2592000,"refresh_token":"authusrBcb0cb1a1bdd4483f9fcd431242f8fC10","user_id":"2088802394200105"},"sign":"ZtLQhs2WFN3HFyt76Sv2zPMqN7HF+KsVM1YaV1anh7ziA69e9ibtVf/YCcH+64rG5L5U8NGArxEnLrMXIQmW5ZIlQ/zzzlsSH6IZJy+Z26ABFdcHCn3lkEY3q7KThAFPExZhxtkupV8mUGPaZxrue+LSd5ypWiVYjDGJgPiU8hAYwVTzxGumtdeEpS6gp7JgU3X72LENOuPUfwSJARLzAre9aMSRwxrDfQRdUJgqIueUNXqQnd7Zvd6MHl9Yck64xyyywkqPaZ21+bPgwwXdL7ng8o3WUPUUbNbH8KZMWicUiwRAoYRORT+pn5sYC9cJjPmz2QQlyubjlib8lvMs/Q=="}
其中令牌值的字首為authusr
然後根據令牌擷取使用者的資訊,調用alipay.user.info.share(支付寶會員授權資訊查詢接口)
AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
AlipayUserInfoShareResponse response;
try {
response = alipayClient.execute(request,token);
if(response.isSuccess()){
System.out.println("調用成功" + response.getBody());
} else {
System.out.println("調用失敗"+ response.getBody());
}
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
{
"alipay_user_info_share_response": {
"code": "10000",
"msg": "Success",
"user_id": "2088102104794936",
"avatar": "http://tfsimg.alipay.com/images/partner/T1uIxXXbpXXXXXXXX",
"province": "安徽省",
"city": "安慶",
"nick_name": "支付寶小二",
"is_student_certified": "T",
"user_type": "1",
"user_status": "T",
"is_certified": "T",
"gender": "F"
},
"sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}
授權經常遇到的問題
Q:調用alipay.open.auth.token.app報無效的authcode
Q:小程式授權擷取到的auth_code有效期是多久
A:authCode隻能使用一次,使用過後就會失效的,一天内不使用的話也會預設過期。
Q:alipay.system.oauth.token 這個接口報grant_type不能為空
A;調用這個接口的時候必須傳這個grant_type的類型
setGrantType("authorization_code")表示使用授權code碼換取令牌
setGrantType("refresh_token")表示使用重新整理令牌來重新整理所需要使用的令牌
Q:alipay.system.oauth.token 報無效的appid參數
A:如果是ISV商戶的話,需要在調用接口的時候傳入app_auth_token這個應用授權歐安token;如果不是ISV的話,需要檢查傳的APPID是否是小程式APPID
Q:無效的應用授權令牌
A:在調用擷取使用者資訊或者會員卡等接口,擷取授權碼時scope值沒有和産品相對應。可以參考上文中的 靜默授權與主動授權scope的差別