Commit ac92cb80 authored by zhouqian's avatar zhouqian

wechat-pay

parent 6b7ba5aa
......@@ -60,9 +60,6 @@ public class WeChatController implements IBaseController {
@Autowired
private IUserService userService;
@Autowired
private IPageService pageService;
// https://passport.xyqb.com/landing?key=xxx&target=cashTarget5&registerFrom=198&channelId=%d
@Value("${xyqb-user.ui}")
private String userUIAddr;
......@@ -83,30 +80,6 @@ public class WeChatController implements IBaseController {
return "";
}
/**
* 微信登录
*
* @param name 姓名
* @param idNo 身份证号
* @param phoneNo 手机号
* @param registerFrom ${registerFrom}
* @param channelId ${channelId}
* @param appChannel ${appChanel}
* @param key "xyqb"
* @return
*/
public JsonResult webChatLogin(String name, String idNo, String phoneNo, String registerFrom,
String channelId, String appChannel, String key) {
if (StringUtils.isBlank(name) || StringUtils.isBlank(idNo) || StringUtils.isBlank(phoneNo)) {
return JsonResult.buildErrorStateResult("请填写完整的用户信息.", null);
}
if (StringUtils.isBlank(key)) {
return JsonResult.buildErrorStateResult("无效的商户信息.", null);
}
return null;
}
/**
* 验签:步骤
* 1.获取signature, timestamp, nonce三个参数
......@@ -121,8 +94,7 @@ public class WeChatController implements IBaseController {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String token = TOKEN;
String[] arrs = new String[]{token, timestamp, nonce};
String[] arrs = new String[]{TOKEN, timestamp, nonce};
Arrays.sort(arrs);
String joinStr = joinArray(arrs);
joinStr = sha1(joinStr);
......@@ -135,16 +107,16 @@ public class WeChatController implements IBaseController {
* @param decript
* @return 返回40位16进制字符串
*/
public String sha1(String decript) {
private String sha1(String decript) {
try {
MessageDigest digest = java.security.MessageDigest
.getInstance("SHA-1");
digest.update(decript.getBytes());
byte messageDigest[] = digest.digest();
StringBuffer hexString = new StringBuffer();
StringBuilder hexString = new StringBuilder();
// 字节数组转换为十六进制数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
for (byte aMessageDigest : messageDigest) {
String shaHex = Integer.toHexString(aMessageDigest & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
......@@ -172,65 +144,6 @@ public class WeChatController implements IBaseController {
return builder.toString();
}
/**
* 通过redirect_url获取code
*
* @param response
* @return
*/
@RequestMapping("/receiveCode/{key}/{redirect}")
public void receiveCode(
String code, @PathVariable(value = "key") String systemKey,
@PathVariable String redirect, HttpServletRequest request, HttpServletResponse response) {
String schema = request.getScheme();
LOGGER.info("HTTP协议:" + schema);
// 从code获取token
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, redirect, schema, Constants.Channel.WECHAT);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
/**
* 前端微信跳转页面,通过extdata
*
......@@ -239,8 +152,8 @@ public class WeChatController implements IBaseController {
*/
@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 code, @PathVariable(value = "key") String systemKey,
@PathVariable(value = "extdata") String extData, HttpServletResponse response
) {
try {
String schema = getProtocol();
......@@ -511,6 +424,8 @@ public class WeChatController implements IBaseController {
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom) {
if ("baitiao".equals(merchant.getName())) {
return userUIAddr + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198";
} else if ("wechat-pay".equals(merchant.getName())) {
return userUIAddr + "/landing?key=wechat-pay&target=cashTarget4&channelId=1&registerFrom" + registerFrom;
} else {
return userUIAddr + "/landing?key=xyqb&target=cashTarget4&channelId=1&registerFrom=" + registerFrom;
}
......@@ -519,6 +434,8 @@ public class WeChatController implements IBaseController {
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom) {
if ("baitiao".equals(merchant.getName())) {
return userUIAddr + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
} else if ("wechat-pay".equals(merchant.getName())) {
return userUIAddr + "/landing?key=wechat-pay&target=cashTarget4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId();
} else {
return userUIAddr + "/landing?key=xyqb&target=cashTarget4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId();
}
......
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