package com.yeshi.fanli.service.manger.user;
|
|
import com.yeshi.fanli.exception.taobao.TaoBaoAuthException;
|
import com.yeshi.fanli.exception.user.UserExtraTaoBaoInfoException;
|
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
|
import com.yeshi.fanli.util.AESUtil;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TaoBaoConstant;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
import net.sf.json.JSONObject;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLDecoder;
|
|
/**
|
* 淘宝授权管理器
|
*/
|
@Component
|
public class TBAuthManager {
|
|
@Resource
|
private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
|
|
|
/**
|
* 解密授权原始信息
|
*
|
* @param state
|
* @return
|
* @throws Exception
|
*/
|
public static TaoBaoAuthOriginInfo decryptAuthOriginInfo(String state) throws Exception {
|
TaoBaoAuthOriginInfo authOriginInfo = null;
|
try {
|
String stateStr = AESUtil.decrypt(state, Constant.UIDAESKEY);
|
JSONObject json = JSONObject.fromObject(stateStr);
|
Long time = json.optLong("t");
|
Long uid = json.optLong("u");
|
String source = json.optString("s");
|
authOriginInfo = new TaoBaoAuthOriginInfo();
|
authOriginInfo.setSource(source);
|
authOriginInfo.setTime(time);
|
authOriginInfo.setUid(uid);
|
} catch (Exception e) {
|
try {
|
state = URLDecoder.decode(state, "UTF-8");
|
} catch (UnsupportedEncodingException e1) {
|
e1.printStackTrace();
|
}
|
String stateStr = AESUtil.decrypt(state, Constant.UIDAESKEY);
|
JSONObject json = JSONObject.fromObject(stateStr);
|
Long time = json.optLong("t");
|
Long uid = json.optLong("u");
|
String source = json.optString("s");
|
authOriginInfo = new TaoBaoAuthOriginInfo();
|
authOriginInfo.setSource(source);
|
authOriginInfo.setTime(time);
|
authOriginInfo.setUid(uid);
|
}
|
if (authOriginInfo == null)
|
throw new Exception("解密失败");
|
return authOriginInfo;
|
}
|
|
/**
|
* 解析淘宝用户信息
|
*
|
* @param code
|
* @return
|
* @throws Exception
|
*/
|
public static TaoBaoUserInfo parseTaoBaoUser(String code) throws Exception {
|
String result = TaoKeApiUtil.getAccessToken(code, TaoBaoConstant.TAOBAO_AUTH_APPKEY,
|
TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
|
|
if (StringUtil.isNullOrEmpty(result)) {
|
throw new Exception("code解码出错");
|
}
|
|
JSONObject data = JSONObject.fromObject(result);
|
data = data.optJSONObject("top_auth_token_create_response").optJSONObject("token_result");
|
if (data == null) {
|
throw new Exception("code解码出错:" + result);
|
}
|
String accessToken = data.optString("access_token");
|
String openUid = data.optString("taobao_open_uid");
|
String taoBaoUid = data.optString("taobao_user_id");
|
String nickName = data.optString("taobao_user_nick");
|
try {
|
nickName = URLDecoder.decode(nickName, "UTF-8");
|
} catch (Exception e) {
|
}
|
TaoBaoUserInfo taoBaoUserInfo = new TaoBaoUserInfo();
|
taoBaoUserInfo.setAccessToken(accessToken);
|
taoBaoUserInfo.setNickName(nickName);
|
taoBaoUserInfo.setOpenUid(openUid);
|
taoBaoUserInfo.setTaoBaoUid(taoBaoUid);
|
return taoBaoUserInfo;
|
}
|
|
|
/**
|
* 渠道授权
|
*
|
* @param uid
|
* @param taoBaoUserInfo
|
* @throws TaoBaoAuthException
|
* @throws UserExtraTaoBaoInfoException
|
*/
|
public void authRelationId(Long uid, TaoBaoUserInfo taoBaoUserInfo) throws TaoBaoAuthException, UserExtraTaoBaoInfoException {
|
// 计入记录
|
String relationId = TaoKeApiUtil.getRelationId(taoBaoUserInfo.getAccessToken(), TaoBaoConstant.TAOBAO_AUTH_APPKEY,
|
TaoBaoConstant.TAOBAO_AUTH_APPSECRET);// 渠道ID
|
userExtraTaoBaoInfoService.addRelationId(uid, relationId, taoBaoUserInfo.getTaoBaoUid(), taoBaoUserInfo.getNickName(), true);
|
}
|
|
/**
|
* 会员授权
|
*
|
* @param uid
|
* @param taoBaoUserInfo
|
*/
|
public void authSpecialId(Long uid, TaoBaoUserInfo taoBaoUserInfo) throws TaoBaoAuthException, UserExtraTaoBaoInfoException {
|
String specialId = TaoKeApiUtil.getSpecialId(taoBaoUserInfo.getAccessToken(), TaoBaoConstant.TAOBAO_AUTH_APPKEY,
|
TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
|
userExtraTaoBaoInfoService.addSpecialId(uid, specialId, taoBaoUserInfo.getTaoBaoUid(), taoBaoUserInfo.getNickName(), true);
|
}
|
|
|
/**
|
* 授权原始信息
|
*/
|
public static class TaoBaoAuthOriginInfo {
|
private long time;
|
private Long uid;
|
private String source;
|
|
|
public long getTime() {
|
return time;
|
}
|
|
public void setTime(long time) {
|
this.time = time;
|
}
|
|
public Long getUid() {
|
return uid;
|
}
|
|
public void setUid(Long uid) {
|
this.uid = uid;
|
}
|
|
public String getSource() {
|
return source;
|
}
|
|
public void setSource(String source) {
|
this.source = source;
|
}
|
}
|
|
/**
|
* 淘宝的用户信息
|
*/
|
public static class TaoBaoUserInfo {
|
|
private String accessToken;
|
private String openUid;
|
private String taoBaoUid;
|
private String nickName;
|
|
public String getAccessToken() {
|
return accessToken;
|
}
|
|
public void setAccessToken(String accessToken) {
|
this.accessToken = accessToken;
|
}
|
|
public String getOpenUid() {
|
return openUid;
|
}
|
|
public void setOpenUid(String openUid) {
|
this.openUid = openUid;
|
}
|
|
public String getTaoBaoUid() {
|
return taoBaoUid;
|
}
|
|
public void setTaoBaoUid(String taoBaoUid) {
|
this.taoBaoUid = taoBaoUid;
|
}
|
|
public String getNickName() {
|
return nickName;
|
}
|
|
public void setNickName(String nickName) {
|
this.nickName = nickName;
|
}
|
}
|
|
}
|