我们创建了支付宝开放平台的网页&移动应用,审核通过后,我们需要拿到appid,支付宝公钥,私钥进行开发

一、应用信息

添加应用信息至项目环境中

我们保存了 appid、应用私钥、支付宝公钥、支付宝回调地址等信息,这里的公钥为支付宝开放平台为我们生成的“支付宝公钥”

二、引入 Maven 依赖

<!-- 支付宝SDK -->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.9.28.ALL</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.51</version>
</dependency>

其余依赖请自行添加

三、登录按钮

在页面放置 “支付宝” 授权登录的 DOM 元素

<a th:href="@{alipay/auth}" class="link" title="支付宝登录"><i class="iconfont icon-zhifubao"></i></a>

这里使用的是阿里的 iconfont 图标

四、接口类

创建 “支付宝” 授权登录的 Controller,AlipayController.java

1、从配置文件中获取 “支付宝” 配置信息

/*** 微博授权中提供的 appid 和 appkey*/
@Value("${alipay.oauth.appid}")
public String APPID;
@Value("${alipay.oauth.callback-url}")
public String CALL_BACK_URL;
@Value("${alipay.oauth.private-key}")
public String PRIVATE_KEY;
@Value("${alipay.oauth.public-key}")
public String PUBLIC_KEY;

2、登录按钮点击后的接口

/*** 请求授权页面*/
@GetMapping(value = "/auth")
public String qqAuth(HttpSession session) {// 用于第三方应用防止CSRF攻击String uuid = UUID.randomUUID().toString().replaceAll("-", "");session.setAttribute("state", uuid);// Step1:获取Authorization CodeString url = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?scope=auth_user" +"&app_id=" + APPID +"&redirect_uri=" + URLEncoder.encode(CALL_BACK_URL) +"&state=" + uuid;return "redirect:" + url;
}

接口文档中建议我们在授权登录时传入一个加密的数据防止被攻击,我们传入了UUID,最后重定向到授权页面

3、当该用户点击“授权”按钮,同意授权后,就会回调到我们在应用中填写的回调地址里去

/*** 授权回调*/
@GetMapping(value = "/callback")
public String qqCallback(HttpServletRequest request) throws Exception {// 获取sessionHttpSession session = request.getSession();// 得到auth_codeString authCode = request.getParameter("auth_code");// 我们放在地址中的状态码String state = request.getParameter("state");String uuid = (String) session.getAttribute("state");// 验证信息我们发送的状态码if (null != uuid) {// 状态码不正确,直接返回登录页面if (!uuid.equals(state)) {return "redirect:" + url;}}// Step2:通过auth_code获取Access Token 以及 user_idJSONObject tokenJson = AlipayHttpClient.getAccessToken(APPID, PRIVATE_KEY, PUBLIC_KEY, authCode);// Step3:通过auth_code获取用户信息JSONObject userJson = AlipayHttpClient.getUserInfo(APPID, PRIVATE_KEY, PUBLIC_KEY, tokenJson.getString("accessToken"));/*** 获取到用户信息之后,就该写你自己的业务逻辑了*/return "redirect:" + "success";
}

以上代码,从我自己的项目中拷贝而来,如果你直接使用,你需要对其业务代码进行修改

五、网络请求方法

第四步代码中所用到的网络接口方法,我放在了 AlipayHttpClient.java 文件中,主要有两个方法

/*** auth_code换取access_token与user_id** @param appid* @param privateKey 私钥* @param publicKey  公钥* @param authCode   授权码* @return* @throws AlipayApiException*/
public static JSONObject getAccessToken(String appid, String privateKey, String publicKey, String authCode) throws AlipayApiException {// 返回对象JSONObject res = new JSONObject();/*** 支付宝网关(固定)* APPID 即创建应用后生成* 开发者私钥,由开发者自己生成* 参数返回格式,只支持json* 编码集,支持GBK/UTF-8* 支付宝公钥,由支付宝生成* 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2*/AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appid, privateKey, "json", "UTF-8", publicKey, "RSA2");// 请求对象AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();// 第一步获取到的:auth_coderequest.setCode(authCode);// 授权类型request.setGrantType("authorization_code");// 发起请求AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);// 拿到 access_tokenres.put("accessToken", oauthTokenResponse.getAccessToken());// 拿到 user_idres.put("userId", oauthTokenResponse.getUserId());return res;
}/*** 使用 access_token 获取用户信息** @param appid* @param privateKey  私钥* @param publicKey   公钥* @param accessToken 令牌* @throws AlipayApiException*/
public static JSONObject getUserInfo(String appid, String privateKey, String publicKey, String accessToken) throws AlipayApiException {// 返回对象JSONObject res = new JSONObject();/*** 支付宝网关(固定)* APPID 即创建应用后生成* 开发者私钥,由开发者自己生成* 参数返回格式,只支持json* 编码集,支持GBK/UTF-8* 支付宝公钥,由支付宝生成*/AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appid, privateKey, "json", "UTF-8", publicKey, "RSA2");// 请求对象AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();// 传入token,发起请求AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken);// 请求成功if ("10000".equals(response.getCode())) {res.put("code", 1);res.put("user", response);}// 请求失败else {res.put("code", 0);res.put("msg", "获取用户信息失败");}return res;
}

最终我们获取到用户的信息是一个 AlipayUserInfoShareResponse 对象,该对象包含了该用户的所有信息,建议观看源代码

