Prechádzať zdrojové kódy

奈飞同步更新装置

zoujiajian 2 rokov pred
rodič
commit
8de7988a58

+ 1 - 1
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -138,7 +138,7 @@ public interface Constant {
 	/**
 	 * 电影域名
 	 */
-	String ZHAOJU_MOVIES = "https://zhaoju666.com";
+	String ZHAOJU_MOVIES = "http://43.154.169.245:8090";
 
 	/**
 	 * GPT 平台账号重复

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/CuiQiuEmailConfigMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.CuiQiuEmailConfig;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailConfigMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/7/22 15:31
+ */
+public interface CuiQiuEmailConfigMapper extends BaseMapper<CuiQiuEmailConfig> {
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CuiQiuEmailConfig.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailConfig
+ * 创建者: JavaZou
+ * 创建时间:2024/7/22 15:29
+ */
+@Getter
+@Setter
+public class CuiQiuEmailConfig {
+	/**
+	 * 域名前缀
+	 */
+	private String domainPrefix;
+
+	/**
+	 * 接受主邮件id
+	 */
+	private String mailId;
+}

+ 2 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -638,6 +638,8 @@ public class RedisService {
         DOUBLE_VERIFY_CODE_VIEW_MINUTES_KEY("double_verify_code_view_minutes_key","双重验证码查看同时间段人数限制",60),
         USER_DISTRIBUTE_ADD_KEY("user_distribute_add_key:%s", "分销用户新增key", 30l),
         APPLY_MONEY_DAY_LIMIT_KEY("apply_money_day_limit_key:%s:%s:%s", "每日提现次数限制", 60 * 60 * 24L),
+        NETFLIX_UPDATE_LIMIT_TIME("netflix_update_limit_time", "奈飞同步更新", 30l),
+        NF_UPGRAD_USER_LIMIT_KEY("nf_upgrad_user_limit_key:%s:%s:%s", "奈飞同步装置key", 60 * 60L),
         ;
 
         private String name;

+ 3 - 1
netflix-service/src/main/java/com/cyksj/service/mail/CuiQiuMailService.java

@@ -11,5 +11,7 @@ public interface CuiQiuMailService {
 	/**
 	 * 获取最新邮箱 返回验证码
 	 */
-	String getVerifyCode(String email, Long goodsId, Integer type, Boolean sync, Integer linkType) throws Exception;
+	String getVerifyCode(String email, Long goodsId, Integer type, Integer linkType) throws Exception;
+
+	boolean isCuiQiuEmail(String account);
 }

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

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

+ 47 - 9
netflix-service/src/main/java/com/cyksj/service/mail/impl/CuiQiuMailServiceImpl.java

@@ -12,15 +12,18 @@ import com.cyksj.common.i18n.I18nMessageUtil;
 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;
@@ -53,8 +56,17 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 
 	private final static String NETFLIX = "Netflix";
 
+	private static List<CuiQiuEmailConfig> CuiQiuEmailConfigs;
+
+	private final CuiQiuEmailConfigMapper cuiQiuEmailConfigMapper;
+
+	@PostConstruct
+	public void getCuiQiuEmailConfig() {
+		CuiQiuEmailConfigs = cuiQiuEmailConfigMapper.selectList(null);
+	}
+
 	@Override
-	public String getVerifyCode(String email, Long goodsId, Integer type, Boolean sync, Integer linkType) throws Exception {
+	public String getVerifyCode(String email, Long goodsId, Integer type, Integer linkType) throws Exception {
 		//获取近二十封邮件
 		String url = "https://domain-open-api.cuiqiu.com/v1/message/list";
 
@@ -64,7 +76,11 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		//维度是天
 		DateTime now = DateTime.now();
 		params.put("token", CUI_QIU_TOKEN);
-		params.put("mail_id", ADMIN_MAIL_ID);
+		String mailId = getAdmainMailId(email);
+		if (StrUtil.isEmpty(mailId)) {
+			throw BusinessRuntimeException.getInstance(I18nMessageUtil.getI18nMsg("contact_customer_service_error"));
+		}
+		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);
@@ -99,10 +115,10 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		}).collect(Collectors.toList());
 
 		if (CollUtil.isNotEmpty(list)) {
-			for (CuiQiuEmailDto cuiQiuEmailDto : list) {
-				Long messageId = cuiQiuEmailDto.getId();
+			for (CuiQiuEmailDto CuiQiuEmailDto : list) {
+				Long messageId = CuiQiuEmailDto.getId();
 				try {
-					String code = getVerifyCodeByEmail(messageId, goodsId, type, sync, linkType);
+					String code = getVerifyCodeByEmail(messageId, goodsId, type, linkType, mailId);
 					if (StrUtil.isNotBlank(code)) {
 						return code;
 					}
@@ -113,18 +129,28 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		return null;
 	}
 
-	public String getVerifyCodeByEmail(Long messageId, Long goodsId, Integer type, Boolean sync, Integer linkType) throws Exception {
+	@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", ADMIN_MAIL_ID);
+		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();
+		CuiQiuEmailDetailDto CuiQiuEmailDetailDto = Jsons.parseObject(respBody, CuiQiuEmailDetailDto.class);
+		CuiQiuEmailDetailDto.Content content = CuiQiuEmailDetailDto.getData().getContent();
 		String code = null;
 		String body = content.getBody();
 		if (goodsId == 1) {
@@ -170,4 +196,16 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		}
 		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;
+	}
 }

+ 126 - 0
netflix-service/src/main/java/com/cyksj/service/mail/impl/YhEmailServiceImpl.java

@@ -0,0 +1,126 @@
+package com.cyksj.service.mail.impl;
+
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpStatus;
+import cn.hutool.http.HttpUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.StringUtil;
+import com.cyksj.common.util.TicketCodeCommonUtil;
+import com.cyksj.mapper.sys.SysEmailMapper;
+import com.cyksj.model.entity.SysEmail;
+import com.cyksj.service.mail.YhMailService;
+import com.cyksj.service.relation.GroupsRelationNetflixService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: YhEmailServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/8/19 15:40
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class YhEmailServiceImpl implements YhMailService {
+	private final GroupsRelationNetflixService groupsRelationNetflixService;
+
+	private final SysEmailMapper sysEmailMapper;
+
+	@Override
+	public String getVerifyCode(String account, Long goodsId, Integer type, Integer linkType) throws Exception {
+		//获取邮箱密码
+		SysEmail sysEmail = sysEmailMapper.selectOne(Wrappers.lambdaQuery(SysEmail.class)
+				.eq(SysEmail::getEmail, account)
+				.last("limit 1"));
+		if (sysEmail == null) {
+			log.info("获取账号:{}验证码异常,未配置对应系统邮箱", account);
+			throw BusinessRuntimeException.getInstance("获取账号验证码异常,请联系客服...");
+		}
+		String url = "http://yinhelx.com/api/controller.php";
+		Map<String, Object> params = new HashMap<>();
+
+		params.put("imap_key", "imap_56568niua@@");
+		params.put("fun", "imap_read");
+		params.put("imap_ip", "yinhelx.com");
+		params.put("port", "143");
+		params.put("username", account);
+		params.put("password", sysEmail.getPassword());
+		params.put("mbox_id", "0");
+		params.put("delete", "0");
+
+		HttpRequest post = HttpUtil.createPost(url);
+		post.form(params);
+		cn.hutool.http.HttpResponse execute = post.execute();
+		if (execute.getStatus() != HttpStatus.HTTP_OK) {
+			throw BusinessRuntimeException.getInstance("获取验证码异常,请联系客服...");
+		}
+		String code = getDifferentGoodsCode(goodsId, execute.body(), type, linkType);
+		return code;
+	}
+
+	public String getDifferentGoodsCode(Long goodsId, String body, Integer type, Integer linkType) {
+		String code = null;
+		//奈飞
+		if (goodsId == 1) {
+			if (type != null && type == 1) {
+				if (body.contains("輸入此代碼登入") || body.contains("输入此代码登录") || body.contains("Enter this code to sign in")) {
+					code = StrUtil.subBetween(body, "輸入此代碼登入", "請在裝置上輸入上");
+					if (StrUtil.isEmpty(code)) {
+						code = StrUtil.subAfter(body, "输入此代码登录", true);
+					}
+					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;
+				//更新装置
+				if (linkType == 1) {
+					urlPref = "https://www.netflix.com/account/update-primary-location";
+					code = StrUtil.subBetween(body, "[" + urlPref, "]");
+				} else {
+					//验证链接
+					urlPref = "https://www.netflix.com/account/travel/verify";
+					code = StrUtil.subBetween(body, "[" + urlPref, "]");
+				}
+				if (StrUtil.isEmpty(code)) {
+					throw BusinessRuntimeException.getInstance("获取认证链接失败,请重新获取");
+				}
+				String url = urlPref + code;
+				//非点击装置同步更新按钮 直接返回链接
+				if (linkType == 2) return url;
+				//失败返回验证链接
+				if (!groupsRelationNetflixService.confirmUpdate(url)) {
+					return url;
+				}
+				return StrUtil.EMPTY;
+			}
+		}
+		//除奈飞
+		if (StrUtil.isEmpty(code)) {
+			code = TicketCodeCommonUtil.getTicketCodeStr(body, goodsId);
+		}
+		int length = 4;
+		if (goodsId == 33l) {
+			length = 6;
+		}
+		code = StringUtil.getVerifyCodePattern(code, length);
+		if (!Validator.isNumber(code)) {
+			log.error("获取账号验证码失败:{}", StrUtil.subSufByLength(code, 512));
+			throw BusinessRuntimeException.getInstance("获取验证码失败,请重新获取..");
+		}
+		return code.trim();
+	}
+
+}

+ 25 - 35
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -5,9 +5,6 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpStatus;
-import cn.hutool.http.HttpUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.constant.Constant;
@@ -19,7 +16,6 @@ import com.cyksj.common.util.StringUtil;
 import com.cyksj.common.util.TicketCodeCommonUtil;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.*;
-import com.cyksj.mapper.sys.SysEmailMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.TicketLoginReq;
 import com.cyksj.model.views.*;
@@ -27,6 +23,7 @@ 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.YhMailService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.relation.GroupsRelationNetflixService;
@@ -43,7 +40,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
 
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_ALREADY_BE_USER;
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_NOT_FIND;
@@ -74,8 +73,6 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final RedisService redisService;
 
-	private final SysEmailMapper sysEmailMapper;
-
 	private final CuiQiuMailService cuiQiuMailService;
 
 	private final GroupsRelationLoginCodeRecordMapper groupsRelationLoginCodeRecordMapper;
@@ -100,6 +97,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
+	private final YhMailService yhMailService;
+
 	//脆球邮箱后缀
 	private final static String CUI_QIU_EMAIL_SUFFIX = "@kindvd.com";
 
@@ -336,36 +335,27 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		if (StrUtil.hasEmpty(account, password)) {
 			throw BusinessRuntimeException.getInstance(I18nMessageUtil.getI18nMsg("sys_error"));
 		}
-		if (renewalView.getAccount().contains(CUI_QIU_EMAIL_SUFFIX)) {
-			return cuiQiuMailService.getVerifyCode(renewalView.getAccount(), renewalView.getGoodsId(), type, sync, loginReq.getLinkType());
-		}
-		//获取邮箱密码
-		SysEmail sysEmail = sysEmailMapper.selectOne(Wrappers.lambdaQuery(SysEmail.class)
-				.eq(SysEmail::getEmail, account)
-				.last("limit 1"));
-		if (sysEmail == null) {
-			log.info("获取账号:{}验证码异常,未配置对应系统邮箱", account);
-			throw BusinessRuntimeException.getInstance(I18nMessageUtil.getI18nMsg("obtain_code_error"));
+		if (renewalView.getGoodsId() == 1l) {
+			Integer linkType = loginReq.getLinkType();
+			if (type == null && linkType == null) {
+				throw BusinessRuntimeException.getInstance(I18nMessageUtil.getI18nMsg("sys_error"));
+			}
+			String key = RedisService.key.NF_UPGRAD_USER_LIMIT_KEY.getNameFormat(DateUtil.hour(DateTime.now(), true), linkType, renewalView.getUserId());
+			if (!redisService.hasKey(key)) {
+				redisService.set(key, 1l, RedisService.key.NF_UPGRAD_USER_LIMIT_KEY.getTimeout());
+			} else {
+				Integer value = (Integer) redisService.get(key);
+				if (value >= 5) {
+					throw BusinessRuntimeException.getInstance(I18nMessageUtil.getI18nMsg("contact_customer_service_error"));
+				}
+				redisService.incr(key, 1L);
+			}
 		}
-		String url = "http://yinhelx.com/api/controller.php";
-		Map<String, Object> params = new HashMap<>();
-
-		params.put("imap_key", "imap_56568niua@@");
-		params.put("fun", "imap_read");
-		params.put("imap_ip", "yinhelx.com");
-		params.put("port", "143");
-		params.put("username", account);
-		params.put("password", sysEmail.getPassword());
-		params.put("mbox_id", "0");
-		params.put("delete", "0");
-
-		HttpRequest post = HttpUtil.createPost(url);
-		post.form(params);
-		cn.hutool.http.HttpResponse execute = post.execute();
-		if (execute.getStatus() != HttpStatus.HTTP_OK) {
-			throw BusinessRuntimeException.getInstance(I18nMessageUtil.getI18nMsg("obtain_code_error"));
+		if (cuiQiuMailService.isCuiQiuEmail(renewalView.getAccount())) {
+			return cuiQiuMailService.getVerifyCode(renewalView.getAccount(), renewalView.getGoodsId(), type, loginReq.getLinkType());
 		}
-		String code = getDifferentGoodsCode(renewalView.getGoodsId(), execute.body(), type, sync, loginReq.getLinkType());
+		//银河域名邮件
+		String code = yhMailService.getVerifyCode(account, renewalView.getGoodsId(), type, loginReq.getLinkType());
 		GroupsRelationLoginCodeRecord record = new GroupsRelationLoginCodeRecord();
 		record.setUserId(userId);
 		record.setRelationId(relationId);

+ 6 - 1
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupsRelationNetflixServiceImpl.java

@@ -131,10 +131,14 @@ public class GroupsRelationNetflixServiceImpl implements GroupsRelationNetflixSe
 
 	@Override
 	public Boolean confirmUpdate(String nfUrl) {
+		String key = RedisService.key.NETFLIX_UPDATE_LIMIT_TIME.getName();
+		if (!redisService.setNx(key, 1L, 30L)) {
+			throw BusinessRuntimeException.getInstance("系统繁忙,请稍后点击..");
+		}
 		JSONObject params = new JSONObject();
 		params.putOpt("url", nfUrl);
 		//确认更新点击
-		String url = Constant.ZHAOJU_MOVIES + "/netflix_set/netflix_primary_action";
+		String url = Constant.ZHAOJU_MOVIES + "/netflix_primary_action";
 		try {
 			cn.hutool.http.HttpResponse execute = HttpUtil
 					.createPost(url)
@@ -143,6 +147,7 @@ public class GroupsRelationNetflixServiceImpl implements GroupsRelationNetflixSe
 					.setReadTimeout(30000)
 					.execute();
 			JSONObject resp = Jsons.parseObject(execute.body(), JSONObject.class);
+			redisService.del(key);
 			return resp.getBool("success");
 		} catch (Exception e) {
 		}

+ 2 - 1
netflix-web/src/main/resources/i18n/yhlx_en_US.properties

@@ -127,4 +127,5 @@ ticket_verify_link_error=No corresponding verification link obtained
 double_verify_code_time_limit=Someone has obtained the account verification code within one minute. Please obtain it later
 obtain_code_error=Exception in obtaining verification code, please contact customer service
 reaL_name_error=Please enter your real name
-enter_bank_no_error=Please enter the correct bank card number
+enter_bank_no_error=Please enter the correct bank card number
+contact_customer_service_error=Error occurred, please contact customer service

+ 2 - 1
netflix-web/src/main/resources/i18n/yhlx_ja_JP.properties

@@ -127,4 +127,5 @@ ticket_verify_link_error=対応する検証リンクが取得されていませ
 double_verify_code_time_limit=1分以内にアカウント認証コードを取得した人がいるので、後で取得してください
 obtain_code_error=認証コード異常を取得するには、カスタマーサービスに連絡してください
 reaL_name_error=実名を入力してください
-enter_bank_no_error=正しいカード番号を入力してください
+enter_bank_no_error=正しいカード番号を入力してください
+contact_customer_service_error=エラーが発生しました。カスタマーサポートにお問い合わせください。

+ 2 - 1
netflix-web/src/main/resources/i18n/yhlx_ko_KR.properties

@@ -127,4 +127,5 @@ ticket_verify_link_error=유효성 검사 링크가 없습니다.
 double_verify_code_time_limit=1분 내에 이미 이 계정 인증번호를 획득한 사람이 있습니다. 잠시 후에 획득하세요
 obtain_code_error=인증번호 이상 획득, 고객센터에 연락하세요
 reaL_name_error=실제 이름을 입력하십시오.
-enter_bank_no_error=정확한 카드 번호를 입력하세요
+enter_bank_no_error=정확한 카드 번호를 입력하세요
+contact_customer_service_error=오류가 발생했습니다. 고객 서비스에 문의하세요.

+ 2 - 1
netflix-web/src/main/resources/i18n/yhlx_zh_CN.properties

@@ -127,4 +127,5 @@ ticket_verify_link_error=未获取到对应验证链接
 double_verify_code_time_limit=一分钟内已有人获取该账号验证码,请稍后获取
 obtain_code_error=获取验证码异常,请联系客服
 reaL_name_error=请输入真实姓名
-enter_bank_no_error=请输入正确的银行卡号
+enter_bank_no_error=请输入正确的银行卡号
+contact_customer_service_error=获取异常,请联系客服

+ 2 - 1
netflix-web/src/main/resources/i18n/yhlx_zh_HK.properties

@@ -127,4 +127,5 @@ ticket_verify_link_error=未獲取到對應驗證鏈接
 double_verify_code_time_limit=壹分鐘內已有人獲取該賬號驗證碼,請稍後獲取
 obtain_code_error=獲取驗證碼異常,請聯系客服
 reaL_name_error=請輸入您的真實姓名
-enter_bank_no_error=请输入正确的銀行卡號
+enter_bank_no_error=请输入正确的銀行卡號
+contact_customer_service_error=獲取異常,請聯繫客服