From 74b3557bf43308d8d663565ca0aa37d58ec2781a Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期二, 28 五月 2024 14:41:26 +0800 Subject: [PATCH] 写用户端接口 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 256 insertions(+), 40 deletions(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java index ea5ac76..0abeed2 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java @@ -1,27 +1,45 @@ package com.ruoyi.member.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.enums.GenderEnum; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.member.mapper.MemberMapper; import com.ruoyi.member.service.IMemberService; +import com.ruoyi.member.util.HttpUtils; +import com.ruoyi.system.api.RemoteUserService; +import com.ruoyi.system.api.constants.SecurityConstant; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.concurrent.TimeUnit; import javax.annotation.Resource; + +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -49,52 +67,137 @@ public static String query_url = "http://op.juhe.cn/idcard/query?key=" + APPKEY; + //微信 + 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"; + + //支付寶 + /** + * Alipay客户端 + */ + private AlipayClient alipayClient; + + /**支付宝网关*/ + /** + * 沙箱的 + */ + private static final String ALIPAY_BORDER_DEV = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + /** + * 个人用户的 + */ + private static final String ALIPAY_BORDER_PROD = "https://openapi.alipay.com/gateway.do"; + /** + * appID + **/ + private static final String APP_ID_PROD = "2021003196653501"; + /** + * 私钥 + */ + private static final String APP_PRIVATE_KEY = ""; + /** + * 支付宝公钥 + */ + private static final String ALIPAY_PUBLIC_KEY = ""; + + + @Resource private IMemberService iMemberService; + + @Resource + private WxMaService wxMaService; + + @Resource + private RemoteUserService sysUserService; + + @Resource + private RedisService redisService; + @Override - public Member loginThird(MemberDTO memberDTO) { - try { - if (memberDTO.getType() == 1) { - LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(Member::getZfbOpenid,memberDTO.getOpenid()); - Member member=iMemberService.getOne(wrapper); - if (member==null){ - Member m=new Member(); - m.setZfbOpenid(memberDTO.getOpenid()); - m.setNickname("未知"); - m.setLevel(0); - m.setAvatar(""); - iMemberService.save(m); - return m; - }else { + public AppMiniLoginVO loginThird(AppMiniLoginDTO appMiniLoginDto) { + AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); - return member; + if(appMiniLoginDto.getType()==1){ + if (appMiniLoginDto.getAuth_code()== null || appMiniLoginDto.getAuth_code().length() == 0) { + } else { + AppMiniLoginVO user=new AppMiniLoginVO(); + //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType + //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式 + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2"); + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + // 值为authorization_code时,代表用code换取 + request.setGrantType("authorization_code"); + //授权码,用户对应用授权后得到的 + request.setCode(appMiniLoginDto.getAuth_code()); + //这里使用execute方法 + AlipaySystemOauthTokenResponse response = null; + try { + response = alipayClient.execute(request); + } catch (AlipayApiException e) { + throw new RuntimeException(e); } + //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段 + request.setRefreshToken(response.getAccessToken()); + //返回成功时 就将唯一标识返回 + if (response.isSuccess()) { + System.out.println("调用成功"); + //我这里只返回了一个字段给前端用 + String user1= response.getUserId(); - } - if (memberDTO.getType() == 2) { - LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(Member::getWxOpenid,memberDTO.getOpenid()); - Member member=iMemberService.getOne(wrapper); - if (member==null){ - Member m=new Member(); - m.setZfbOpenid(memberDTO.getOpenid()); - m.setNickname("未知"); - m.setLevel(0); - m.setAvatar(""); - iMemberService.save(m); - return m; - }else { - - return member; + LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); + wrapper.eq(Member::getZfbOpenid,response.getUserId()); + Member member=iMemberService.getOne(wrapper); + SysUser sysUser = null; + if (member != null) { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + } + appMiniLoginVo.setZfbuserid(response.getUserId()); + appMiniLoginVo.setSysUser(sysUser); + appMiniLoginVo.setMemberid(member.getId()); + redisService.setCacheObject(SecurityConstant.SESSION_KEY + response.getUserId(), null, 1L, TimeUnit.DAYS); } } - } catch (Exception e) { - e.printStackTrace(); - + }else{ + WxMaJscode2SessionResult session = null; + String unionid; + String openid; + String sessionKey = null; + //获取session + try { + session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode()); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + if (session != null && StringUtils.isNotBlank(session.getOpenid())) { + unionid = session.getUnionid(); + openid = session.getOpenid(); + sessionKey = session.getSessionKey(); + //获取用户 + LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); + wrapper.eq(Member::getZfbOpenid,session.getOpenid()); + Member member=iMemberService.getOne(wrapper); + SysUser sysUser = null; + if (member != null) { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + } + appMiniLoginVo.setMiniOpenid(openid); + appMiniLoginVo.setWxUnionid(unionid); + appMiniLoginVo.setMemberid(member.getId()); + appMiniLoginVo.setSysUser(sysUser); + appMiniLoginVo.setSessionKey(sessionKey); + redisService.setCacheObject(SecurityConstant.SESSION_KEY + openid, sessionKey, 1L, TimeUnit.DAYS); + } } - return null; + + return appMiniLoginVo; } + + + @Override public Member getMembeid(MemberDTO memberDTO) { @@ -194,6 +297,119 @@ public List<Member> getMemberListByIds(Set<Long> memberIdList) { return this.listByIds(memberIdList); } + + @Override + public AppMiniLoginVO miniRegister(AppMiniRegisterDTO appMiniRegisterDTO) { + AppMiniLoginVO appMiniLoginVO =new AppMiniLoginVO(); + SysUser sysUser; + if (appMiniRegisterDTO.getType() == 1) { + LambdaQueryWrapper<Member> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(Member::getZfbOpenid, appMiniRegisterDTO.getZfbuserid()); + Member member = iMemberService.getOne(wrapper); + + //获取用户为空则新建 + if (member == null) { + //创建新用户 + String memberId = IdUtils.simpleUUID(); + sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName("白金用户"); + sysUser.setPhonenumber(appMiniRegisterDTO.getMiniOpenid()); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "123456"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser = sysUserService.registerUser(sysUser).getData(); + + member = new Member(); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setRealName("白酒用户"); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setWxUnionid(appMiniRegisterDTO.getWxUnionid()); + member.setMiniOpenid(appMiniRegisterDTO.getMiniOpenid()); + iMemberService.save(member); + + appMiniLoginVO.setMiniOpenid(member.getMiniOpenid()); + appMiniLoginVO.setWxUnionid(member.getWxUnionid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } else { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + appMiniLoginVO.setZfbuserid( appMiniRegisterDTO.getZfbuserid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } + + } + if (appMiniRegisterDTO.getType() == 2) { + LambdaQueryWrapper<Member> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(Member::getMiniOpenid, appMiniRegisterDTO.getMiniOpenid()); + Member member = iMemberService.getOne(wrapper); + //获取用户为空则新建 + if (member == null) { + //创建新用户 + String memberId = IdUtils.simpleUUID(); + sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName("白金用户"); + sysUser.setPhonenumber(appMiniRegisterDTO.getMiniOpenid()); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "123456"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser = sysUserService.registerUser(sysUser).getData(); + + member = new Member(); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setRealName("白酒用户"); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setWxUnionid(appMiniRegisterDTO.getWxUnionid()); + member.setMiniOpenid(appMiniRegisterDTO.getMiniOpenid()); + iMemberService.save(member); + + appMiniLoginVO.setMiniOpenid(member.getMiniOpenid()); + appMiniLoginVO.setWxUnionid(member.getWxUnionid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } else { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + appMiniLoginVO.setMiniOpenid(member.getMiniOpenid()); + appMiniLoginVO.setWxUnionid(member.getWxUnionid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } + + + + + } + return appMiniLoginVO; + + } + + 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 { + 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()); + } + } -- Gitblit v1.7.1