Commit ac92cb80 authored by zhouqian's avatar zhouqian

wechat-pay

parent 6b7ba5aa
...@@ -60,9 +60,6 @@ public class WeChatController implements IBaseController { ...@@ -60,9 +60,6 @@ public class WeChatController implements IBaseController {
@Autowired @Autowired
private IUserService userService; private IUserService userService;
@Autowired
private IPageService pageService;
// https://passport.xyqb.com/landing?key=xxx&target=cashTarget5&registerFrom=198&channelId=%d // https://passport.xyqb.com/landing?key=xxx&target=cashTarget5&registerFrom=198&channelId=%d
@Value("${xyqb-user.ui}") @Value("${xyqb-user.ui}")
private String userUIAddr; private String userUIAddr;
...@@ -83,30 +80,6 @@ public class WeChatController implements IBaseController { ...@@ -83,30 +80,6 @@ public class WeChatController implements IBaseController {
return ""; 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三个参数 * 1.获取signature, timestamp, nonce三个参数
...@@ -121,8 +94,7 @@ public class WeChatController implements IBaseController { ...@@ -121,8 +94,7 @@ public class WeChatController implements IBaseController {
String signature = request.getParameter("signature"); String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp"); String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce"); 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); Arrays.sort(arrs);
String joinStr = joinArray(arrs); String joinStr = joinArray(arrs);
joinStr = sha1(joinStr); joinStr = sha1(joinStr);
...@@ -135,16 +107,16 @@ public class WeChatController implements IBaseController { ...@@ -135,16 +107,16 @@ public class WeChatController implements IBaseController {
* @param decript * @param decript
* @return 返回40位16进制字符串 * @return 返回40位16进制字符串
*/ */
public String sha1(String decript) { private String sha1(String decript) {
try { try {
MessageDigest digest = java.security.MessageDigest MessageDigest digest = java.security.MessageDigest
.getInstance("SHA-1"); .getInstance("SHA-1");
digest.update(decript.getBytes()); digest.update(decript.getBytes());
byte messageDigest[] = digest.digest(); byte messageDigest[] = digest.digest();
StringBuffer hexString = new StringBuffer(); StringBuilder hexString = new StringBuilder();
// 字节数组转换为十六进制数 // 字节数组转换为十六进制数
for (int i = 0; i < messageDigest.length; i++) { for (byte aMessageDigest : messageDigest) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); String shaHex = Integer.toHexString(aMessageDigest & 0xFF);
if (shaHex.length() < 2) { if (shaHex.length() < 2) {
hexString.append(0); hexString.append(0);
} }
...@@ -172,65 +144,6 @@ public class WeChatController implements IBaseController { ...@@ -172,65 +144,6 @@ public class WeChatController implements IBaseController {
return builder.toString(); 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 * 前端微信跳转页面,通过extdata
* *
...@@ -239,8 +152,8 @@ public class WeChatController implements IBaseController { ...@@ -239,8 +152,8 @@ public class WeChatController implements IBaseController {
*/ */
@RequestMapping("/receiveCode/extdata/{key}/{extdata}") @RequestMapping("/receiveCode/extdata/{key}/{extdata}")
public void receiveCodeWithExtData( public void receiveCodeWithExtData(
String code, @PathVariable(value = "key") String systemKey, @PathVariable(value = "extdata") String extData, String code, @PathVariable(value = "key") String systemKey,
HttpServletRequest request, HttpServletResponse response @PathVariable(value = "extdata") String extData, HttpServletResponse response
) { ) {
try { try {
String schema = getProtocol(); String schema = getProtocol();
...@@ -511,6 +424,8 @@ public class WeChatController implements IBaseController { ...@@ -511,6 +424,8 @@ public class WeChatController implements IBaseController {
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom) { private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom) {
if ("baitiao".equals(merchant.getName())) { if ("baitiao".equals(merchant.getName())) {
return userUIAddr + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198"; 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 { } else {
return userUIAddr + "/landing?key=xyqb&target=cashTarget4&channelId=1&registerFrom=" + registerFrom; return userUIAddr + "/landing?key=xyqb&target=cashTarget4&channelId=1&registerFrom=" + registerFrom;
} }
...@@ -519,6 +434,8 @@ public class WeChatController implements IBaseController { ...@@ -519,6 +434,8 @@ public class WeChatController implements IBaseController {
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom) { private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom) {
if ("baitiao".equals(merchant.getName())) { if ("baitiao".equals(merchant.getName())) {
return userUIAddr + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId(); 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 { } else {
return userUIAddr + "/landing?key=xyqb&target=cashTarget4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId(); 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