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(
|
"<script>if(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {window.location.href = 'yestv://toast#%s';setTimeout(function(){window.location.href = 'yestv://finishPage';},100);} else {yestv.toast(\"恭喜你,淘宝绑定成功\");yestv.finishPage();}</script>",
|
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(
|
"<script>if(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {window.location.href = 'yestv://toast#%s';setTimeout(function(){window.location.href = 'yestv://finishPage';},100);} else {yestv.toast(\"抱歉,淘宝绑定失败\");yestv.finishPage();}</script>",
|
StringUtil.getBase64String("抱歉,淘宝绑定失败"));
|
response.getWriter().print(script);
|
}
|
}
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
}
|
|
private void closeWebPage(PrintWriter out) {
|
String script = "<script>if(/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {setTimeout(function(){window.location.href = 'yestv://finishPage';},100);} else {yestv.finishPage();}</script>";
|
out.print(script);
|
}
|
|
@RequestMapping(value = "pinduoduo")
|
public void pinDuoDuo(HttpServletResponse response) {
|
|
}
|
|
}
|