Commit 568b4a02 authored by 技术部-任文超's avatar 技术部-任文超

重构微信服务接口代码

parent 0c52ce53
...@@ -17,7 +17,6 @@ import com.alibaba.fastjson.JSON; ...@@ -17,7 +17,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
...@@ -25,21 +24,15 @@ import org.slf4j.Logger; ...@@ -25,21 +24,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.Arrays; import java.util.*;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/** /**
* Created by 11 on 2017/1/17. * Created by 11 on 2017/1/17.
...@@ -66,12 +59,19 @@ public class WeChatController implements IBaseController { ...@@ -66,12 +59,19 @@ public class WeChatController implements IBaseController {
@Autowired @Autowired
private IUserService userService; private IUserService userService;
// https://passport.xyqb.com/landing?key=xxx&target=cashTarget5&registerFrom=198&channelId=%d /**
* 用户中心UI的http协议头域名
* http://passport.xyqb.com
*/
@Value("${passport.http}") @Value("${passport.http}")
private String userUIAddr; private String userUiDomain;
@Value("${passport.http}") /**
private String userDomainStr; * 用户中心UI的https协议头域名
* https://passport.xyqb.com
*/
@Value("${passport.https}")
private String userUiDomainS;
@Value("${api.http}") @Value("${api.http}")
private String xyqbDomainStr; private String xyqbDomainStr;
...@@ -79,10 +79,6 @@ public class WeChatController implements IBaseController { ...@@ -79,10 +79,6 @@ public class WeChatController implements IBaseController {
@Autowired @Autowired
private IHttpService httpService; private IHttpService httpService;
//加https地址
@Value("${passport.https}")
private String userUIAddrS;
/** /**
* 开发者资质认证,有必要吗? * 开发者资质认证,有必要吗?
* *
...@@ -169,183 +165,101 @@ public class WeChatController implements IBaseController { ...@@ -169,183 +165,101 @@ public class WeChatController implements IBaseController {
* @return * @return
*/ */
@RequestMapping("/receiveCode/extdata/{key}/{extdata}") @RequestMapping("/receiveCode/extdata/{key}/{extdata}")
public void receiveCodeWithExtData( public void receiveCodeWithExtData(String code, @PathVariable(value = "key") String systemKey,
String code, @PathVariable(value = "key") String systemKey, @PathVariable(value = "extdata") String extData, HttpServletResponse response) {
@PathVariable(value = "extdata") String extData, HttpServletResponse response Long registerFrom = null;
) { String redirect = null;
String schema = null;
try { try {
String schema = getProtocol(); extData = new String(Base64.decodeBase64(extData), "UTF-8");
try { } catch (Exception ex) {
extData = new String(Base64.decodeBase64(extData), "UTF-8"); extData = "";
} catch (Exception ex) { }
extData = ""; if (StringUtils.isBlank(extData)) {
} receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
return;
String protocol="http:"; }
LOGGER.info("从微信extdata版本接口进入:{}, extData:{}", schema, extData);
LOGGER.info("从微信extdata版本接口进入:{}, extData:{}", schema, extData); HashMap<String, Object> extDataObj;
if (StringUtils.isEmpty(extData)) { try {
// 从code获取token extDataObj = JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>(){});
Merchant merchant = merchantService.findMerchantByName(systemKey); } catch (Exception ex) {
LOGGER.error("解析extData发生错误", ex);
AccessTokenResponse token = wechatService.getToken(code); receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
if (token == null) { return;
// 让用户登录,不关联微信, 构造不关联微信的url }
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT,protocol); schema = extDataObj.getOrDefault("protocol", "http:").toString();
return; LOGGER.info("从微信登录extData中获得协议信息,protocol:{}", schema);
} registerFrom = Long.valueOf(extDataObj.getOrDefault("registerFrom", "1").toString());
WechatUserInfo userInfo = redirect = (String) extDataObj.getOrDefault("redirect", "redirect");
wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), LOGGER.info("从微信登录,registerFrom:{}, redirect:{}", registerFrom, redirect);
token.getOpenId()); receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) { }
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT,protocol);
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,protocol);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT,protocol);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT,protocol);
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) {
LOGGER.error("解析extData发生错误", ex);
// 从code获取token
Merchant merchant = merchantService.findMerchantByName(systemKey);
AccessTokenResponse token = wechatService.getToken(code); /**
if (token == null) { * 前端微信跳转页面
// 让用户登录,不关联微信, 构造不关联微信的url * @param code
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT,protocol); * @param systemKey
return; * @param schema
} * @param registerFrom
WechatUserInfo userInfo = * @param redirect
wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), * @param response
token.getOpenId()); */
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) { private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, HttpServletResponse response){
// 让用户登录,不关联微信, 构造不关联微信的url /*
redirectNormalUrl(response, merchant, Constants.Channel.WECHAT,protocol); * 预处理(容错)
return; */
} registerFrom = Optional.ofNullable(registerFrom).orElse(Constants.Channel.WECHAT);
WechatUserInfo userInfoInDb = redirect = Optional.ofNullable(redirect).orElse("");
wechatService.findWechatUserInfoFromDb(userInfo.getOpenId()); schema = StringUtils.isBlank(schema) ? getProtocol() : schema;
// welcome 首次登录 String domain = userUiDomain;
if (userInfoInDb == null) { if(Objects.equals(schema, "https:")){
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面 domain = userUiDomainS;
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,protocol);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT,protocol);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb,
Constants.Channel.WECHAT,protocol);
return;
}
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl =
createUserSession(user, merchant, "", schema, Constants.Channel.WECHAT);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
return;
}
protocol = extDataObj.getOrDefault("protocol", "http:").toString(); // 从code获取token
LOGGER.info("从微信登录extData中获得协议信息,protocol:{}", protocol); Merchant merchant = merchantService.findMerchantByName(systemKey);
Long registerFrom = Long.valueOf(extDataObj.getOrDefault("registerFrom", "1").toString()); AccessTokenResponse token = wechatService.getToken(code);
String redirect = (String) extDataObj.getOrDefault("redirect", "redirect"); if (token == null) {
LOGGER.info("从微信登录,registerFrom:{}, redirect:{}", registerFrom, redirect); // 让用户登录,不关联微信, 构造不关联微信的url
Merchant merchant = merchantService.findMerchantByName(systemKey); redirectNormalUrl(response, merchant, registerFrom,domain);
AccessTokenResponse token = wechatService.getToken(code); return;
if (token == null) { }
// 让用户登录,不关联微信, 构造不关联微信的url WechatUserInfo userInfo =
redirectNormalUrl(response, merchant, registerFrom,protocol);
return;
}
WechatUserInfo userInfo =
wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(),
token.getOpenId()); token.getOpenId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) { if (userInfo == null || StringUtils.isEmpty(userInfo.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url // 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, registerFrom,protocol); redirectNormalUrl(response, merchant, registerFrom, domain);
return; return;
} }
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(userInfo.getOpenId()); WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(userInfo.getOpenId());
// 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);
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo, registerFrom,protocol);
return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom,protocol);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom,protocol);
return;
}
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant, redirect, schema, registerFrom);
LOGGER.info("Location:[{}]",redirectUrl);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
} }
} catch (Exception ex) { userInfo = wechatService.saveWechatUserInfo(userInfo);
LOGGER.error("发生异常", ex); redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo, registerFrom, domain);
throw ex; return;
}
if (userInfoInDb.getUserId() == null) {
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom, domain);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb, registerFrom, domain);
return;
} }
// 已经关联了用户
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant, redirect, schema, registerFrom);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
} }
/** /**
...@@ -404,92 +318,73 @@ public class WeChatController implements IBaseController { ...@@ -404,92 +318,73 @@ public class WeChatController implements IBaseController {
response.setStatus(301); response.setStatus(301);
} }
private String createUserSession(User user, Merchant merchant, String redirect, String schema, Long registerFrom) { private String createUserSession(User user, Merchant merchant, String redirect, String domain, Long registerFrom) {
//String url = "http://passport.xyqb.com";
String url = "http://"+userDomainStr;
if ("https:".equals(schema)) {
url = "https://"+userDomainStr;
}
if (StringUtils.isEmpty(redirect) || "redirect".equals(redirect)) { if (StringUtils.isEmpty(redirect) || "redirect".equals(redirect)) {
LOGGER.info("微信登录:redirect为null,走正常流程."); LOGGER.info("微信登录:redirect为null,走正常流程.");
if ("baitiao".equals(merchant.getName())) { if ("baitiao".equals(merchant.getName())) {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget5", Constants.Channel.BAITIAO, url, Constants.Channel.WECHAT); return loginInWechatWithSessionCreated(user, merchant, "cashTarget5", Constants.Channel.BAITIAO, domain, Constants.Channel.WECHAT);
} else if ("wechat-pay".equals(merchant.getName())) { } else if ("wechat-pay".equals(merchant.getName())) {
AuthBean authBean = sessionService.createSession(Constants.Channel.WECHAT, registerFrom, "", user, merchant); AuthBean authBean = sessionService.createSession(Constants.Channel.WECHAT, registerFrom, "", user, merchant);
return url + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + Constants.Channel.WECHAT + "&key=" + merchant.getName() + "&target=cashTarget5"; return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + Constants.Channel.WECHAT + "&key=" + merchant.getName() + "&target=cashTarget5";
} else { } else {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget4", 1L, url, registerFrom); return loginInWechatWithSessionCreated(user, merchant, "cashTarget4", 1L, domain, registerFrom);
} }
} else if ("local".equals(redirect)) { } else if ("local".equals(redirect)) {
LOGGER.info("微信登录:redirect不为null,创建session跳到指定前端页面."); LOGGER.info("微信登录:redirect不为null,创建session跳到指定前端页面.");
AuthBean authBean = sessionService.createSession(Constants.Channel.WECHAT, Constants.Channel.WECHAT, "", user, merchant); AuthBean authBean = sessionService.createSession(Constants.Channel.WECHAT, Constants.Channel.WECHAT, "", user, merchant);
LOGGER.info("微信登录:跳转地址{}", url + "/weixin/callback?phoneNo=" + user.getPhoneNo() + "&token=" + authBean.getToken()); LOGGER.info("微信登录:跳转地址{}", domain + "/weixin/callback?phoneNo=" + user.getPhoneNo() + "&token=" + authBean.getToken());
Long channelId = "baitiao".equals(merchant.getName()) ? 222L : 1L; Long channelId = "baitiao".equals(merchant.getName()) ? 222L : 1L;
String target = "baitiao".equals(merchant.getName()) ? "cashTarget5" : "cashTarget4"; String target = "baitiao".equals(merchant.getName()) ? "cashTarget5" : "cashTarget4";
return url + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom +
"&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target + "&isWechat=true"; "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target + "&isWechat=true";
} }
return null; return null;
} }
private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId, String url, Long registerFrom) { private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId, String url, Long registerFrom) {
AuthBean authBean = sessionService.createSession(channelId, registerFrom, "", user, merchant); AuthBean authBean = sessionService.createSession(channelId, registerFrom, "", user, merchant);
return url + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target; return url + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target;
} }
private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String protocol) { private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String domain) {
String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo, registerFrom,protocol); String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo, registerFrom,domain);
LOGGER.info("redirectWechatLoginUrlWithoutLogin redirectUrl:[{}]",redirectUrl); LOGGER.info("redirectWechatLoginUrlWithoutLogin redirectUrl:[{}]",redirectUrl);
response.setHeader("Location", redirectUrl); response.setHeader("Location", redirectUrl);
response.setStatus(301); response.setStatus(301);
} }
private void redirectNormalUrl(HttpServletResponse response, Merchant merchant, Long registerFrom,String protocol) { private void redirectNormalUrl(HttpServletResponse response, Merchant merchant, Long registerFrom,String domain) {
String redirectUrl = assembleNormalRedirectUrl(merchant, registerFrom,protocol); String redirectUrl = assembleNormalRedirectUrl(merchant, registerFrom,domain);
LOGGER.info("redirectNormalUrl redirectUrl:[{}]",redirectUrl); LOGGER.info("redirectNormalUrl redirectUrl:[{}]",redirectUrl);
response.setHeader("Location", redirectUrl); response.setHeader("Location", redirectUrl);
response.setStatus(301); response.setStatus(301);
} }
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom,String protocol) { private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom,String domain) {
String domains=userUIAddr;
if(protocol!=null&&protocol.equals("https:")){
domains=userUIAddrS;
}
if ("baitiao".equals(merchant.getName())) { if ("baitiao".equals(merchant.getName())) {
if(registerFrom==58l||registerFrom==198l){ if(registerFrom == 58L || registerFrom == 198L){
return domains + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom="+registerFrom; return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom="+registerFrom;
}else{ }else{
return domains + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198"; return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198";
} }
} else if ("wechat-pay".equals(merchant.getName())) { } else if ("wechat-pay".equals(merchant.getName())) {
return domains + "/landing?key=wechat-pay&target=cashTarget5&channelId=1&page=landing/4&registerFrom" + registerFrom; return domain + "/landing?key=wechat-pay&target=cashTarget5&channelId=1&page=landing/4&registerFrom" + registerFrom;
} else { } else {
return domains + "/landing?key=xyqb&target=cashTarget4&channelId=1&registerFrom=" + registerFrom; return domain + "/landing?key=xyqb&target=cashTarget4&channelId=1&registerFrom=" + registerFrom;
} }
} }
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String protocol) { private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String domain) {
String domains=userUIAddr;
if(protocol!=null&&protocol.equals("https:")){
domains=userUIAddrS;
}
if ("baitiao".equals(merchant.getName())) { if ("baitiao".equals(merchant.getName())) {
if(registerFrom==58l||registerFrom==198l){ if(registerFrom == 58L || registerFrom == 198L){
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=" + registerFrom + "&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
return domains + "/landing?key=baitiao&target=cashTarget5&registerFrom=" + registerFrom + "&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
}else{ }else{
return domains + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId(); return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
} }
} else if ("wechat-pay".equals(merchant.getName())) { } else if ("wechat-pay".equals(merchant.getName())) {
return domains + "/landing?key=wechat-pay&target=cashTarget5&page=landing/4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId(); return domain + "/landing?key=wechat-pay&target=cashTarget5&page=landing/4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId();
} else { } else {
return domains + "/landing?key=xyqb&target=cashTarget4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId(); return domain + "/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