支付宝小程序授权/获取用户信息

目录:

文章目录

  • 支付宝小程序授权/获取用户信息
    • 获取支付宝小程序授权token
    • 解析支付宝小程序接口响应加密数据

获取支付宝小程序授权token

前提准备工作:

  • 支付宝小程序sdk等相关依赖。
  • 创建支付宝小程序,并按照相关流程配置好。注意:必须是企业支付宝账号才可以获取用户信息权限

1、依赖

<!-- 支付宝核心sdk --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.22.113.ALL</version></dependency><!-- 加解密钥sdk --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.62</version></dependency>

2、相关流程配置

https://open.alipay.com/develop/manage

微信小程序可以通过微信授权之后再登录,平台可以拿到微信用户的相关信息。同理支付宝小程序也可以。

流程:

  • 先调用接口/方法 获取授权token
  • 再通过 接口/方法 获取用户信息

1、获取支付宝小程序授权token

这里相当于调用 alipay.system.oauth.token接口

 // 服务端获取access_token、user_idprivate AlipaySystemOauthTokenResponse getAccessToken(String authCode) throws Exception {String code = JSON.parseObject(authCode).getString("authCode");// 1. 填入appidString APPID = "2021002147669716";// 2. 填入应用私钥String PRIVATE_KEY = "应用私钥";// 3. 填入支付宝公钥String ALIPAY_PUBLIC_KEY = "支付宝公钥";AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APPID,PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY,"RSA2");AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();//授权方式:authorization_code,表示换取使用用户授权码code换取授权令牌access_token。request.setGrantType("authorization_code");// 4. 填入前端传入的授权码authCode//授权码,用户对应用授权后得到。本参数在 grant_type 为 authorization_code 时必填request.setCode(code);AlipaySystemOauthTokenResponse response = alipayClient.execute(request);if(response.isSuccess()){System.out.println("调用成功");} else {System.out.println("调用失败");}return response;}

2、获得授权用户的基本信息

我们再调用接口 alipay.user.info.auth

 // 获取支付宝用户信息private AlipayUserInfoShareResponse getAliUserInfo (String accessToken) throws Exception {// 1. 填入appidString APPID = "2021002147669716";// 2. 填入应用私钥String PRIVATE_KEY = "应用私钥";// 3. 填入支付宝公钥String ALIPAY_PUBLIC_KEY = "支付宝公钥";AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APPID ,PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY,"RSA2");AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken);if(response.isSuccess()){System.out.println("获取会员信息 - 调用成功");return response;}return null;}

遇到的问题:

【支付宝小程序】-【获得支付宝用户详情】-【响应code:20001】-【错误信息:无效的访问令牌】

解决:

解析支付宝小程序接口响应加密数据

解析接口响应加密数据流程:

  1. 获取验签和解密所需要的参数
  2. 验签
  3. 解密

