| | |
| | | import cn.binarywang.wx.miniapp.api.WxMaService; |
| | | import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; |
| | | import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.member.domain.dto.AppUserAuthorizeDto; |
| | | import com.ruoyi.member.domain.dto.MerCashMemberPageDto; |
| | | import com.ruoyi.member.domain.dto.MerMemberPageDto; |
| | | import com.ruoyi.member.domain.vo.AppUserAuthorizeVo; |
| | | import com.ruoyi.member.domain.vo.AppUserInfoVo; |
| | | import com.ruoyi.member.domain.vo.MerMemberInfoVo; |
| | | import com.ruoyi.member.domain.vo.MerMemberPageVo; |
| | | import com.ruoyi.member.domain.vo.*; |
| | | import com.ruoyi.member.mapper.member.MemberMapper; |
| | | import com.ruoyi.member.service.member.MemberService; |
| | | import com.ruoyi.member.util.HttpUtils; |
| | | import com.ruoyi.system.api.RemoteOrderService; |
| | | import com.ruoyi.system.api.RemoteShopService; |
| | | import com.ruoyi.system.api.RemoteUserService; |
| | |
| | | import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; |
| | | import com.ruoyi.system.api.model.AppMiniLoginDto; |
| | | import com.ruoyi.system.api.model.AppMiniLoginVo; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import lombok.extern.log4j.Log4j; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import lombok.val; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.client.HttpClient; |
| | | import org.apache.http.client.methods.HttpGet; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | * @since 2023-04-25 |
| | | */ |
| | | @Service |
| | | @Log4j2 |
| | | public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService { |
| | | |
| | | private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; |
| | | |
| | | private static final String WX_APPID = "wxb7f0ea286fc4e535"; |
| | | |
| | | private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteUserService sysUserService; |
| | |
| | | String password = "hongruitang"; |
| | | sysUser.setPassword(SecurityUtils.encryptPassword(password)); |
| | | sysUser = sysUserService.registerUser(sysUser).getData(); |
| | | log.info("sysUser1"+sysUser.toString()); |
| | | member = new Member(); |
| | | member.setUserId(sysUser.getUserId()); |
| | | member.setDelFlag(0); |
| | |
| | | member.setMiniOpenid(openid); |
| | | member.setCreateTime(new Date()); |
| | | this.save(member); |
| | | |
| | | }else{ |
| | | sysUser = sysUserService.getSysUser(member.getUserId()).getData(); |
| | | log.info("member2"+member.toString()); |
| | | R<SysUser> sysUser1 = sysUserService.getSysUser(member.getUserId()); |
| | | log.info("sysUser1"+ sysUser1.getCode() + " : " + sysUser1.getMsg()); |
| | | sysUser = sysUser1.getData(); |
| | | log.info("sysUser"+sysUser.toString()); |
| | | } |
| | | appMiniLoginVo.setMiniOpenid(openid); |
| | | appMiniLoginVo.setWxUnionid(unionid); |
| | |
| | | appMiniLoginVo.setSessionKey(sessionKey); |
| | | stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey); |
| | | }else{ |
| | | log.info("null"); |
| | | return null; |
| | | } |
| | | log.info("appMiniLoginVo"+appMiniLoginVo.toString()); |
| | | return appMiniLoginVo; |
| | | } |
| | | |
| | |
| | | String mobile = null; |
| | | try { |
| | | //解密微信加密用户信息和手机号 |
| | | WxMaPhoneNumberInfo wxPhoneInfo; |
| | | /*WxMaPhoneNumberInfo wxPhoneInfo; |
| | | if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){ |
| | | wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv()); |
| | | }else{ |
| | |
| | | if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){ |
| | | throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED); |
| | | } |
| | | mobile = wxPhoneInfo.getPhoneNumber(); |
| | | mobile = wxPhoneInfo.getPhoneNumber();*/ |
| | | String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token"); |
| | | if (StringUtils.isBlank(accessToken)) { |
| | | String responseAccessToken = getAccessTokenByWX(); |
| | | JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); |
| | | accessToken = jsonAccessToken.getString("access_token"); |
| | | String errmsg = jsonAccessToken.getString("errmsg"); |
| | | Long expiresIn = jsonAccessToken.getLong("expires_in"); |
| | | if (StringUtils.isBlank(accessToken)) { |
| | | throw new ServiceException(errmsg); |
| | | } else { |
| | | expiresIn = expiresIn - 100; |
| | | stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS); |
| | | } |
| | | } |
| | | String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode()); |
| | | JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); |
| | | String errcode = jsonUserPhoneNumber.getString("errcode"); |
| | | String errmsg = jsonUserPhoneNumber.getString("errmsg"); |
| | | if (!errcode.equals("0")) { |
| | | throw new ServiceException(errmsg); |
| | | } |
| | | String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); |
| | | JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo); |
| | | mobile = jsonUserPhoneInfo.getString("purePhoneNumber"); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | return appUserAuthorizeVo; |
| | | } |
| | | |
| | | public static String getAccessTokenByWX() throws Exception { |
| | | String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; |
| | | Map<String, String> headers = new HashMap<>(8); |
| | | HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null); |
| | | return EntityUtils.toString(response.getEntity()); |
| | | } |
| | | |
| | | public static String getMobileByWX(String accessToken, String code) throws Exception { |
| | | String method = "POST"; |
| | | Map<String, String> headers = new HashMap<>(16); |
| | | headers.put("Content-Type", "application/json"); |
| | | headers.put("Accept", "application/json"); |
| | | Map<String, String> querys = new HashMap<>(16); |
| | | Map<String, String> bodys = new HashMap<>(16); |
| | | querys.put("access_token", accessToken ); |
| | | bodys.put("code", code); |
| | | String body = JSONObject.toJSONString(bodys); |
| | | String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; |
| | | HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body); |
| | | return EntityUtils.toString(response.getEntity()); |
| | | } |
| | | |
| | | /** |
| | | * 获取用户信息 |
| | | * @param userId |
| | |
| | | SysUser sysUser = sysUserService.getSysUser(userId).getData(); |
| | | Member member = this.getByUserId(userId); |
| | | appUserInfoVo.setUserId(userId); |
| | | appUserInfoVo.setRelationShopId(member.getRelationShopId()); |
| | | appUserInfoVo.setMemberNo(member.getMemberNo()); |
| | | appUserInfoVo.setNickName(sysUser.getNickName()); |
| | | appUserInfoVo.setPhonenumber(sysUser.getPhonenumber()); |
| | |
| | | @Override |
| | | public MerMemberInfoVo getMerMemberInfo(Long userId){ |
| | | MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo(); |
| | | SysUser sysUser = sysUserService.getSysUser(userId).getData(); |
| | | Member member = this.getByUserId(userId); |
| | | merMemberInfoVo.setUserId(userId); |
| | | merMemberInfoVo.setNickName(sysUser.getNickName()); |
| | | merMemberInfoVo.setPhonenumber(sysUser.getPhonenumber()); |
| | | merMemberInfoVo.setAvatar(sysUser.getAvatar()); |
| | | //未完成 |
| | | |
| | | return merMemberInfoVo; |
| | | } |
| | | |
| | | /** |
| | | * 分页获取收银用户列表 |
| | | * @param page |
| | | * @param merCashMemberPageDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){ |
| | | |
| | | List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto); |
| | | return merCashMemberPageVos; |
| | | } |
| | | } |