对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ、微信、新浪、支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录。

打开支付宝开发平台,注册成为开发者,点击开发者中心,在我的应用中创建一个应用:

点击功能信息,添加我们需要的功能:

到这我们还不能进行接口调试,因为我们的应用没有上线,APPID是无效的,这里阿里给了我们一个解决方案,就是通过沙箱模式进行接口调试,下面我们来配一下我们的沙箱模式:

配置过RAS2就可以不用配置RAS1了,公钥和私钥的生成规则,查看支付宝文档,我这里是使用支付宝提供的秘钥生成工具生成的,创建完成后,我们下载的文件夹下会生成三个文件:rsa_private_key.pem(秘钥)、rsa_private_key_pkcs8.pem(java专用秘钥)、rsa_public_key.pem(公钥),我们把生成的公钥上传到沙箱环境下RAS2下,点击查看支付宝公钥,将公钥保存,接下来开发使用。应用网关和授权回调地址,这里因为是本地调试,暂时写为图上内容即可。

做好这些准备工作我们就可以开始进行我们的具体功能实现了,首先我打开支付宝开发平台开发文档,点击基础能力->第三方应用授权,阅读一遍内容,我回到文档的第三步:

注意这里的app_id要填写沙箱应用的ID,不然是无法完成调用支付登录页面的。

支付宝第三方登录

下面我们看一下我们的return_url.jsp的业务处理:

支付宝页面跳转同步通知页面

//获取支付宝GET过来反馈信息

Map params = new HashMap();

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("
调用成功" + "\n");

out.write(responseToken.getAuthAppId() + "\n");

out.write(responseToken.getAppAuthToken() + "\n");

out.write(responseToken.getUserId() + "\n");

} else {

out.write("调用失败" + "\n");

}

%>

到这里我们的支付宝第三方登录授权就为大家介绍完毕,不过需要指出的是,支付宝第三方授权登录,要求使用者不能通过该方式进行用户导流,也就是说第三方登录成功后,不能出现引导用户完善基本信息的内容,只能使用支付的用户ID进行用户身份标示。

看完上面的第三授权登录,一定要很多小朋友感觉不过瘾,第三方登录我们只能拿到用的支付宝ID,如果我们需要获取的用户信息包含用户ID、昵称、性别、省份、城市、用户头像、用户类型、用户状态、是否实名认证、是否是学生等信息,这是我们就需要获得一个用户授权,通过用户授权,我们可以获得用户在支付宝上面的信息。下面我们开始具体的功能实现:

首先我们看一下支付宝开发文档,基础功能->获取会员信息->快速接入,我们看第四步下的第一小步,查看沙箱环境下URL拼接:

用户授权

这里需要注意的是关于scope的说明:

auth_base:以auth_base为scope发起的网页授权,是用来获取进入页面的用户的userId的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(通常是业务页面)。

auth_user:以auth_user为scope发起的网页授权,是用来获取用户的基本信息的(比如头像、昵称等)。但这种授权需要用户手动同意,用户同意后,就可在授权后获取到该用户的基本信息。

接下来我们看一下return_url.jsp文件:

支付宝页面跳转同步通知页面

//获取支付宝GET过来反馈信息

Map params = new HashMap();

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("
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("
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();

}

%>

到这里我们通过沙箱模式进行支付宝第三方登录与获取用户授权的内容就和大家分享完毕,小伙伴快去试一试吧。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

java支付宝网页授权登录界面_支付宝开发平台之第三方授权登录与获取用户信息...相关推荐

  1. java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...

    微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击 ...

  2. html登录界面_使用数据库制作一套注册登录系统

    经过了那么多个星期的学习,终于到了使用数据库的阶段了,最基本的也就是制作注册登录与数据库连接. 首先要制作一个注册窗口 先是html界面 < 效果如图: (样子怎么样不重要,重要的是测试) 这主 ...

  3. vb链接mysql登录界面_求大神!有谁会用VB设计用户登陆界面连接到数据库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 '**************************************** Module1.bas 模块代码 '工程 上面按下右键 工程1属性 设 ...

  4. 微信网页授权并获取用户信息

    介绍 在很多微信H5应用里,当用户访问第三方应用时就需要进行微信网页授权,并且很多涉及安全的操作我们必须要先获取用户信息才能继续,本文章简单介绍了微信授权流程,并通过申请微信测试账号来模拟网页授权,用 ...

  5. H5网页使用支付宝授权登录获取用户信息详解

    用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...

  6. 支付宝 网页授权 获取用户信息

    ****** 支付宝 网页授权 获取用户信息(昵称,头像等)****** 最近有个项目 需要获取到支付宝的头像和昵称作为互动数据,作为php新人,对于看文档来说 很是痛苦,网上也没有很多关于支付宝网页 ...

  7. 微信第三方扫描登录 java源代码_微信开放平台基于网站应用授权登录源码(java)...

    1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数: 2. 通过code参数加上AppID和AppSecret等,通过 ...

  8. php支付宝第三方授权,原生 PHP 实现支付宝 App 第三方登录获取用户信息,_PHP_ 少侠科技...

    详细内容 背景 App 项目要求实现第三方 微信 和 支付宝 登录,微信可以直接在 App 端完成认证拿到用户信息,支付宝则需要后端获取. 流程 1.服务端先拿到 App 端 调用 支付宝 SDK 所 ...

  9. 支付宝微信(登录授权,获取用户信息,支付)

    支付宝登录授权: https://docs.open.alipay.com/20160728150111277227/intro 支付宝获取用户信息: https://docs.open.alipay ...

最新文章

  1. springboot集合jpa使用
  2. Java 增强型的for循环 for each
  3. 人工智能与大数据开发的12个注意事项
  4. 理清竞争关系与互补关系,转自“XIAOTIE”
  5. python datetime计算时间差_用datetime计算时间差
  6. java 为什么需要常量池 1
  7. 记录程序写入日志_终于有人把MySQL 三大日志讲清楚了
  8. android 实现SSL握手协商
  9. 【Python学习】内置函数(不断更新)
  10. SpringBoot 精通系列-创建SpringBoot的入门项目
  11. mysql连接编码设置_MySQL基础 - 编码设置
  12. “轻量级的”Istio,微软开源了一个基于 Envoy 的服务网格
  13. MYSQL主从不同步延迟原理分析及解决方案
  14. 一个程序员的爱情和他的小棉袄
  15. 基于mAppWidget实现手绘地图--索引DEMO
  16. Atitit Atitit.软件兼容性原理----------API兼容 Qa7
  17. mysql建三行三列表格_基于另一个表中列的名称在mysql中创建表
  18. Git(4):远程仓库
  19. 「解决方案」5G基站电气监控云平台
  20. ydui的datetime日期选择组件

热门文章

  1. android操作系统
  2. python 字符串相似度判断详解
  3. 为什么计算机专业要学概率统计,计算机类专业概率统计的教学
  4. 文献管理三剑客之mendeley 寻找投稿期刊的相关参考文献格式和插入
  5. CactiEZ-安装篇
  6. NXP PCF85063芯片的实时时钟
  7. 计算机如何更改用户名的背景,Win10系统下如何更改登录屏幕背景?
  8. NvRAM BIOS
  9. linux下分析cel文件,CEL格式文件 如何打开CEL文件 CEL是什么格式的文件 用什么打开 - The X 在线工具...
  10. 设计界面的十二条简单的原则