一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 支付寶開發(fā)平臺之第三方授權登錄與獲取用戶信息

支付寶開發(fā)平臺之第三方授權登錄與獲取用戶信息

2020-08-25 11:10小破孩123 Java教程

本文主要介紹了第三方授權登錄與獲取用戶信息的實例方法,具有很好的參考價值。下面跟著小編一起來看下吧

對于第三方登錄,我們常見了,很多應用可以進行第三方登錄,我常用的有:QQ、微信、新浪、支付寶等等,今天我們就一起來簡單學習一下支付寶第三方授權登錄。

打開支付寶開發(fā)平臺,注冊成為開發(fā)者,點擊開發(fā)者中心,在我的應用中創(chuàng)建一個應用:

支付寶開發(fā)平臺之第三方授權登錄與獲取用戶信息

點擊功能信息,添加我們需要的功能:

支付寶開發(fā)平臺之第三方授權登錄與獲取用戶信息

到這我們還不能進行接口調試,因為我們的應用沒有上線,APPID是無效的,這里阿里給了我們一個解決方案,就是通過沙箱模式進行接口調試,下面我們來配一下我們的沙箱模式:支付寶開發(fā)平臺之第三方授權登錄與獲取用戶信息

配置過RAS2就可以不用配置RAS1了,公鑰和私鑰的生成規(guī)則,查看支付寶文檔,我這里是使用支付寶提供的秘鑰生成工具生成的,創(chuàng)建完成后,我們下載的文件夾下會生成三個文件:rsa_private_key.pem(秘鑰)、rsa_private_key_pkcs8.pem(java專用秘鑰)、rsa_public_key.pem(公鑰),我們把生成的公鑰上傳到沙箱環(huán)境下RAS2下,點擊查看支付寶公鑰,將公鑰保存,接下來開發(fā)使用。應用網關和授權回調地址,這里因為是本地調試,暫時寫為圖上內容即可。

做好這些準備工作我們就可以開始進行我們的具體功能實現了,首先我打開支付寶開發(fā)平臺開發(fā)文檔,點擊基礎能力->第三方應用授權,閱讀一遍內容,我回到文檔的第三步:

支付寶開發(fā)平臺之第三方授權登錄與獲取用戶信息

注意這里的app_id要填寫沙箱應用的ID,不然是無法完成調用支付登錄頁面的。

?
1
<a href="https://openauth.alipaydev.com/oauth2/appToAppAuth.htm?app_id=沙箱環(huán)境下的應用ID&redirect_uri=http://127.0.0.1:8080/alipayTest/return_url.jsp" >支付寶第三方登錄</a><br/>

下面我們看一下我們的return_url.jsp的業(yè)務處理:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<%@ 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");//正常環(huán)境下的網關
  AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do","沙箱環(huán)境下的應用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、昵稱、性別、省份、城市、用戶頭像、用戶類型、用戶狀態(tài)、是否實名認證、是否是學生等信息,這是我們就需要獲得一個用戶授權,通過用戶授權,我們可以獲得用戶在支付寶上面的信息。下面我們開始具體的功能實現:

首先我們看一下支付寶開發(fā)文檔,基礎功能->獲取會員信息->快速接入,我們看第四步下的第一小步,查看沙箱環(huán)境下URL拼接:

?
1
<a href="https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=沙箱環(huán)境下的APPID&scope=auth_user&redirect_uri=http://127.0.0.1:8080/alipayTest/return_url.jsp" >用戶授權</a><br/>

這里需要注意的是關于scope的說明:

  • auth_base:以auth_base為scope發(fā)起的網頁授權,是用來獲取進入頁面的用戶的userId的,并且是靜默授權并自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(通常是業(yè)務頁面)。
  • auth_user:以auth_user為scope發(fā)起的網頁授權,是用來獲取用戶的基本信息的(比如頭像、昵稱等)。但這種授權需要用戶手動同意,用戶同意后,就可在授權后獲取到該用戶的基本信息。

接下來我們看一下return_url.jsp文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<%@ 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");//正常環(huán)境下的網關
  AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do","沙箱環(huán)境先的應用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");//用戶賬戶動態(tài)
  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>

到這里我們通過沙箱模式進行支付寶第三方登錄與獲取用戶授權的內容就和大家分享完畢,小伙伴快去試一試吧。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/AndroidJotting/p/6515268.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲色图第四色 | 亚洲图片综合区 | 日日摸日日碰夜夜爽97纠 | 免费观看在线永久免费xx视频 | 亚洲va久久久久综合 | 97porm国内自拍视频 | 午夜欧美精品久久久久久久久 | 香蕉久久一区二区三区啪啪 | 99热免费在线 | 倩女还魂在线观看完整版免费 | 亚洲免费视频在线 | 性做久久久久久久久浪潮 | 青青草成人在线观看 | 欧美日韩亚毛片免费观看 | 日韩精品视频在线观看免费 | 国产99视频精品免费视频7 | 精品视频手机在线观看免费 | 香蕉国产人午夜视频在线 | 王王的视频ivk | 日韩精品中文字幕视频一区 | 毛片免| 免费观看美景之屋 | 四虎小视频 | 日产乱码2021永久手机版 | 欧美日韩一区二区三区在线观看 | 91美女在线| 冰雪奇缘1完整版免费观看 变形金刚第一部 | 乌克兰肛交影视 | 91看片淫黄大片.在线天堂 | 好舒服好爽再快点视频 | 成人免费体验区福利云点播 | 精品综合久久久久久8888 | 白虎喷水 | 亚洲免费色图 | 亚洲精品动漫在线观看 | 欧美日韩一区视频 | 国产精品日韩欧美一区二区三区 | 亚洲a视频在线观看 | 日韩亚洲欧美综合一区二区三区 | 调教女帝| 精品国产成人 |