以上,就是完成 “支付宝” 授权登录的过程,相比起腾讯QQ、新浪微博的第三方授权登录,支付宝需要用到接口加签的操作,但我们使用支付宝平台提供的工具也很容易

六、总结


如您在阅读中发现不足,欢迎留言!!!

下一篇:

【第三方互联】十三、码云(Gitee)授权第三方登录

【第三方互联】12、支付宝(Alipay)授权第三方登录相关推荐

  1. 【第三方互联】11、创建支付宝(Alipay)互联应用

    我们已经注册成为了 支付宝 的开发者,这时我们便可以来创建应用进行开发 一.开发中心 我们登录了 支付宝 开发平台之后,我们在顶部菜单找到开发者中心 我这里选择自定义接入网页&移动应用,用来做 ...

  2. 【第三方互联】10、注册成为支付宝(Alipay)开发者

    之前我们已经学习了QQ.新浪微博的第三方授权登录,今天继续学习支付宝的第三方授权登录 比起QQ与新浪微博的操作,支付宝授权增加了获取公钥.私钥等操作 一.访问 支付宝开放平台 官网地址:https:/ ...

  3. 【第三方互联】9、新浪微博(sina)授权第三方登录

    当我们创建的新浪微博互联应用成功后,我们便可以开始使用该应用来实现新浪微博授权操作 一.获取 App Key 和 App Secret 1.在"我的应用",点击应用,查看我们创建的 ...

  4. 【第三方互联】13、码云(Gitee)授权第三方登录

    今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录.腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单 一.准备工作 1.登录 码云官网 官网地址:https://gitee. ...

  5. 【第三方互联】16、微信(wechat)授权第三方登录

    第三方平台系列文章,今天终于又开始更新了,今天继续学习微信(wechat)授权第三方登录 一.准备工作 1.申请微信公众测试号 由于我们是个人开发者,我们需要去注册申请一个微信公众平台的测试号 htt ...

  6. JAVA接入支付宝授权第三方登录

    支付宝沙箱授权 开发前准备 支付宝沙箱环境申请使用 获取用户授权 生成唤起支付宝授权连接 回调地址接收支付宝参数 构建请求支付宝客户端 业务流程代码 串业务 开发前准备 支付宝开发平台. 支付宝接口A ...

  7. 微博授权第三方网站登录

    大致流程如下图所述 前置工作 去微博开放平台上(https://open.weibo.com/)申请网站接入 审核通过后会给你的应用分配 App Key 和 App Secret (后续根据授权码获取 ...

  8. 【第三方互联】8、创建新浪微博(sina)互联应用

    当我们注册新浪微博开发者通过审核之后,我们才能创建应用 当我们开发者认证审核通过之后,我们的身份认证状态将变为:"已认证",这时,我们便可以创建微连接应用了 一.创建应用 这里我们 ...

  9. SpringBoot 整合oauth2实现授权第三方应用(实战版)

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 11 分钟. 来自:blog.csdn.net/u014365523/article/details/112317015 什么 ...

  10. 小程序授权第三方管理开发的流程

    第三方平台帮助旗下已授权的小程序进行代码管理时,需先开发完成小程序模版,再将小程序模版部署到旗下小程序帐号中,具体流程如下: 第一步:绑定开发小程序 (1)第三方平台的开发人员需先到微信公众平台(mp ...

最新文章

  1. swift笔记——环境搭建及Hello,Swift!
  2. Matlab学习笔记——图形绘制
  3. debian 8 网桥
  4. 西北工业大学附属中学2019届高考毕业生去向,其中北大清华88人
  5. K - 老鼠走迷宫(DFS)
  6. Qt Creator创建基于Qt Widget的应用程序
  7. 为什么我不信任通配符,以及为什么我们仍然需要通配符
  8. 设计灵感|教会你海报设计套路
  9. DataGridView 控件中DataBind( )方法不能使用的情况的解决方案
  10. 《python算法教程》个人学习心得之(一):归纳、递归与归简
  11. python人流热力图_高德地图热力图插件实现人流量监控,如何实现人流数据实时刷新...
  12. Mac 上“预览”中的键盘快捷键
  13. 计算机卡慢解决方法,电脑慢的快速解决办法 四种方法电脑速度变快10倍
  14. 没想到你是这样的MethodArgumentNotValidException
  15. 如何创建一个javaWeb项目
  16. 如何写好一篇论文——闵老师《论文写作》心得
  17. 不知怎么选,用RFM模型看舔狗质量!
  18. 立方根用计算机怎么输入,平方根立方根怎么用电脑计算机表示?
  19. PWM的调光基本原理
  20. OpenGL二次曲面绘制

热门文章

  1. 原生js实现搜索历史记录案例
  2. 【毕业设计】酒店评价情感倾向分析系统 - python 深度学习
  3. 李宏毅ML2021 HW3创建pseudo dataset
  4. Linux相关命令(三)
  5. 聊聊精密测量仪器的气源维护知识
  6. 2018再见|2019你好
  7. Win 10 下无法安装.net framework 3.5,错误代码0x800F081F的解决方案
  8. 千锋php 靠谱吗,千锋PHP学员心得 长久的坚持不懈才能接近成功
  9. 免费图书的检索和获取途径
  10. 基于Select模型的匿名聊天室v1.0