| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- 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.exception.BusinessRuntimeException;
- import com.cyksj.common.util.Jsons;
- import com.cyksj.common.util.StringUtil;
- import com.cyksj.common.util.TicketCodeCommonUtil;
- import com.cyksj.mapper.CuiQiuEmailConfigMapper;
- import com.cyksj.model.dto.CuiQiuEmailDetailDto;
- import com.cyksj.model.dto.CuiQiuEmailDto;
- import com.cyksj.model.dto.CuiQiuEmailResultDto;
- import com.cyksj.model.entity.CuiQiuEmailConfig;
- import com.cyksj.service.mail.CuiQiuMailService;
- import com.cyksj.service.relation.GroupsRelationNetflixService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import javax.annotation.PostConstruct;
- 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
- @RequiredArgsConstructor
- public class CuiQiuMailServiceImpl implements CuiQiuMailService {
- private final GroupsRelationNetflixService groupsRelationNetflix;
- private final static String CUI_QIU_TOKEN = "4ff0341ebf1747cd89a2d1a5a296b68b";
- //脆球域名id
- private final static String DOMAIN_ID = "1696913058045050661";
- //PS 验证码官方
- private final static String PS_ADOBE = "Adobe";
- private final static String DISNEY = "Disney+";
- private final static String NETFLIX = "Netflix";
- private static List<CuiQiuEmailConfig> CuiQiuEmailConfigs;
- private final CuiQiuEmailConfigMapper CuiQiuEmailConfigMapper;
- @PostConstruct
- public void getCuiQiuEmailConfig() {
- CuiQiuEmailConfigs = CuiQiuEmailConfigMapper.selectList(null);
- }
- /**
- *
- * @param type 1:奈飞安全码
- * @param linkType 链接 1:同步验证链接
- */
- @Override
- public String getVerifyCode(String email, Long goodsId, Integer type, Integer linkType) 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);
- String mailId = getAdmainMailId(email);
- if (StrUtil.isEmpty(mailId)) {
- throw BusinessRuntimeException.getInstance("系统异常,请联系客服..");
- }
- params.put("mail_id", mailId);
- params.put("start_time", DateUtil.offsetDay(now, -1).toDateStr());
- params.put("end_time", DateUtil.offsetDay(now, 1).toDateStr());
- params.put("to", email);
- params.put("limit", 20);
- HttpRequest post = HttpUtil.createPost(url);
- post.form(params);
- HttpResponse execute = post.execute();
- CuiQiuEmailResultDto resultDto = Jsons.parseObject(execute.body(), CuiQiuEmailResultDto.class);
- if (resultDto.getData().getList() == null) {
- return null;
- }
- 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.equalsIgnoreCase(cuiQiuUser.getAddress(), email)) {
- //PS
- if (goodsId == 33l && StrUtil.equals(from.getName(), PS_ADOBE)) {
- return true;
- }
- //Disney
- if (goodsId == 3l && StrUtil.equals(from.getName(), DISNEY)) {
- return true;
- }
- if (goodsId == 1l && StrUtil.equals(from.getName(), NETFLIX)) {
- return true;
- }
- }
- return false;
- }).collect(Collectors.toList());
- if (CollUtil.isNotEmpty(list)) {
- for (CuiQiuEmailDto CuiQiuEmailDto : list) {
- Long messageId = CuiQiuEmailDto.getId();
- try {
- String code = getVerifyCodeByEmail(messageId, goodsId, type, linkType, mailId);
- if (StrUtil.isNotBlank(code)) {
- return code;
- }
- } catch (Exception e) {
- }
- }
- }
- return null;
- }
- @Override
- public boolean isCuiQiuEmail(String account) {
- for (CuiQiuEmailConfig CuiQiuEmailConfig : CuiQiuEmailConfigs) {
- if (account.contains(CuiQiuEmailConfig.getDomainPrefix())) {
- return true;
- }
- }
- return false;
- }
- public String getVerifyCodeByEmail(Long messageId, Long goodsId, Integer type, Integer linkType, String mailId) 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", mailId);
- params.put("message_id", messageId);
- HttpRequest post = HttpUtil.createPost(url);
- post.form(params);
- HttpResponse execute = post.execute();
- String respBody = execute.body();
- CuiQiuEmailDetailDto CuiQiuEmailDetailDto = Jsons.parseObject(respBody, CuiQiuEmailDetailDto.class);
- CuiQiuEmailDetailDto.Content content = CuiQiuEmailDetailDto.getData().getContent();
- String code = null;
- String body = content.getBody();
- if (goodsId == 1) {
- if (type != null && type == 1) {
- String pre = "NetflixSans-Regular, Helvetica, Roboto, Segoe UI, sans-serif; font-weight";
- if (body.contains("輸入此代碼登入") || body.contains("输入此代码登录") || body.contains("Enter this code to sign in")) {
- code = StrUtil.subAfter(body, pre, false);
- if (StrUtil.isEmpty(code)) {
- code = StrUtil.subAfter(body, "Enter this code to sign in", true);
- }
- }
- if (StrUtil.isEmpty(code)) {
- throw BusinessRuntimeException.getInstance("查询失败,请检查是否发送了登陆码..");
- }
- } else {
- String urlPref;
- String nfVerifyUrl;
- if (linkType == 1) {
- urlPref = "https://www.netflix.com/account/update-primary-location";
- nfVerifyUrl = TicketCodeCommonUtil.extractUrl(body, urlPref);
- } else {
- urlPref = "https://www.netflix.com/account/travel/verify";
- nfVerifyUrl = TicketCodeCommonUtil.extractUrl(body, urlPref);
- }
- if (StrUtil.isEmpty(nfVerifyUrl)) {
- throw BusinessRuntimeException.getInstance("获取认证链接失败,请重新获取");
- }
- //非点击装置同步更新按钮 直接返回链接
- if (linkType == 2) return nfVerifyUrl;
- //失败返回验证链接
- if (!groupsRelationNetflix.confirmUpdate(nfVerifyUrl)) {
- return nfVerifyUrl;
- }
- return StrUtil.EMPTY;
- }
- }
- if (StrUtil.isEmpty(code)) {
- code = TicketCodeCommonUtil.getTicketCodeStr(body, goodsId);
- }
- int length = 4;
- if (goodsId == 33l || goodsId == 45l) {
- length = 6;
- }
- return StringUtil.getVerifyCodePattern(code, length);
- }
- /**
- * 获取接受邮件邮箱id
- */
- private String getAdmainMailId(String email) {
- for (CuiQiuEmailConfig CuiQiuEmailConfig : CuiQiuEmailConfigs) {
- if (email.contains(CuiQiuEmailConfig.getDomainPrefix())) {
- return CuiQiuEmailConfig.getMailId();
- }
- }
- return null;
- }
- }
|