注册手机号码,升级会员

master
382696293@qq.com 2 years ago
parent 7b7f6d974c
commit 74918a1825

@ -70,4 +70,6 @@ public interface WxUserMemberMapper {
public void insertTouristUser(WxUserMember wxUserMember); public void insertTouristUser(WxUserMember wxUserMember);
WxUserMember selectWxUserMemberByOpenId(@Param("openid") String openid); WxUserMember selectWxUserMemberByOpenId(@Param("openid") String openid);
void upgradeMember(@Param("phoneNumber") String phoneNumber, @Param("id") String id);
} }

@ -182,6 +182,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id} where id = #{id}
</update> </update>
<update id="upgradeMember">
UPDATE `wx_user_member`
SET `user_type` = 2,
`level` = 1,
`mobile` = #{phoneNumber},
`login_time` = sysdate(),
`update_time` = sysdate()
WHERE
`id` = #{id};
</update>
<delete id="deleteWxUserMemberById" parameterType="Long"> <delete id="deleteWxUserMemberById" parameterType="Long">
delete from wx_user_member where id = #{id} delete from wx_user_member where id = #{id}
</delete> </delete>

@ -34,5 +34,15 @@ public class UserMemberController extends BaseController {
return AjaxResult.success(wxUserMemberService.login(code, rawData, signature)); return AjaxResult.success(wxUserMemberService.login(code, rawData, signature));
} }
/**
*
* 1 wx.login
* 2getPhoneNumber code wx.login code
*
* @param code
* @return
*/
public AjaxResult upgradeMember(@RequestParam(value = "code") String code) throws Exception {
return wxUserMemberService.upgradeMember(code);
}
} }

@ -0,0 +1,41 @@
package com.flossom.miniProgram.domain.vo;
public class PhoneInfo {
private String phoneNumber;
private String purePhoneNumber;
private String countryCode;
public PhoneInfo() {
}
public PhoneInfo(String phoneNumber, String purePhoneNumber, String countryCode) {
this.phoneNumber = phoneNumber;
this.purePhoneNumber = purePhoneNumber;
this.countryCode = countryCode;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getPurePhoneNumber() {
return purePhoneNumber;
}
public void setPurePhoneNumber(String purePhoneNumber) {
this.purePhoneNumber = purePhoneNumber;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
}

@ -0,0 +1,44 @@
package com.flossom.miniProgram.domain.vo;
/**
*
*/
public class WxCode2PhoneRet {
private PhoneInfo phoneInfo;
private Integer errcode;
private String errmsg;
public WxCode2PhoneRet() {
}
public WxCode2PhoneRet(PhoneInfo phoneInfo, Integer errcode, String errmsg) {
this.phoneInfo = phoneInfo;
this.errcode = errcode;
this.errmsg = errmsg;
}
public PhoneInfo getPhoneInfo() {
return phoneInfo;
}
public void setPhoneInfo(PhoneInfo phoneInfo) {
this.phoneInfo = phoneInfo;
}
public Integer getErrcode() {
return errcode;
}
public void setErrcode(Integer errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
}

@ -1,5 +1,6 @@
package com.flossom.miniProgram.service; package com.flossom.miniProgram.service;
import com.flossom.common.core.web.domain.AjaxResult;
import com.flossom.hzMapper.domain.WxUserMember; import com.flossom.hzMapper.domain.WxUserMember;
import com.flossom.miniProgram.domain.vo.LoginUserVo; import com.flossom.miniProgram.domain.vo.LoginUserVo;
@ -8,4 +9,6 @@ public interface IWxUserMemberService {
LoginUserVo obtainUserMemberInfo(Long userNo); LoginUserVo obtainUserMemberInfo(Long userNo);
LoginUserVo login(String code, String rawData, String signature) throws Exception; LoginUserVo login(String code, String rawData, String signature) throws Exception;
AjaxResult upgradeMember(String code) throws Exception;
} }

@ -8,9 +8,11 @@ import com.flossom.common.core.domain.R;
import com.flossom.common.core.exception.ServiceException; import com.flossom.common.core.exception.ServiceException;
import com.flossom.common.core.web.domain.AjaxResult; import com.flossom.common.core.web.domain.AjaxResult;
import com.flossom.common.redis.service.RedisService; import com.flossom.common.redis.service.RedisService;
import com.flossom.common.security.utils.SecurityUtils;
import com.flossom.hzMapper.domain.WxUserMember; import com.flossom.hzMapper.domain.WxUserMember;
import com.flossom.hzMapper.mapper.WxUserMemberMapper; import com.flossom.hzMapper.mapper.WxUserMemberMapper;
import com.flossom.miniProgram.domain.vo.LoginUserVo; import com.flossom.miniProgram.domain.vo.LoginUserVo;
import com.flossom.miniProgram.domain.vo.WxCode2PhoneRet;
import com.flossom.miniProgram.domain.vo.WxCode2SessionRet; import com.flossom.miniProgram.domain.vo.WxCode2SessionRet;
import com.flossom.miniProgram.service.IWxUserMemberService; import com.flossom.miniProgram.service.IWxUserMemberService;
import com.flossom.miniProgram.utils.MiniProgramUtils; import com.flossom.miniProgram.utils.MiniProgramUtils;
@ -19,6 +21,7 @@ import com.flossom.system.api.RemoteUserService;
import com.flossom.system.api.domain.LoginBody; import com.flossom.system.api.domain.LoginBody;
import com.flossom.system.api.domain.RegisterBody; import com.flossom.system.api.domain.RegisterBody;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -85,7 +88,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
public LoginUserVo login(String code, String rawData, String signature) throws Exception { public LoginUserVo login(String code, String rawData, String signature) throws Exception {
// 1、使用临时凭证 code 获取 appi + appsecret + code // 1、使用临时凭证 code 获取 appi + appsecret + code
WxCode2SessionRet wxCode2SessionRet = JSON.parseObject(MiniProgramUtils.getSessionKeyAndOpenId(code), WxCode2SessionRet.class); WxCode2SessionRet wxCode2SessionRet = JSON.parseObject(MiniProgramUtils.getSessionKeyAndOpenId(code), WxCode2SessionRet.class);
if (0 != wxCode2SessionRet.getErrcode()) { if (200 != wxCode2SessionRet.getErrcode()) {
logger.error(wxCode2SessionRet.getErrmsg()); logger.error(wxCode2SessionRet.getErrmsg());
return null; return null;
} }
@ -152,5 +155,22 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
return loginUserVo; return loginUserVo;
} }
@Override
public AjaxResult upgradeMember(String code) throws Exception {
WxCode2PhoneRet wxCode2PhoneRet = JSON.parseObject(MiniProgramUtils.getPhone(code), WxCode2PhoneRet.class);
if (wxCode2PhoneRet.getErrcode() != 200) {
logger.error("用户手机号码获取失败");
return AjaxResult.error("手机号获取失败");
}
String username = SecurityUtils.getLoginUser().getUsername();
if (StringUtils.isBlank(username)) {
logger.error("获取用户信息失败");
return AjaxResult.error("获取用户信息失败");
}
String id = username.replace(UserConstants.WX_SYSTEM_USER_USERNAME, "");
wxUserMemberMapper.upgradeMember(wxCode2PhoneRet.getPhoneInfo().getPhoneNumber(), id);
return AjaxResult.success();
}
} }

