您好,登錄后才能下訂單哦!
支付寶如何實現第三方授權登錄功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
對于第三方登錄,我們常見了,很多應用可以進行第三方登錄,我常用的有:QQ、微信、新浪、支付寶等等,今天我們就一起來簡單學習一下支付寶第三方授權登錄。
打開支付寶開發平臺,注冊成為開發者,點擊開發者中心,在我的應用中創建一個應用:
點擊功能信息,添加我們需要的功能:
到這我們還不能進行接口調試,因為我們的應用沒有上線,APPID是無效的,這里阿里給了我們一個解決方案,就是通過沙箱模式進行接口調試,下面我們來配一下我們的沙箱模式:
配置過RAS2就可以不用配置RAS1了,公鑰和私鑰的生成規則,查看支付寶文檔,我這里是使用支付寶提供的秘鑰生成工具生成的,創建完成后,我們下載的文件夾下會生成三個文件:rsa_private_key.pem(秘鑰)、rsa_private_key_pkcs8.pem(java專用秘鑰)、rsa_public_key.pem(公鑰),我們把生成的公鑰上傳到沙箱環境下RAS2下,點擊查看支付寶公鑰,將公鑰保存,接下來開發使用。應用網關和授權回調地址,這里因為是本地調試,暫時寫為圖上內容即可。
做好這些準備工作我們就可以開始進行我們的具體功能實現了,首先我打開支付寶開發平臺開發文檔,點擊基礎能力->第三方應用授權,閱讀一遍內容,我回到文檔的第三步:
注意這里的app_id要填寫沙箱應用的ID,不然是無法完成調用支付登錄頁面的。
<a href="https://openauth.alipaydev.com/oauth3/appToAppAuth.htm?app_id=沙箱環境下的應用ID&redirect_uri=http://127.0.0.1:8080/alipayTest/return_url.jsp" >支付寶第三方登錄</a><br/>
下面我們看一下我們的return_url.jsp的業務處理:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@ page import="java.util.Map"%> <%@ page import="com.alipay.api.*"%> <%@ page import="com.alipay.api.request.*"%> <%@ page import="com.alipay.api.response.*"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>支付寶頁面跳轉同步通知頁面</title> </head> <body> <% //獲取支付寶GET過來反饋信息 Map<String,String> params = new HashMap<String,String>(); Map requestParams = request.getParameterMap(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //亂碼解決,這段代碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉化 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } //獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表(以下僅供參考)// //支付寶用戶號 String app_id = new String(request.getParameter("app_id").getBytes("ISO-8859-1"),"UTF-8"); out.write(app_id + "\n"); //獲取第三方登錄授權 String alipay_app_auth = new String(request.getParameter("source").getBytes("ISO-8859-1"),"UTF-8"); out.write(alipay_app_auth + "\n"); //第三方授權code String app_auth_code = new String(request.getParameter("app_auth_code").getBytes("ISO-8859-1"),"UTF-8");//獲的第三方登錄用戶授權app_auth_code out.write(app_auth_code + "\n"); String privateKey = "生成的秘鑰"; String publicKey = "支付寶公鑰"; //使用auth_code換取接口access_token及用戶userId //AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","應用APPID",privateKey,"json","UTF-8",publicKey,"RSA2");//正常環境下的網關 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do","沙箱環境下的應用APPID",privateKey,"json","UTF-8",publicKey,"RSA2");//沙箱下的網關 AlipayOpenAuthTokenAppRequest requestLogin1 = new AlipayOpenAuthTokenAppRequest(); requestLogin1.setBizContent("{" + "\"grant_type\":\"authorization_code\"," + "\"code\":\""+ app_auth_code +"\"" + "}"); //第三方授權 AlipayOpenAuthTokenAppResponse responseToken = alipayClient.execute(requestLogin1); if(responseToken.isSuccess()){ out.write("<br/>調用成功" + "\n"); out.write(responseToken.getAuthAppId() + "\n"); out.write(responseToken.getAppAuthToken() + "\n"); out.write(responseToken.getUserId() + "\n"); } else { out.write("調用失敗" + "\n"); } %> </body> </html>
到這里我們的支付寶第三方登錄授權就為大家介紹完畢,不過需要指出的是,支付寶第三方授權登錄,要求使用者不能通過該方式進行用戶導流,也就是說第三方登錄成功后,不能出現引導用戶完善基本信息的內容,只能使用支付的用戶ID進行用戶身份標示。
看完上面的第三授權登錄,一定要很多小朋友感覺不過癮,第三方登錄我們只能拿到用的支付寶ID,如果我們需要獲取的用戶信息包含用戶ID、昵稱、性別、省份、城市、用戶頭像、用戶類型、用戶狀態、是否實名認證、是否是學生等信息,這是我們就需要獲得一個用戶授權,通過用戶授權,我們可以獲得用戶在支付寶上面的信息。下面我們開始具體的功能實現:
首先我們看一下支付寶開發文檔,基礎功能->獲取會員信息->快速接入,我們看第四步下的第一小步,查看沙箱環境下URL拼接:
<a href="https://openauth.alipaydev.com/oauth3/publicAppAuthorize.htm?app_id=沙箱環境下的APPID&scope=auth_user&redirect_uri=http://127.0.0.1:8080/alipayTest/return_url.jsp" >用戶授權</a><br/>
這里需要注意的是關于scope的說明:
接下來我們看一下return_url.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@ page import="java.util.Map"%> <%@ page import="com.alipay.api.*"%> <%@ page import="com.alipay.api.request.*"%> <%@ page import="com.alipay.api.response.*"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>支付寶頁面跳轉同步通知頁面</title> </head> <body> <% //獲取支付寶GET過來反饋信息 Map<String,String> params = new HashMap<String,String>(); Map requestParams = request.getParameterMap(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //亂碼解決,這段代碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉化 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } //獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表(以下僅供參考)// //支付寶用戶號 String app_id = new String(request.getParameter("app_id").getBytes("ISO-8859-1"),"UTF-8"); out.write(app_id + "\n"); //獲取用戶信息授權 String auth_user = new String(request.getParameter("scope").getBytes("ISO-8859-1"),"UTF-8"); out.write(auth_user + "\n"); //獲的第三方登錄用戶授權auth_code String auth_code = new String(request.getParameter("auth_code").getBytes("ISO-8859-1"),"UTF-8"); out.write(auth_code + "\n"); String privateKey = "私鑰"; String publicKey = "支付寶公鑰"; //使用auth_code換取接口access_token及用戶userId //AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","應用APPID",privateKey,"json","UTF-8",publicKey,"RSA2");//正常環境下的網關 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do","沙箱環境先的應用APPID",privateKey,"json","UTF-8",publicKey,"RSA2");//沙箱下的網關 //獲取用戶信息授權 AlipaySystemOauthTokenRequest requestLogin2 = new AlipaySystemOauthTokenRequest(); requestLogin2.setCode(auth_code); requestLogin2.setGrantType("authorization_code"); try { AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(requestLogin2); out.write("<br/>AccessToken:"+oauthTokenResponse.getAccessToken() + "\n"); //調用接口獲取用戶信息 AlipayClient alipayClientUser = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", "2016073100131450", privateKey, "json", "UTF-8", publicKey, "RSA2"); AlipayUserInfoShareRequest requestUser = new AlipayUserInfoShareRequest(); try { AlipayUserInfoShareResponse userinfoShareResponse = alipayClient.execute(requestUser, oauthTokenResponse.getAccessToken()); out.write("<br/>UserId:" + userinfoShareResponse.getUserId() + "\n");//用戶支付寶ID out.write("UserType:" + userinfoShareResponse.getUserType() + "\n");//用戶類型 out.write("UserStatus:" + userinfoShareResponse.getUserStatus() + "\n");//用戶賬戶動態 out.write("Email:" + userinfoShareResponse.getEmail() + "\n");//用戶Email地址 out.write("IsCertified:" + userinfoShareResponse.getIsCertified() + "\n");//用戶是否進行身份認證 out.write("IsStudentCertified:" + userinfoShareResponse.getIsStudentCertified() + "\n");//用戶是否進行學生認證 } catch (AlipayApiException e) { //處理異常 e.printStackTrace(); } } catch (AlipayApiException e) { //處理異常 e.printStackTrace(); } %> </body> </html>
到這里我們通過沙箱模式進行支付寶第三方登錄與獲取用戶授權的內容就和大家分享完畢,小伙伴快去試一試吧。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。