支付宝开发平台之第三方授权登录与获取用户信息

对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有: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/oauth2/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/oauth2/publicAppAuthorize.htm?app_id=沙箱环境下的APPID&scope=auth_user&redirect_uri=http://127.0.0.1:8080/alipayTest/return_url.jsp" >用户授权</a><br/>

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

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

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

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

(0)

相关推荐

  • Android实现第三方授权登录、分享以及获取用户资料

    由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一个组件,目前支持如QQ.微信.新浪微博.腾讯微博.开心网.人人网.豆瓣.网易微博.搜狐微博.facebook.twitter.google+

  • 支付宝开发平台之第三方授权登录与获取用户信息

    对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ.微信.新浪.支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录. 打开支付宝开发平台,注册成为开发者,点击开发者中心,在我的应用中创建一个应用: 点击功能信息,添加我们需要的功能: 到这我们还不能进行接口调试,因为我们的应用没有上线,APPID是无效的,这里阿里给了我们一个解决方案,就是通过沙箱模式进行接口调试,下面我们来配一下我们的沙箱模式: 配置过RAS2就可以不用配置RAS1了,公钥和私钥的生成规则,查看支

  • 微信小程序实现授权登录之获取用户信息

    本文实例为大家分享了微信小程序实现获取用户信息的具体代码,供大家参考,具体内容如下 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. 登录流程时序 效果展示: 功能实现: 新建一个login页面 login.js: wx.getUserProfile用于获取用户信息 wx.getStorageSync()用于获取缓存,进入小程序时调用 wx.setStorageSync()用于保存缓存,保存登录信息,下次进入小程序自动登录 Page(

  • PHP版微信第三方实现一键登录及获取用户信息的方法

    本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要"服务号"才可以哦,所以必须到官方申请. 一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的项目在二级域名就写二级域名 前端url授权地址,在url中填写appid与你项目中方法中的oauth的地址,具体在下面的代码中可以

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

    微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击该菜单就进入用户个人中心的功能,通常应用于各个公众账号中的会员服务. 如何在微信自定义菜单中将用户导航到个人中心页面呢? 首选需要通过用户点击获取用户openid,而通过用户的点击跳转获取用户openid就必须在菜单中动态绑定用户的openid,或者在菜单的跳转URL中填写微信提供的链接,官方给了两个链接类型

  • 微信网页授权并获取用户信息的方法

    介绍 在很多微信H5应用里,当用户访问第三方应用时就需要进行微信网页授权,并且很多涉及安全的操作我们必须要先获取用户信息才能继续,本文章简单介绍了微信授权流程,并通过申请微信测试账号来模拟网页授权,用户在授权页点击确定登录后获取用户信息并显示在前端页面,最后效果如下图 工具及开发准备 1. 微信开发者工具及微信测试号 因为是微信授权,所以必须要在微信环境下使用,首先我们要在这里安装微信开发者工具,因为我们没有自己的应用,所以还需要在微信公众平台申请一个接口测试号,这个接口测试号就相当于我们的第三

  • 微信小程序学习笔记之登录API与获取用户信息操作图文详解

    本文实例讲述了微信小程序学习笔记之登录API与获取用户信息操作.分享给大家供大家参考,具体如下: 前面介绍了微信小程序跳转页面.传递参数获得数据,这里来分析一下登录API与获取用户信息操作方法. [小程序登录]wx.login() app.js: App({ onLaunch: function () { // 登录 wx.login({ success: function (res) { if (res.code) { //发起网络请求 wx.request({ url: 'https://w

  • 微信开发之网页授权获取用户信息(二)

    在公众号的配置过程中,许多开发者会在菜单中加入HTML5页面,有时在页面内需要访问页面的用户信息,此时就需要网页授权获取用户基本信息 我们提醒大家:本文介绍讲述的内容是基于yii2.0框架 1.设置授权回调域名:开发 ---> 接口权限 找到"网页授权获取用户基本信息",点击后面对应的"修改",在弹框响应位置填写授权回调域名即可,此处的域名不需要加http:// (关于网页授权回调域名的说明详情可参考公众平台开发者文档) 2.获取授权 关于OAuth2.0博主

  • php 微信开发获取用户信息如何实现

    php 微信开发获取用户信息 获取用户信息的大致算法是 用户授权登录第三方网站, 重点:scope参数: snsapi_basic 静默登录,不需要用户授权,只能获取到openid: snsapi_userinfo ,需要用户点击授权,能获取到openid和所有用户信息: 第一步:先获取用户的code值: 第二步:根据code值去获取access_token,每次请求的值都不一样,如果没有使用,每五分钟更新一次: 第三步:根据access_token获取用户信息: 1.获取code代码实现: g

  • vue3 微信扫码登录及获取个人信息实现的三种方法

    目录 一.流程: 二.前置条件: 三.具体登录实现 实现方式一: 方式二: 方式三:结合后端获取到二维码 四.登录微信后获取微信中用户头像和昵称 一.流程: 微信提供的扫码方式有两种,分别是: 跳转二维码扫描页面 内嵌式二维码 根据文档我们可以知道关于扫码授权的模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据 code 参数: 2. 通过 code 参数加上 AppID 和AppSecret等,通过 API

随机推荐