700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java

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

时间:2021-04-16 15:07:09

相关推荐

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

直接上干货,下面中间有一些 我自己的业务逻辑,比如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 = "/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("/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));}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。