@ -12,32 +12,33 @@ public class MiniProgramUtils {
private static final String WX_SECRET = ""; private static final String WX_SECRET = "";
private static final String loginUrl = "https://api.weixin.qq.com/sns/jscode2session"; private static final String loginUrl = "https://api.weixin.qq.com/sns/jscode2session";
private static final String getPhoneUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
public static String getSessionKeyAndOpenId(String jsCode) throws Exception { public static String getSessionKeyAndOpenId(String jsCode) throws Exception {
return getSessionKeyAndOpenId(WX_APPID, WX_SECRET, jsCode, "authorization_code"); return getSessionKeyAndOpenId(WX_APPID, WX_SECRET, jsCode, "authorization_code");
} }
/** /**
* code openid session_key * code openid session_key
*
* @param appid * @param appid
* @param secret * @param secret
* @param jsCode * @param jsCode
* @param grant_type * @param grant_type
* * @return <p>
*
* { * {
* "openid":"xxxxxx", * "openid":"xxxxxx",
* "session_key":"xxxxx", * "session_key":"xxxxx",
* "unionid":"xxxxx", * "unionid":"xxxxx",
* "errcode":0, * "errcode":0,
* "errmsg":"xxxxx" * "errmsg":"xxxxx"
* } * }
* * <p>
* errcode * errcode
* 40029 code js_code * 40029 code js_code
* 45011 api minute-quota reach limit mustslower retry next minute API * 45011 api minute-quota reach limit mustslower retry next minute API
* 40226 code blocked * 40226 code blocked
* -1 system error * -1 system error
*/ */
public static String getSessionKeyAndOpenId(String appid, String secret, String jsCode, String grant_type) throws Exception { public static String getSessionKeyAndOpenId(String appid, String secret, String jsCode, String grant_type) throws Exception {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
@ -48,5 +49,22 @@ public class MiniProgramUtils {
return HttpClientUtils.getParameters(loginUrl, params); return HttpClientUtils.getParameters(loginUrl, params);
} }
/**
* @param code
* @return <p></p>
* errcode number
* errmsg string
* phone_info object
*
* phoneNumber string
* purePhoneNumber string
* countryCode string
*/
public static String getPhone(String code) throws Exception {
Map<String, String> params = new HashMap();
params.put("code", code);
return HttpClientUtils.postParameters(getPhoneUrl, params);
}
} }

Loading…
Cancel
Save