1、解析接口响应加密数据

 /*** 解密数据* @return*/@ApiOperation(value = "解密数据")@PostMapping("/findPhone")public String findPhone(@RequestBody String jsonStr) throws Exception {//小程序前端提交的加密数据String response = JSON.parseObject(jsonStr).getString("response");//1. 获取验签和解密所需要的参数Map<String, String> openapiResult = JSON.parseObject(response,new TypeReference<Map<String, String>>() {}, Feature.OrderedField);String signType = "RSA2";String charset = "UTF-8";String encryptType = "AES";String sign = openapiResult.get("sign");String content = openapiResult.get("response");//如果密文的boolean isDataEncrypted = !content.startsWith("{");boolean signCheckPass = false;//2. 验签String signContent = content;//你的小程序对应的支付宝公钥(为扩展考虑建议用appId+signType做密钥存储隔离)String signVeriKey = "";//你的小程序对应的加解密密钥(为扩展考虑建议用appId+encryptType做密钥存储隔离)String decryptKey = "";//如果是加密的报文则需要在密文的前后添加双引号if (isDataEncrypted) {signContent = "\"" + signContent + "\"";}try {signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);} catch (AlipayApiException e) {//验签异常, 日志}if(!signCheckPass) {//验签不通过(异常或者报文被篡改),终止流程(不需要做解密)throw new Exception("验签失败");}//3. 解密String plainData = null;if (isDataEncrypted) {try {plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);} catch (AlipayApiException e) {//解密异常, 记录日志throw new Exception("解密异常");}} else {plainData = content;}return plainData;}

支付宝小程序授权/获取用户信息相关推荐

  1. 微信小程序授权获取用户信息和手机号码

    微信小程序授权获取用户信息和手机号码 1.微信官方文档 登录:https://developers.weixin.qq.com/miniprogram/dev/framework/open-abili ...

  2. 微信小程序授权 获取用户信息

    微信小程序授权 获取用户信息 小程序昵称突然变成了"微信用户",头像也不显示, <!-- 近期很多小伙伴通过该方法获取头像和昵称,代码也没有做改变,突然就变成了下面这样子 - ...

  3. Java-(二)微信小程序授权获取用户信息和手机号码

    第一篇我们已经知道了微信小程序怎么授权登录获取用户信息. openId 和 unionId .下面将高速告诉大家,微信小程序如何授权获取用户信息和手机号码. 微信官方文档:https://develo ...

  4. uniapp微信小程序授权获取用户信息封装

    根据平台公告信息,2022年底wx.getUserProfile 与 wx.getUserInfo 接口被回收.新的小程序不能再授权获取头像和昵称:可以通过wx.login 接口直接获取用户的 ope ...

  5. 小程序获取用户信息 php发送数据库,qq小程序如何获取用户信息并存入数据库实例...

    今天给大家带来qq小程序如何获取用户信息并存入数据库的实例,希望能够帮助到大家,让大家不仅知道如何下载qq小程序源码,还能懂得去何用,如何去改,甚至是如何去创造,如果你有好的qq小程序源码出售,可以联 ...

  6. 微信小程序制作——获取用户信息

    微信小程序制作--获取用户信息 1.获取用户信息 方式一 wxml <view bindtap="getUserName">获取当前用户名</view> j ...

  7. 小程序获取不到用户头像和昵称返回微信用户问题解决,即小程序授权获取用户头像规则调整的最新解决方案

    最近好多同学在学习石头哥小程序课程的时候,遇到了下面这样的问题,在小程序授权获取用户头像和昵称时,获取到的是下面这样的. 到底是什么原因导致的呢,去小程序官方文档一看,又是官方改规则了. 点进去一看, ...

  8. 【微信小程序】获取用户信息

    文章目录 获取用户信息 组件open-data button组件中的open-type 接口getUserProfile 查看授权结果 获取用户信息 组件open-data 组件 open-data用 ...

  9. 玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)

    LZ-Says:总是要各种颠沛流离,才能换得片刻安宁.努力让自己变得更好,加油- 前言 前几天,完成了微信小程序的首章,学习起来,还是多多少少有点坑,不舒服. 今天我们继续开启微信小程序 Study ...

最新文章

  1. PAT L2-014. 列车调度
  2. 《挖财编程题》水花仙数
  3. 数据库---练习题(45道)
  4. Java基础 线程同步
  5. [转载] c++list遍历_List、Set、数据结构、Collections
  6. Android.mk小结
  7. phabricator客户端使用(windows)
  8. 微信退款读取resource下的证书(apiclient_cert.p12)获取不到问题
  9. php的异步非阻塞swoole模块使用(一)实现简易tcp服务器--服务端
  10. python photoshop自动化_你会用Python 搞定你的电子签名吗?
  11. 变桨距风力发电机液压系统设计
  12. 8.声卡驱动06-自己实现alsa驱动-虚拟声卡-widget
  13. 『杭电1982』Kaitou Kid - The Phantom Thief (1)
  14. 济南ITSS证书办理大全
  15. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
  16. Redis简介(01)历史与发展
  17. Linux中存储设备的命名规则
  18. 利用dlib81人脸关键点提取额头脸颊ROI
  19. ToggleButton图片按钮的两种制作方法
  20. 入行网络工程师(CCNA)必备

热门文章

  1. MATLAB算法实战应用案例精讲-【语音识别】语音合成(附python代码实现)
  2. HDU 3473 Minimum Sum 【划分树】
  3. java邮箱发送验证码_java实现使用QQ邮箱发送验证码功能
  4. win7系统(64/32位)安装office2010时提示需要msxml6.10.1129,问题的解决记录
  5. linux无法识别m2固态,主板识别不出m.2固态硬盘怎么办|笔记本电脑无法识别m.2固态硬盘解决方法-系统城...
  6. 多台网络分析仪自动化测试软件NSAT-1000
  7. Webgl实现的天气效果(下雨、下雪)
  8. 【论文笔记】基于生成对抗网络的强化学习算法的研究
  9. 《Delphi传奇》网络游戏组件安装步骤:Delphi 10.3安装DelphiX
  10. SCDM 实例教程:基本几何建模