支付寶獲取userid的流程
如果只是要獲取用戶的userid,可以使用支付寶靜默授權方式祟绊。
-
支付寶授權流程圖全過程
支付寶用戶授權流程圖
需要開發(fā)的關鍵點是:獲取auth_code楼入、auth_code換取access_token與user_id、使用token完成其他業(yè)務處理牧抽,如token換取用戶信息等嘉熊。
-
商家設置
商家設置
在支付寶收款商戶中,需要設置授權回調地址和密鑰(SHA256withRSA=RSA2) 前端獲取auth_code鏈接拼接
前段根據(jù)支付寶商家的appid獲取到auth_code,url拼接規(guī)則:https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL
url參數(shù)說明
參數(shù)名 | 是否必須 | 長度 | 描述 |
---|---|---|---|
app_id | 是 | 16 | 開發(fā)者應用的app_id扬舒; 相同支付寶賬號下阐肤,不同的app_id獲取的token切忌混用。 |
scope | 是 | 不定讲坎,取決于請求授權時scope個數(shù) | 接口權限值孕惜,目前只支持auth_user(獲取用戶信息、網(wǎng)站支付寶登錄)晨炕、auth_base(用戶信息授權)诊赊、auth_ecard(商戶會員卡)、auth_invoice_info(支付寶閃電開票)府瞄、auth_puc_charge(生活繳費)五個值;多個scope時用”,”分隔碧磅,如scope為”auth_user,auth_ecard”時,此時獲取到的access_token遵馆,既可以用來獲取用戶信息鲸郊,又可以給用戶發(fā)送會員卡。 |
redirect_uri | 是 | 100 | 授權回調地址货邓,是經(jīng)過URLENCODE轉義 的url鏈接(url必須以http或者https開頭)秆撮; 在請求之前,開發(fā)者需要先到開發(fā)者中心對應應用內换况,配置授權回調地址职辨。 redirect_uri與應用配置的授權回調地址域名部分必須一致。 |
state | 否 | 100 | 商戶自定義參數(shù)戈二,用戶授權后舒裤,重定向到redirect_uri時會原樣回傳給商戶。 為防止CSRF攻擊觉吭,建議開發(fā)者請求授權時傳入state參數(shù)腾供,該參數(shù)要做到既不可預測,又可以證明客戶端和當前第三方網(wǎng)站的登錄認證狀態(tài)存在關聯(lián)。 |
注意:
1.redirect_uri的地址和支付寶商家配置的回調地址域名應該相同伴鳖,否則會提示找不到頁面节值。
2.如果使用靜默授權請將scope設置為auth_base。
3.其他的與授權無關的參數(shù)可以直接拼接到redirect_uri或者存放到state字段榜聂,
授權回調時會將參數(shù)原樣返回搞疗。
- 授權回調
當用戶授權成功后,會跳轉至開發(fā)者定義的回調頁面须肆,支付寶會在回調頁面請求中加
入?yún)?shù)匿乃,包括auth_code、app_id休吠、scope等,支付寶請求開發(fā)者回調頁面示例如下:
http或https打頭的授權回調地址? app_id=2016032301002387 &scope=auth_user&auth_code=10e20498fe5d42f18427d893fc06WX59
關鍵返回參數(shù)說明:
參數(shù)名 | 是否必須 | 長度 | 描述 |
---|---|---|---|
app_id | 是 | 16 | 開發(fā)者應用的app_id业簿;相同支付寶賬號下瘤礁,不同的app_id獲取的token切忌混用。 |
scope | 是 | 不定梅尤,取決于請求授權時scope個數(shù) | 成功授權的接口權限值柜思,目前只支持auth_user(獲取用戶信息、網(wǎng)站支付寶登錄)巷燥、auth_base(用戶信息授權)赡盘、auth_ecard(商戶會員卡)、auth_invoice_info(支付寶閃電開票)缰揪、auth_puc_charge(生活繳費)五個值;多個scope時用“,”分隔陨享,如scope為“auth_user,auth_ecard”時,此時獲取到的access_token钝腺,既可以用來獲取用戶信息抛姑,又可以給用戶發(fā)送會員卡 |
error_scope | 否 | 不定,少于請求授權時scope個數(shù) | error_scope表示授權是失敗的scope列表及對應的錯誤信息(錯誤列表之間用“ |
state | 否 | 100 | 商戶自定義參數(shù)艳狐,用戶授權后定硝,重定向到redirect_uri時會原樣回傳給商戶。 為防止CSRF攻擊毫目,建議開發(fā)者請求授權時傳入state參數(shù)蔬啡,該參數(shù)要做到既不可預測,又可以證明客戶端和當前第三方網(wǎng)站的登錄認證狀態(tài)存在關聯(lián)镀虐。 |
auth_code | 是 | 目前為32箱蟆,后期會根據(jù)安全策略適當調整,請勿限制該字段長度刮便。 | 臨時授權碼顽腾,一次性有效,同時若超過有效期未使用,則會失效抄肖。有效期目前至少為5分鐘久信,最長為24小時。請獲取auth_code后盡快通過調用alipay.system.oauth.token接口獲取訪問令牌 |
- 在sdk的幫助下用auth_code交換到userid(java示例)
在獲取auth_code后漓摩,會到后臺調用sdk方法裙士,根據(jù)密鑰和支付寶公鑰交換到userid:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2",proxyHost, proxyPort);
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode("2e4248c2f50b4653bf18ecee3466UC18");
request.setGrantType("authorization_code");
String userId = null;
try {
AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);
userId = oauthTokenResponse.getUserId();
} catch (AlipayApiException e) {
//處理異常
e.printStackTrace();
}
注意:DefaultAlipayClient有多個構造函數(shù):
構造函數(shù)
代理