Commit e2b3c376 authored by lee_mingzhu's avatar lee_mingzhu

Merge remote-tracking branch 'origin/master'

parents cd1443d0 fb2b0eac
...@@ -241,58 +241,10 @@ public class WeChatController implements IBaseController { ...@@ -241,58 +241,10 @@ public class WeChatController implements IBaseController {
String code, @PathVariable(value = "key") String systemKey, @PathVariable(value = "extdata") String extData, String code, @PathVariable(value = "key") String systemKey, @PathVariable(value = "extdata") String extData,
HttpServletRequest request, HttpServletResponse response HttpServletRequest request, HttpServletResponse response
) { ) {
String schema = getProtocol(); try {
LOGGER.info("从微信extdata版本接口进入:{}, extData:{}" ,schema, extData); String schema = getProtocol();
if (StringUtils.isEmpty(extData)) { LOGGER.info("从微信extdata版本接口进入:{}, extData:{}", schema, extData);
// 从code获取token if (StringUtils.isEmpty(extData)) {
Merchant merchant = merchantService.findMerchantByName(systemKey);
AccessTokenResponse token = wechatService.getToken(code);
if (token == null) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT);
return;
}
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT);
return;
}
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(userInfo.getOpenId());
// welcome 首次登录
if (userInfoInDb == null) {
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
if(StringUtils.isNotBlank(userInfo.getNickName())) {
String nickName = EmojiUtil.filter(userInfo.getNickName());
userInfo.setNickName(nickName);
}
userInfo = wechatService.saveWechatUserInfo(userInfo);
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo, Constants.Channel.WECHAT);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, Constants.Channel.WECHAT);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, Constants.Channel.WECHAT);
return;
}
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant, "", schema, Constants.Channel.WECHAT);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
} else {
HashMap<String, Object> extDataObj;
try {
extDataObj =
JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>() {
});
} catch (Exception ex) {
// 从code获取token // 从code获取token
Merchant merchant = merchantService.findMerchantByName(systemKey); Merchant merchant = merchantService.findMerchantByName(systemKey);
...@@ -302,7 +254,9 @@ public class WeChatController implements IBaseController { ...@@ -302,7 +254,9 @@ public class WeChatController implements IBaseController {
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT); redirectNormalUrl(response, merchant, Constants.Channel.WECHAT);
return; return;
} }
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId()); WechatUserInfo userInfo =
wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(),
token.getOpenId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) { if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url // 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT); redirectNormalUrl(response, merchant, Constants.Channel.WECHAT);
...@@ -312,75 +266,139 @@ public class WeChatController implements IBaseController { ...@@ -312,75 +266,139 @@ public class WeChatController implements IBaseController {
// welcome 首次登录 // welcome 首次登录
if (userInfoInDb == null) { if (userInfoInDb == null) {
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面 // 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
if(StringUtils.isNotBlank(userInfo.getNickName())) { if (StringUtils.isNotBlank(userInfo.getNickName())) {
String nickName = EmojiUtil.filter(userInfo.getNickName()); String nickName = EmojiUtil.filter(userInfo.getNickName());
userInfo.setNickName(nickName); userInfo.setNickName(nickName);
} }
userInfo = wechatService.saveWechatUserInfo(userInfo); userInfo = wechatService.saveWechatUserInfo(userInfo);
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo, Constants.Channel.WECHAT); redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo,
Constants.Channel.WECHAT);
return; return;
} }
if (userInfoInDb.getUserId() == null) { if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面 // 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, Constants.Channel.WECHAT); redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT);
return; return;
} }
User user = userService.findById(userInfoInDb.getUserId()); User user = userService.findById(userInfoInDb.getUserId());
if (user == null) { if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, Constants.Channel.WECHAT); redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT);
return; return;
} }
// 已经关联了用户 // 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。 // create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant, "", schema, Constants.Channel.WECHAT); String redirectUrl =
createUserSession(user, merchant, "", schema, Constants.Channel.WECHAT);
response.setHeader("Location", redirectUrl); response.setHeader("Location", redirectUrl);
response.setStatus(301); response.setStatus(301);
return; } else {
} HashMap<String, Object> extDataObj;
Long registerFrom = Long.valueOf(extDataObj.getOrDefault("registerFrom", "1").toString()); try {
String redirect = (String) extDataObj.getOrDefault("redirect", "redirect"); extDataObj =
Merchant merchant = merchantService.findMerchantByName(systemKey); JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>() {
AccessTokenResponse token = wechatService.getToken(code); });
if (token == null) { } catch (Exception ex) {
// 让用户登录,不关联微信, 构造不关联微信的url // 从code获取token
redirectNormalUrl(response, merchant, registerFrom); Merchant merchant = merchantService.findMerchantByName(systemKey);
return;
} AccessTokenResponse token = wechatService.getToken(code);
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId()); if (token == null) {
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) { // 让用户登录,不关联微信, 构造不关联微信的url
// 让用户登录,不关联微信, 构造不关联微信的url redirectNormalUrl(response, merchant, Constants.Channel.WECHAT);
redirectNormalUrl(response, merchant, registerFrom); return;
return; }
} WechatUserInfo userInfo =
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(userInfo.getOpenId()); wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(),
// welcome 首次登录 token.getOpenId());
if (userInfoInDb == null) { if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) {
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面 // 让用户登录,不关联微信, 构造不关联微信的url
if(StringUtils.isNotBlank(userInfo.getNickName())) { redirectNormalUrl(response, merchant, Constants.Channel.WECHAT);
String nickName = EmojiUtil.filter(userInfo.getNickName()); return;
userInfo.setNickName(nickName); }
WechatUserInfo userInfoInDb =
wechatService.findWechatUserInfoFromDb(userInfo.getOpenId());
// welcome 首次登录
if (userInfoInDb == null) {
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
if (StringUtils.isNotBlank(userInfo.getNickName())) {
String nickName = EmojiUtil.filter(userInfo.getNickName());
userInfo.setNickName(nickName);
}
userInfo = wechatService.saveWechatUserInfo(userInfo);
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo,
Constants.Channel.WECHAT);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT);
return;
}
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl =
createUserSession(user, merchant, "", schema, Constants.Channel.WECHAT);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
return;
} }
userInfo = wechatService.saveWechatUserInfo(userInfo); Long registerFrom = Long.valueOf(extDataObj.getOrDefault("registerFrom", "1").toString());
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo, registerFrom); String redirect = (String) extDataObj.getOrDefault("redirect", "redirect");
return; Merchant merchant = merchantService.findMerchantByName(systemKey);
} AccessTokenResponse token = wechatService.getToken(code);
if (userInfoInDb.getUserId() == null) { if (token == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面 // 让用户登录,不关联微信, 构造不关联微信的url
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom); redirectNormalUrl(response, merchant, registerFrom);
return; return;
} }
User user = userService.findById(userInfoInDb.getUserId()); WechatUserInfo userInfo =
if (user == null) { wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(),
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom); token.getOpenId());
return; if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, registerFrom);
return;
}
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(userInfo.getOpenId());
// welcome 首次登录
if (userInfoInDb == null) {
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
if (StringUtils.isNotBlank(userInfo.getNickName())) {
String nickName = EmojiUtil.filter(userInfo.getNickName());
userInfo.setNickName(nickName);
}
userInfo = wechatService.saveWechatUserInfo(userInfo);
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo, registerFrom);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom);
return;
}
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant, redirect, schema, registerFrom);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
} }
// 已经关联了用户 } catch (Exception ex) {
// create session, 登进去,该怎么玩怎么玩。 LOGGER.error("发生异常", ex);
String redirectUrl = createUserSession(user, merchant, redirect, schema, registerFrom); throw ex;
response.setHeader("Location", redirectUrl);
response.setStatus(301);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment