Parcourir la source

脆球邮箱账号车票验证码获取

zoujiajian il y a 2 ans
Parent
commit
ef004d8074

+ 16 - 0
netflix-common/src/main/java/com/cyksj/common/util/StringUtil.java

@@ -11,6 +11,8 @@ import java.net.http.HttpResponse;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author  chan 字符串操作辅助类
@@ -555,4 +557,18 @@ public final class StringUtil {
 
 		return "unknown";
 	}
+
+	/**
+	 * 获取账号登录验证码
+	 */
+	public static String getVerifyCodePattern(String code) {
+		if (StrUtil.isNotEmpty(code)) {
+			Pattern pattern = Pattern.compile("\\d{4,}");
+			Matcher matcher = pattern.matcher(code);
+			while (matcher.find()) {
+				return matcher.group();
+			}
+		}
+		return StrUtil.EMPTY;
+	}
 }

+ 44 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/CuiQiuEmailDetailDto.java

@@ -0,0 +1,44 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailDetailDto
+ * 创建者: JavaZou
+ * 创建时间:2024/4/25 16:52
+ */
+@Getter
+@Setter
+public class CuiQiuEmailDetailDto {
+	private Integer code;
+
+	private String msg;
+
+	private ResultData data;
+
+	@Getter
+	@Setter
+	public static class ResultData{
+		private Content content;
+	}
+
+	@Getter
+	@Setter
+	public static class Content {
+		private Integer id;
+
+		private String time;
+
+		private String subject;
+
+		private List<CuiQiuEmailDto.CuiQiuUser> from;
+
+		private List<CuiQiuEmailDto.CuiQiuUser> to;
+
+		private String body;
+	}
+}

+ 38 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/CuiQiuEmailDto.java

@@ -0,0 +1,38 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailDto
+ * 创建者: JavaZou
+ * 创建时间:2024/4/25 16:35
+ */
+
+@Getter
+@Setter
+public class CuiQiuEmailDto {
+
+	private Long id;
+
+	private String time;
+
+	private Long timestamp;
+
+	private String subject;
+
+	private List<CuiQiuUser> from;
+
+	private List<CuiQiuUser> to;
+
+	@Getter
+	@Setter
+	public static class CuiQiuUser{
+		private String name;
+
+		private String address;
+	}
+}

+ 31 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/CuiQiuEmailResultDto.java

@@ -0,0 +1,31 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailResultDto
+ * 创建者: JavaZou
+ * 创建时间:2024/4/25 16:42
+ */
+@Getter
+@Setter
+public class CuiQiuEmailResultDto {
+	private Integer code;
+
+	private String msg;
+
+	private ResultData data;
+
+	@Getter
+	@Setter
+	public static class ResultData {
+		private Integer total;
+
+		private List<CuiQiuEmailDto> list;
+	}
+
+}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/corp/impl/WxCorpOpsImpl.java

