package com.yeshi.fanli.controller; import com.yeshi.fanli.entity.bus.user.UserActiveLog; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum; import com.yeshi.fanli.entity.taobao.TaoBaoUnionAuthRecord; import com.yeshi.fanli.exception.taobao.TaoBaoAuthException; import com.yeshi.fanli.exception.user.UserExtraTaoBaoInfoException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.log.LogManager; import com.yeshi.fanli.log.LogType; import com.yeshi.fanli.service.inter.user.UserActiveLogService; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.service.inter.user.msg.UserAccountMsgNotificationService; import com.yeshi.fanli.service.inter.user.tb.TaoBaoUnionAuthRecordService; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.manger.user.TBAuthManager; import com.yeshi.fanli.util.*; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import net.sf.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date; /** * 授权回调 * * @author Administrator */ @Controller @RequestMapping("client/v1/auth/callback") public class AuthCallBackController { @Resource private TaoBaoUnionAuthRecordService taoBaoUnionAuthRecordService; @Resource private UserAccountMsgNotificationService userAccountMsgNotificationService; @Resource private RedisManager redisManager; @Resource private UserActiveLogService userActiveLogService; @Resource private TBAuthManager tbAuthManager; private int processAuth(TBAuthManager.TaoBaoAuthOriginInfo taoBaoAuthOriginInfo, String code) { int errCode = 0; //判断用户ID if (taoBaoAuthOriginInfo.getUid() == null || taoBaoAuthOriginInfo.getUid().longValue() == 0L) return 3; //解析淘宝用户信息 TBAuthManager.TaoBaoUserInfo taoBaoUserInfo = null; try { taoBaoUserInfo = TBAuthManager.parseTaoBaoUser(code); } catch (Exception e) { e.printStackTrace(); LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); } if (taoBaoUserInfo == null) { return 4; } //添加淘宝授权记录 TaoBaoUnionAuthRecord record = new TaoBaoUnionAuthRecord(); record.setUser(new UserInfo(taoBaoAuthOriginInfo.getUid())); record.setTaoBaoOpenUid(taoBaoUserInfo.getOpenUid()); record.setTaoBaoUserId(taoBaoUserInfo.getTaoBaoUid()); record.setTaoBaoUserNick(taoBaoUserInfo.getNickName()); record.setCreateTime(new Date()); taoBaoUnionAuthRecordService.addAuthRecord(record); switch (taoBaoAuthOriginInfo.getSource()) { case "zigou": try { tbAuthManager.authSpecialId(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo); return 0; } catch (TaoBaoAuthException e) { LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); if (e.getCode() == TaoBaoAuthException.CODE_NOT_REAL_NAME) userAccountMsgNotificationService.taoBaoAuthFail(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo.getNickName(), "淘宝账号未实名"); } catch (UserExtraTaoBaoInfoException e) { LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); e.printStackTrace(); return 5; } break; case "share": try { tbAuthManager.authRelationId(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo); return 0; } catch (TaoBaoAuthException e) { LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); if (e.getCode() == TaoBaoAuthException.CODE_NOT_REAL_NAME) userAccountMsgNotificationService.taoBaoAuthFail(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo.getNickName(), "淘宝账号未实名"); } catch (UserExtraTaoBaoInfoException e) { LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); e.printStackTrace(); return 5; } break; case "bind": try { tbAuthManager.authSpecialId(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo); tbAuthManager.authRelationId(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo); return 0; } catch (TaoBaoAuthException e) { LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); // if (e.getCode() == TaoBaoAuthException.CODE_NOT_REAL_NAME) userAccountMsgNotificationService.taoBaoAuthFail(taoBaoAuthOriginInfo.getUid(), taoBaoUserInfo.getNickName(), e.getMessage()); } catch (UserExtraTaoBaoInfoException e) { LogHelper.userInfo("淘宝授权出错:" + e.getMessage()); return 5; } break; } return errCode; } @RequestMapping(value = "tb") public void tb(String code, String state, HttpServletRequest request, HttpServletResponse response) { LogManager.getLogger(LogType.taobaoAuth).info("淘宝授权回调:" + code + ":" + state); if (StringUtil.isNullOrEmpty(code) || StringUtil.isNullOrEmpty(state)) { LogHelper.error("淘宝授权回调出错"); try { response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/fail.html?code=1"); } catch (IOException e1) { e1.printStackTrace(); } return; } try { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaoCode, code); if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) return; redisManager.cacheCommonString(key, 1 + "", 5); } catch (Exception e) { } int errCode = 0; //解密原始授权信息 TBAuthManager.TaoBaoAuthOriginInfo taoBaoAuthOriginInfo = null; try { taoBaoAuthOriginInfo = TBAuthManager.decryptAuthOriginInfo(state); } catch (Exception e) { } if (taoBaoAuthOriginInfo == null) { errCode = 1; } else { if (System.currentTimeMillis() - taoBaoAuthOriginInfo.getTime() > 1000 * 60 * 10L) { // 过时 errCode = 2; } } if (errCode == 0) { errCode = processAuth(taoBaoAuthOriginInfo, code); } else { //基础信息解析失败 try { response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/fail.html?code=1"); } catch (IOException e1) { e1.printStackTrace(); } return; } // 计入记录 UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(taoBaoAuthOriginInfo.getUid()); boolean isNewJump = false; if (activeLog != null) { String platform = null; String version = activeLog.getVersionCode(); if (activeLog.getChannel().equalsIgnoreCase("appstore")) { platform = "ios"; } else { platform = "android"; } if (VersionUtil.greaterThan_2_0(platform, version)) { isNewJump = true; } } try { if (errCode == 0)// 成功 { if ("share".equalsIgnoreCase(taoBaoAuthOriginInfo.getSource())) { if (isNewJump) response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/success.html"); else closeWebPage(response.getWriter()); } else if ("zigou".equalsIgnoreCase(taoBaoAuthOriginInfo.getSource())) { if (isNewJump) response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/success.html"); else closeWebPage(response.getWriter()); } else if ("bind".equalsIgnoreCase(taoBaoAuthOriginInfo.getSource())) { if (isNewJump) response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/success.html"); else { String script = String.format( "", StringUtil.getBase64String("恭喜你,淘宝绑定成功")); response.getWriter().print(script); } } } else {// 失败 if ("share".equalsIgnoreCase(taoBaoAuthOriginInfo.getSource())) { if (isNewJump) response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/fail.html"); else closeWebPage(response.getWriter()); } else if ("zigou".equalsIgnoreCase(taoBaoAuthOriginInfo.getSource())) { if (isNewJump) response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/fail.html"); else closeWebPage(response.getWriter()); } else if ("bind".equalsIgnoreCase(taoBaoAuthOriginInfo.getSource())) { if (isNewJump) response.sendRedirect("http://apph5.banliapp.com/flqWeb/h5/tbauth/fail.html"); else { String script = String.format( "", StringUtil.getBase64String("抱歉,淘宝绑定失败")); response.getWriter().print(script); } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } private void closeWebPage(PrintWriter out) { String script = ""; out.print(script); } @RequestMapping(value = "pinduoduo") public void pinDuoDuo(HttpServletResponse response) { } }