Commit 02b06672 authored by zhouqian's avatar zhouqian

get protocol

parent f4bbbf3a
package cn.quantgroup.xyqb.controller.external.user; package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant; import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo; import cn.quantgroup.xyqb.entity.WechatUserInfo;
...@@ -36,7 +37,7 @@ import java.util.Arrays; ...@@ -36,7 +37,7 @@ import java.util.Arrays;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/wechat") @RequestMapping("/wechat")
public class WeChatController { public class WeChatController implements IBaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(WeChatController.class); private static final Logger LOGGER = LoggerFactory.getLogger(WeChatController.class);
...@@ -167,6 +168,7 @@ public class WeChatController { ...@@ -167,6 +168,7 @@ public class WeChatController {
return builder.toString(); return builder.toString();
} }
/** /**
* 通过redirect_url获取code * 通过redirect_url获取code
* *
...@@ -221,7 +223,67 @@ public class WeChatController { ...@@ -221,7 +223,67 @@ public class WeChatController {
response.setStatus(301); response.setStatus(301);
} }
/**
/**
* 前端微信跳转页面,通过extdata
*
* @param response
* @return
*/
@RequestMapping("/receiveCode/extdata/{key}/{extdata}")
public void receiveCodeWithExtData(
String code, @PathVariable(value = "key") String systemKey, @PathVariable(value = "extdata") String extData,
HttpServletRequest request, HttpServletResponse response
) {
String schema = getProtocol();
LOGGER.info("从微信extdata版本接口进入:{}, extData:{}" ,schema, extData);
// 从code获取token
Merchant merchant = merchantService.findMerchantByName(systemKey);
AccessTokenResponse token = wechatService.getToken(code);
if (token == null) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant);
return;
}
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant);
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);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb);
return;
}
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant, "", schema);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
/**
* 通过redirect_url获取code * 通过redirect_url获取code
* *
* @param response * @param response
......
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