| | |
| | | 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; |
| | |
| | | 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) { |
| | |
| | | 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()); |
| | | } |
| | | |
| | | } |
| | | |
| | | |