From 6e82cd5d5875b38fb30be5ee4c1c5d3dbe33fe98 Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期二, 28 五月 2024 17:31:46 +0800 Subject: [PATCH] 写用户端接口 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java | 400 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 398 insertions(+), 2 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 21a995e..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,9 +1,51 @@ package com.ruoyi.member.service.impl; -import com.ruoyi.member.domain.pojo.Member; + +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.*; +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; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; /** @@ -17,4 +59,358 @@ @Service public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements IMemberService { + + public static RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build(); + // 配置您申请的KEY,在个人中心->我的数据,接口名称上方查看 + public static final String APPKEY = ""; + //明文查询地址 + 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 AppMiniLoginVO loginThird(AppMiniLoginDTO appMiniLoginDto) { + AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); + + 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(); + + 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); + } + } + }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 appMiniLoginVo; + } + + + + + @Override + public Member getMembeid(MemberDTO memberDTO) { + return iMemberService.getById(memberDTO.getMemberid()); + } + + @Override + public void updateMembeid(MemberDTO memberDTO) { + Member member= iMemberService.getById(memberDTO.getMemberid()); + if (memberDTO.getAvatar()!=null){ + member.setAvatar(memberDTO.getAvatar()); + } + if (memberDTO.getNickname()!=null){ + member.setNickname(memberDTO.getNickname()); + } + iMemberService.updateById(member); + + } + + @Override + public void authentificationMembe(MemberDTO memberDTO) { + Member member= iMemberService.getById(memberDTO.getMemberid()); + member.setPhone(memberDTO.getPhone()); + member.setIdNumber(memberDTO.getIdNumber()); + member.setRealName(memberDTO.getRealName()); + + String realname = "";// 姓名 + String idcard = "";// 身份证 + int type = 1;// 普通版,不需要加密 + Map<String, Object> params = new HashMap<>(); + params.put("realname", realname); + params.put("idcard", idcard); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String result = null; + String url = query_url; + try { + url = new StringBuffer(url).append("&").append(urlencode(params)).toString(); + HttpGet httpget = new HttpGet(url); + httpget.setConfig(config); + response = httpClient.execute(httpget); + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + result = IOUtils.toString(resEntity.getContent(), "UTF-8"); + } + EntityUtils.consume(resEntity); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + response.close(); + httpClient.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + JSONObject jsonObject= JSON.parseObject(result); + String object= jsonObject.get("result").toString(); + JSONObject jsonObject1= JSON.parseObject(object); + if (Integer.valueOf(jsonObject1.get("res").toString())==2){ + throw new ServiceException("实名认证失败"); + } + + String sex=getGender(idcard); + if (sex.equals("女")){ + member.setGender(GenderEnum.FEMALE); + } + if (sex.equals("男")){ + member.setGender(GenderEnum.MALE); + } + + iMemberService.updateById(member); + } + + public static String getGender(String idNumber) { + int genderNum = Integer.parseInt(idNumber.substring(16, 17)); + return genderNum % 2 == 0 ? "女" : "男"; + } + + + public static String urlencode(Map<String, ?> data) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry<String, ?> i : data.entrySet()) { + try { + sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + String result = sb.toString(); + result = result.substring(0, result.lastIndexOf("&")); + return result; + } + + @Override + 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