直接上干货,下面中间有一些 我自己的业务逻辑,比如businesscode,你们可以去掉,我要支持多个生活号做的。

<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.4.27.ALL</version></dependency>
 /*** 支付宝sdkclient*/private Map<String,AlipayClient> alipayClientMap = new HashMap<>();/*** code与支付宝appid的map*/private Map<String,String> alipayAppIdCodeMap = new HashMap<>();/*** 支付宝服务窗配置*/@Autowiredprivate UcenterAlipaySettService alipaySettService;/*** 支付宝oauth2 登录url*/private static  final  String ALIPAY_OAUTH2_URL = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?";/*** 支付宝oauth 登录* @param request request* @param response response* @param code 扩展编码* @throws WxErrorException* @throws IOException*/public void alipayHandleLogin(HttpServletRequest request,HttpServletResponse response,String code){//如果不包含此code参数则获取参数if(!alipayClientMap.containsKey(code)){UcenterAlipaySett alipaySett =alipaySettService.selectBean(UcenterAlipaySett.builder().extendsCode(code).build());AlipayClient alipayClient =new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",alipaySett.getAppId(),alipaySett.getAppPrivateKey(),"json", "UTF-8", alipaySett.getAlipayKey(), "RSA2");alipayClientMap.put(code,alipayClient);alipayAppIdCodeMap.put(code,alipaySett.getAppId());}String url = null;try {url = ALIPAY_OAUTH2_URL + "app_id=" + alipayAppIdCodeMap.get(code)+ "&scope=auth_user&redirect_uri=" + URLEncoder.encode(EConfig.getPathPropertiesValue("basePath")+ "/webApi/front/alipayCodeLogin","UTF-8");response.sendRedirect(url);} catch (IOException e) {e.printStackTrace();}}/*** 处理支付宝登录* @param auth_code 授权码(原谅我没有用驼峰)* @param request* @param response*/@RequestMapping("/alipayCodeLogin")public void alipayOpenIdLogin(String auth_code,HttpServletRequest request,HttpServletResponse response) throws IOException {AlipaySystemOauthTokenRequest getUserIdRequest = new AlipaySystemOauthTokenRequest();getUserIdRequest.setCode(auth_code);getUserIdRequest.setGrantType("authorization_code");String businessCode = (String)request.getSession().getAttribute("code");try {AlipaySystemOauthTokenResponse alipayResponse =  alipayClientMap.get(businessCode).execute(getUserIdRequest);String alipayUserId = alipayResponse.getAlipayUserId();handleAlipayUserIdLogin(alipayUserId,alipayResponse.getAccessToken() ,businessCode,request,response);} catch (AlipayApiException e) {LOGGER.error("支付宝方法调用错误",e);throw new BusinessException(e.getErrMsg());}}/*** 处理根据支付宝userid登录* @param alipayUserId* @param request* @param response*/private void handleAlipayUserIdLogin(String alipayUserId,String alipayAccessToken,String businessCode,HttpServletRequest request,HttpServletResponse response) throws IOException {HttpSession session = request.getSession();UcenterFrontUserBind bind = userBindService.selectBean(UcenterFrontUserBind.builder().authOpenid(alipayUserId).authOpenidType(UcenterFrontUserBindService.OPENID_TYPE_ALIPAY).build());String userId = null;if(bind == null){try {AlipayUserInfoShareRequest alipayUserInfoShareRequest = new AlipayUserInfoShareRequest();AlipayUserInfoShareResponse userinfoShareResponse = alipayClientMap.get(businessCode).execute(alipayUserInfoShareRequest, alipayAccessToken);// 默认是未知String sex =UcenterFrontUserService.SEX_UNKNOWN;if("M".equals(userinfoShareResponse.getGender())){sex = UcenterFrontUserService.SEX_BOY;}else  if("F".equals(userinfoShareResponse.getGender())){sex = UcenterFrontUserService.SEX_GIRL;}UcenterFrontUser user = UcenterFrontUser.builder().userId(StringUtil.getUUID()).nickName(userinfoShareResponse.getNickName()).provinceId(userinfoShareResponse.getProvince()).cityId(userinfoShareResponse.getCity()).sex(sex).imagePath(userinfoShareResponse.getAvatar()).build();userId = loginService.addBindAndUser(user,alipayUserId,UcenterFrontUserBindService.OPENID_TYPE_ALIPAY);}  catch (AlipayApiException e) {LOGGER.error("根据openid获取用户信息错误:",e);throw new BusinessException(e.getErrMsg());}}else{userId = bind.getUserId();}String accessToken = loginService.login(userId);String callback = session.getAttribute("callBack").toString();response.sendRedirect(checkUrl(callback, accessToken));}

支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java相关推荐

  1. php 获取qq头像,php只需要一个QQ号就可以获得用户信息(昵称、头像)

    [PHP] 纯文本查看 复制代码<?php // 通过QQ号即可获取用户信息 // 获取QQ头像接口 // http://q1.qlogo.cn/g?b=qq&nk=QQ号&s= ...

  2. php获取qq号,php实现只需要一个QQ号就可以获得用户信息

    网站接入qq,微信,微博第三方登陆(多网站,多级域名,多app端) <?php // 通过QQ号即可获取用户信息 // 获取QQ头像接口 // http://q1.qlogo.cn/g?b=qq ...

  3. 公众号服务号自定义菜单获取code

    在公众号  服务号类型中(不知道现在还有没有这个类型了),有自定义菜单功能,可以配置自己的地址链接.如果想在后台的web项目中获取openid 就需要先获取code,如自己的链接是:www.csdn. ...

  4. php实现只需要一个QQ号就可以获得用户信息

    <?php // 通过QQ号即可获取用户信息// 获取QQ头像接口 // http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=100&t=1547904 ...

  5. 订阅号如何配置服务器信息,订阅号服务号区别和订阅号启动服务器配置

    1.微信公众号订阅号服务号区别 参考官网介绍和微信订阅号和服务号的区别是什么 2.订阅号启动服务器配置方法 2.1基本配置 点击左册下拉菜单,有一个"基本配置",进入基本配置可以看 ...

  6. 微信公众号_订阅号+服务号开发工具包-翟东平-专题视频课程

    微信公众号_订阅号+服务号开发工具包-15114人已学习 课程介绍         "微信公众平台深度开发Java版 v2.0"系列课程共有6季,使用JAVA语言,系统讲解微信公众 ...

  7. 教你3分钟快速开发微信公众号[订阅号][服务号]

    Wx-tools是基于微信公众平台API的轻量级框架. 基于Wx-tools你可以开速开发一个订阅号/服务号的web应用后台. 博主最近终于有空!!已经更新到2.0.0啦!! GitHub仓库 下载w ...

  8. 微服务间用户信息共享机制

    文章目录 前言 第一节 微服务间用户信息传递问题 第二节 解决思路 第三节 实践操作(基于Feign) 1. 调用链路说明 2. shop-common改造 3. 开启注解 4. 启动服务器测试 第四 ...

  9. uniApp微信小程序唤出授权头像昵称(微信授权登录)弹窗,及服务端用户信息解密注意事项

    头像昵称弹窗弹出条件:button授权按钮 + uni.getUserProfile API请求 简单唤醒示范案例: 1.H5部分 <text class="loginsubmitbo ...

最新文章

  1. c#直接调用ssis包实现Sql Server的数据导入功能
  2. 从源码编译InfluxDB
  3. 组态王接入多比物联网云平台
  4. 06jQuery-01-基本选择器
  5. matlab输出高分辨率图片有白色毛刺,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...
  6. 尝试cython和openmp
  7. 微服务架构设计总结实践
  8. opencv-api FlannBasedMatcher
  9. [SAP ABAP开发技术总结]OLE
  10. 光引发剂主要用途_食品级uv油墨光引发剂的安全使用
  11. 千万级测试String、StringBuffer和StringBuilder的速度
  12. java游戏快捷存档_《minecraft》JAVA存档
  13. linux 下生成中文pdf,Linux itex pdf生成中文不显示
  14. java超市进销存系统_基于SSM的超市进销存管理系统、基于JavaWeb的超市进销存管理系统...
  15. usb万能驱动win7_突破封锁,倒行逆施强行安装Win7系统,繁琐变简洁
  16. 数据库原理及应用实验
  17. ssm(spring mvc+mybatis)+netty4开发qiq
  18. no suitable conversion function from “std::reverse_iterator<double *>“ to “double *“ exists
  19. html5 canvas 显示文字,如何使用HTML5canvas绘制文字
  20. 某传统企业去O上云案例

热门文章

  1. 微信的平台之路 | 十年复盘 EP01
  2. 【SAP-PS笔记】如何实现项目部分WBS预算不管控
  3. python 列表索引从1开始,在Python中,列表索引值是从1开始。
  4. 「神即道,道法自然,如来」
  5. 内容消费的膨胀时代,虚拟化身的进化与机遇
  6. 时光相册 php,外一篇  趁着《时光相册》说说预告片
  7. 解决gateway使用nacos重启报503 Service Unavailable问题
  8. cv曲线面积的意义_「初中数学」与反比例函数有关的面积专题
  9. linux系统安装u盘教程deepin,带你了解国产操作系统“深度(deepin)”之制作U盘启动教程...
  10. 毛哥的快乐生活(14) 界面全面升级赢得广泛赞誉