@@ -540,7 +540,7 @@ public class WxCorpOpsImpl implements WxCorpOps {
 		String accessToken = getAccessToken(corpId);
 		String url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_msg_template?access_token=" + accessToken;
 		log.info("发送的内容为: {}",Jsons.toJson(msgTemplate));
-		log.info("企业微信群发消息 corpId:{}, sender:{},userCount:{}",corpId,msgTemplate.getSender(),msgTemplate.getExternalUserid().size());
+		log.info("企业微信群发消息 corpId:{},userCount:{}", corpId, msgTemplate.getExternalUserid().size());
 		HttpResponse<String> res =
 				J11HttpC.custom()
 						.ofPost()

+ 15 - 0
netflix-service/src/main/java/com/cyksj/service/mail/CuiQiuMailService.java

@@ -0,0 +1,15 @@
+package com.cyksj.service.mail;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuMailService
+ * 创建者: JavaZou
+ * 创建时间:2024/4/25 15:55
+ */
+public interface CuiQiuMailService {
+
+	/**
+	 * 获取最新邮箱 返回验证码
+	 */
+	String getVerifyCode(String email) throws Exception;
+}

+ 108 - 0
netflix-service/src/main/java/com/cyksj/service/mail/impl/CuiQiuMailServiceImpl.java

@@ -0,0 +1,108 @@
+package com.cyksj.service.mail.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
+import com.cyksj.model.dto.CuiQiuEmailDetailDto;
+import com.cyksj.model.dto.CuiQiuEmailDto;
+import com.cyksj.model.dto.CuiQiuEmailResultDto;
+import com.cyksj.service.mail.CuiQiuMailService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuMailServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/4/25 15:57
+ */
+@Service
+@Slf4j
+public class CuiQiuMailServiceImpl implements CuiQiuMailService {
+	private final static String CUI_QIU_TOKEN = "4ff0341ebf1747cd89a2d1a5a296b68b";
+
+	//脆球域名id
+	private final static String DOMAIN_ID = "1696913058045050661";
+
+	//代收管理员邮件id
+	private final static String ADMIN_MAIL_ID = "1696913058063659217";
+
+	//PS 验证码官方
+	private final static String PS_ADOBE = "Adobe";
+
+	@Override
+	public String getVerifyCode(String email) throws Exception {
+		//获取近二十封邮件
+		String url = "https://domain-open-api.cuiqiu.com/v1/message/list";
+
+		Map<String, Object> params = new HashMap<>();
+
+		//获取近五分钟的代收邮件
+		//维度是天
+		DateTime now = DateTime.now();
+		params.put("token", CUI_QIU_TOKEN);
+		params.put("mail_id", ADMIN_MAIL_ID);
+		params.put("start_time", DateUtil.offsetDay(now, -1).toDateStr());
+		params.put("end_time", DateUtil.offsetDay(now, 1).toDateStr());
+		params.put("limit", 20);
+
+		HttpRequest post = HttpUtil.createPost(url);
+		post.form(params);
+		HttpResponse execute = post.execute();
+		CuiQiuEmailResultDto resultDto = Jsons.parseObject(execute.body(), CuiQiuEmailResultDto.class);
+		List<CuiQiuEmailDto> list = resultDto.getData().getList();
+		//获取邮箱对应的邮件
+		list = list.stream().filter(emailInfo -> {
+			CuiQiuEmailDto.CuiQiuUser from = emailInfo.getFrom().get(0);
+			CuiQiuEmailDto.CuiQiuUser cuiQiuUser = emailInfo.getTo().get(0);
+			if (StrUtil.equals(from.getName(), PS_ADOBE) && StrUtil.equals(cuiQiuUser.getAddress(), email)) {
+				return true;
+			}
+			return false;
+		}).collect(Collectors.toList());
+
+		if (CollUtil.isNotEmpty(list)) {
+			for (CuiQiuEmailDto cuiQiuEmailDto : list) {
+				Long messageId = cuiQiuEmailDto.getId();
+				try {
+					String code = getVerifyCodeByEmail(messageId);
+					if (StrUtil.isNotBlank(code)) {
+						return code;
+					}
+				} catch (Exception e) {
+				}
+			}
+		}
+		return null;
+	}
+
+	public String getVerifyCodeByEmail(Long messageId) throws Exception {
+		String url = "https://domain-open-api.cuiqiu.com/v1/message/detail";
+		Map<String, Object> params = new HashMap<>();
+		params.put("token", CUI_QIU_TOKEN);
+		params.put("mail_id", ADMIN_MAIL_ID);
+		params.put("message_id", messageId);
+		HttpRequest post = HttpUtil.createPost(url);
+		post.form(params);
+		HttpResponse execute = post.execute();
+		String body = execute.body();
+		CuiQiuEmailDetailDto cuiQiuEmailDetailDto = Jsons.parseObject(body, CuiQiuEmailDetailDto.class);
+		CuiQiuEmailDetailDto.Content content = cuiQiuEmailDetailDto.getData().getContent();
+
+		String contentBody = content.getBody();
+
+		String code = StrUtil.subWithLength(contentBody, contentBody.indexOf("ADOBE"), 215);
+		return StringUtil.getVerifyCodePattern(code);
+	}
+}

+ 10 - 15
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -15,6 +15,7 @@ import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.sys.SysEmailMapper;
@@ -24,6 +25,7 @@ import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.chatgpt.ChatGptAuthService;
 import com.cyksj.service.groups.GroupsFuncService;
+import com.cyksj.service.mail.CuiQiuMailService;
 import com.cyksj.service.mail.MailService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.relation.GroupRelationFrontService;
@@ -42,8 +44,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_ALREADY_BE_USER;
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_NOT_FIND;
@@ -98,7 +98,10 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final UserLoginRecordService userLoginRecordService;
 
-	private final static String VERIFY_CODE_SECRET = "q1w2e3";
+	private final CuiQiuMailService cuiQiuMailService;
+
+	//脆球邮箱后缀
+	private final static String CUI_QIU_EMAIL_SUFFIX = "@kindvd.com";
 
 	@Override
 	public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account) {
@@ -454,6 +457,9 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		if (StrUtil.hasEmpty(account, password)) {
 			throw BusinessRuntimeException.getInstance("您的车票账号密码异常,请联系客服...");
 		}
+		if (renewalView.getGoodsId() == 33l && renewalView.getAccount().contains(CUI_QIU_EMAIL_SUFFIX)) {
+			return cuiQiuMailService.getVerifyCode(renewalView.getAccount());
+		}
 		//获取邮箱密码
 		SysEmail sysEmail = sysEmailMapper.selectOne(Wrappers.lambdaQuery(SysEmail.class)
 				.eq(SysEmail::getEmail, account)
@@ -647,22 +653,11 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		if (goodsId == 33l) {
 			code = StrUtil.subWithLength(body, body.indexOf("ADOBE"), 215);
 		}
-		code = getVerifyCode(code);
+		code = StringUtil.getVerifyCodePattern(code);
 		if (!Validator.isNumber(code)) {
 			log.error("获取账号验证码失败:{}", StrUtil.subSufByLength(code, 512));
 			throw BusinessRuntimeException.getInstance("获取验证码失败,请重新获取..");
 		}
 		return code.trim();
 	}
-
-	public String getVerifyCode(String code) {
-		if (StrUtil.isNotEmpty(code)) {
-			Pattern pattern = Pattern.compile("\\d{4,}");
-			Matcher matcher = pattern.matcher(code);
-			while (matcher.find()) {
-				return matcher.group();
-			}
-		}
-		return StrUtil.EMPTY;
-	}
 }