Commit 9efa15c5 authored by chenchao.deng's avatar chenchao.deng

接入 ipv

parent 0e980068
...@@ -31,6 +31,8 @@ public class CloudPlatformOrder { ...@@ -31,6 +31,8 @@ public class CloudPlatformOrder {
private String platformOrderId;//云平台订单id private String platformOrderId;//云平台订单id
private String platformInstanceNo;//云平台服务器No(住宅ip释放用)
private String platformType;//云平台类型 private String platformType;//云平台类型
private Integer retryCount;//重试次数 private Integer retryCount;//重试次数
......
...@@ -23,6 +23,9 @@ import com.edgec.browserbackend.browser.service.IpAndShopService; ...@@ -23,6 +23,9 @@ import com.edgec.browserbackend.browser.service.IpAndShopService;
import com.edgec.browserbackend.browser.service.IpResourceService; import com.edgec.browserbackend.browser.service.IpResourceService;
import com.edgec.browserbackend.common.client.AliEcsClient; import com.edgec.browserbackend.common.client.AliEcsClient;
import com.edgec.browserbackend.common.client.TenCentEcsClient; import com.edgec.browserbackend.common.client.TenCentEcsClient;
import com.edgec.browserbackend.common.client.ipvClient.IpvClient;
import com.edgec.browserbackend.common.client.ipvClient.dto.AppInstanceReleaseResp;
import com.edgec.browserbackend.common.client.ipvClient.dto.AppOrderResp;
import com.edgec.browserbackend.common.commons.error.ClientRequestException; import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.NotifyUtils; import com.edgec.browserbackend.common.commons.utils.NotifyUtils;
import com.edgec.browserbackend.common.utils.FileUtil; import com.edgec.browserbackend.common.utils.FileUtil;
...@@ -277,6 +280,9 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -277,6 +280,9 @@ public class IpResourceServiceImpl implements IpResourceService {
case "tencent": case "tencent":
ipResource.setVendorCn("腾讯云"); ipResource.setVendorCn("腾讯云");
break; break;
case "isp":
ipResource.setVendorCn("住宅");
break;
case "aws": case "aws":
ipResource.setVendorCn("亚马逊云"); ipResource.setVendorCn("亚马逊云");
break; break;
...@@ -611,6 +617,10 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -611,6 +617,10 @@ public class IpResourceServiceImpl implements IpResourceService {
cloudPlatformOrder.getPlatformOrderId(), cloudPlatformOrder.getPlatformOrderId(),
cloudPlatformOrder.getRegionId()); cloudPlatformOrder.getRegionId());
} }
}else if("isp".equals(cloudPlatformOrder.getPlatformType())){
IpvClient.instanceRelease(
cloudPlatformOrder.getPlatformOrderId(),
cloudPlatformOrder.getPlatformInstanceNo());
} }
} }
ipResource.setShopIds(null); ipResource.setShopIds(null);
...@@ -1223,12 +1233,22 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -1223,12 +1233,22 @@ public class IpResourceServiceImpl implements IpResourceService {
IPData ipData = new IPData(); IPData ipData = new IPData();
ipData.setIp(ipResource.getAddr()); ipData.setIp(ipResource.getAddr());
ipDataList.add(ipData); ipDataList.add(ipData);
} }
} }
}else if("isp".equals(cloudPlatformOrder.getPlatformType())){
AppOrderResp response = IpvClient.instanceRenew(ipResource.getOwner(),
cloudPlatformOrder.getOrderNo(),
cloudPlatformOrder.getPlatformInstanceNo(), period);
if (null ==response) {
logger.error("fail to renew ip : {}", JSON.toJSON(response));
}else if(Objects.nonNull(response.getAppOrderNo())){
cloudPlatformOrder.setPlatformOrderId(response.getOrderNo());
cloudPlatformOrderRepository.save(cloudPlatformOrder);
IPData ipData = new IPData();
ipData.setIp(ipResource.getAddr());
ipDataList.add(ipData);
}
} }
} }
if(CollectionUtils.isNotEmpty(ipDataList)) { if(CollectionUtils.isNotEmpty(ipDataList)) {
......
...@@ -48,6 +48,7 @@ import com.tencentcloudapi.lighthouse.v20200324.models.CreateInstancesResponse; ...@@ -48,6 +48,7 @@ import com.tencentcloudapi.lighthouse.v20200324.models.CreateInstancesResponse;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -514,7 +515,8 @@ public class BrowserTask { ...@@ -514,7 +515,8 @@ public class BrowserTask {
ipResource.setStatus(0); ipResource.setStatus(0);
DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
Instant instant = Instant.from( Instant instant = Instant.from(
formatter.parse(instance.getExpiredTime())); formatter.parse(instance.getExpiredTime())).atZone(
ZoneOffset.UTC).toInstant();
ipResource.setValidTime(instant.toEpochMilli()); ipResource.setValidTime(instant.toEpochMilli());
if (StringUtils.isNotBlank(ipResource.getRegion()) if (StringUtils.isNotBlank(ipResource.getRegion())
&& region.contains(ipResource.getRegion())) { && region.contains(ipResource.getRegion())) {
...@@ -585,6 +587,8 @@ public class BrowserTask { ...@@ -585,6 +587,8 @@ public class BrowserTask {
}else if("isp".equals(cloudPlatformOrder.getPlatformType())){ }else if("isp".equals(cloudPlatformOrder.getPlatformType())){
AppOrderResp order = IpvClient.getOrder( AppOrderResp order = IpvClient.getOrder(
cloudPlatformOrder.getPlatformOrderId()); cloudPlatformOrder.getPlatformOrderId());
log.info("调用ipv查询实例,响应参数:owner:{},response:{}", ipResource.getOwner(),
JSON.toJSON(order));
if (order.getStatus() != 3) { if (order.getStatus() != 3) {
//订单还没有处理完成 //订单还没有处理完成
return; return;
...@@ -600,15 +604,10 @@ public class BrowserTask { ...@@ -600,15 +604,10 @@ public class BrowserTask {
ipResource.setStatus(0); ipResource.setStatus(0);
ipResource.setPort(Collections.singletonList( ipResource.setPort(Collections.singletonList(
String.valueOf(appInstanceResp.getPort()))); String.valueOf(appInstanceResp.getPort())));
ipResource.setProxyUsername(appInstanceResp.getUsername()); ipResource.setUsername(appInstanceResp.getUsername());
ipResource.setPassword(appInstanceResp.getPwd()); ipResource.setPassword(appInstanceResp.getPwd());
ipResource.setValidTime(appInstanceResp.getUserExpired()); //以秒为单位的时间戳需要 *1000转为毫秒级
if (StringUtils.isNotBlank(ipResource.getRegion()) ipResource.setValidTime(appInstanceResp.getUserExpired()* 1000L);
&& region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true);
}
ipResourceRepository.save(ipResource); ipResourceRepository.save(ipResource);
IpHistory ipHistory = new IpHistory(); IpHistory ipHistory = new IpHistory();
ipHistory.setIpNo(ipResource.getAddr()); ipHistory.setIpNo(ipResource.getAddr());
...@@ -616,6 +615,9 @@ public class BrowserTask { ...@@ -616,6 +615,9 @@ public class BrowserTask {
cloudPlatformOrder.getPlatformType()); cloudPlatformOrder.getPlatformType());
ipHistory.setPurchasedTime(Instant.now().toEpochMilli()); ipHistory.setPurchasedTime(Instant.now().toEpochMilli());
ipHistoryRepository.save(ipHistory); ipHistoryRepository.save(ipHistory);
cloudPlatformOrder.setPlatformInstanceNo(appInstanceResp.getInstanceNo());
cloudPlatformOrderRepository.save(cloudPlatformOrder);
return; return;
} }
} }
...@@ -703,7 +705,7 @@ public class BrowserTask { ...@@ -703,7 +705,7 @@ public class BrowserTask {
ipResource.setStatus(0); ipResource.setStatus(0);
DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
Instant instant = Instant.from( Instant instant = Instant.from(
formatter.parse(instance.getExpiredTime())); formatter.parse(instance.getExpiredTime())).atZone(ZoneOffset.UTC).toInstant();
ipResource.setValidTime(instant.toEpochMilli()); ipResource.setValidTime(instant.toEpochMilli());
ipResourceRepository.save(ipResource); ipResourceRepository.save(ipResource);
} }
...@@ -725,11 +727,31 @@ public class BrowserTask { ...@@ -725,11 +727,31 @@ public class BrowserTask {
ipResource.setStatus(0); ipResource.setStatus(0);
DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
Instant instant = Instant.from( Instant instant = Instant.from(
formatter.parse(instance.getExpiredTime())); formatter.parse(instance.getExpiredTime())).atZone(ZoneOffset.UTC).toInstant();
ipResource.setValidTime(instant.toEpochMilli()); ipResource.setValidTime(instant.toEpochMilli());
ipResourceRepository.save(ipResource); ipResourceRepository.save(ipResource);
} }
} }
}else if ("isp".equals(cloudPlatformOrder.getPlatformType())) {
AppOrderResp order = IpvClient.getOrder(
cloudPlatformOrder.getPlatformOrderId());
log.info("调用ipv查询实例,响应参数:owner:{},response:{}", ipResource.getOwner(),
JSON.toJSON(order));
if (order.getStatus() != 3) {
//订单还没有处理完成
return;
}
if (Objects.nonNull(order.getInstances())) {
//判断是否重复购买
AppInstanceResp appInstanceResp = order.getInstances().get(0);
if (appInstanceResp.getStatus() == 3) {
//包年包月 更新ip状态
ipResource.setStatus(0);
ipResource.setValidTime(appInstanceResp.getUserExpired()* 1000L);
ipResourceRepository.save(ipResource);
}
}
} }
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
......
...@@ -47,9 +47,9 @@ public class IpvClient { ...@@ -47,9 +47,9 @@ public class IpvClient {
public static final String ENCRYPT_AES = "AES"; public static final String ENCRYPT_AES = "AES";
private static String endPoint = "https://sandbox.ipipv.com"; private static String endPoint = "https://api.ipipv.com";
private static String appKey = "AK20240923090940"; private static String appKey = "AK20241021180017";
private static String appSecret = "zd7js60suebep2hkiane59g6v9j8jezv"; private static String appSecret = "khjqqk7eytc8otdnteuugccng69y56as";
public AppInfoResp getAppInfo() throws Exception { public AppInfoResp getAppInfo() throws Exception {
byte[] res = post(GET_APP_INFO_URI, null); byte[] res = post(GET_APP_INFO_URI, null);
...@@ -131,8 +131,11 @@ public class IpvClient { ...@@ -131,8 +131,11 @@ public class IpvClient {
params.add(param); params.add(param);
req.setParams(params); req.setParams(params);
byte[] params1 = JSON.toJSONBytes(req); byte[] params1 = JSON.toJSONBytes(req);
log.info("调用ipv购买实例,入参:owner:{},regionId:{},req:{}", owner, productNo, JSON.toJSONBytes(req));
byte[] res = post(INSTANCE_OPEN_URI, params1); byte[] res = post(INSTANCE_OPEN_URI, params1);
resp = JSON.parseObject(new String(res), AppOrderResp.class); resp = JSON.parseObject(new String(res), AppOrderResp.class);
log.info("调用ipv购买实例,响应参数:owner:{},response:{}", owner,
JSON.toJSON(resp));
}catch (Exception e){ }catch (Exception e){
log.error("fail to ipipv instanceOpen {}", e.getMessage()); log.error("fail to ipipv instanceOpen {}", e.getMessage());
} }
...@@ -154,17 +157,53 @@ public class IpvClient { ...@@ -154,17 +157,53 @@ public class IpvClient {
return resp; return resp;
} }
public AppOrderResp instanceRenew(AppInstanceRenewReq req) throws Exception { /**
byte[] params = JSON.toJSONBytes(req); * @author Chen
byte[] res = post(INSTANCE_RENEW_URI, params); * @description 续费
AppOrderResp resp = JSON.parseObject(new String(res), AppOrderResp.class); * @date 2024/10/21 21:02
*/
public static AppOrderResp instanceRenew(String owner, String orderNo, String instanceNo, int duration) {
AppOrderResp resp = null;
try {
AppInstanceRenewReq req = new AppInstanceRenewReq();
req.setAppOrderNo(orderNo);
Instance instance = new Instance();
instance.setInstanceNo(instanceNo);
instance.setDuration(duration);
List<Instance> list = new ArrayList<>();
list.add(instance);
req.setInstances(list);
byte[] params = JSON.toJSONBytes(req);
log.info("调用ipv续费实例,入参:owner:{},req:{}", owner, JSON.toJSON(req));
byte[] res = post(INSTANCE_RENEW_URI, params);
resp = JSON.parseObject(new String(res), AppOrderResp.class);
log.info("调用ipv续费实例,响应参数:owner:{},req:{}", owner, JSON.toJSON(resp));
}catch (Exception e){
log.error("fail to ipipv instanceRenew {}", e.getMessage());
}
return resp; return resp;
} }
/**
* @author Chen
* @description 释放ip
* @date 2024/10/21 21:43
*/
public static AppInstanceReleaseResp instanceRelease(String orderNo, String instanceNo) {
AppInstanceReleaseResp resp = null;
try {
AppInstanceReleaseReq req = new AppInstanceReleaseReq();
req.setOrderNo(orderNo);
List<String > list = new ArrayList<>();
list.add(instanceNo);
req.setInstances(list);
byte[] params = JSON.toJSONBytes(req);
byte[] res = post(INSTANCE_RELEASE_URI, params);
resp = JSON.parseObject(new String(res), AppInstanceReleaseResp.class);
log.info("调用Ipv删除ECS实例,响应参数response:{}", JSON.toJSON(resp));
}catch (Exception e){
log.error("fail to ipipv instanceRelease {}", e.getMessage());
}
public AppInstanceReleaseResp instanceRelease(AppInstanceReleaseReq req) throws Exception {
byte[] params = JSON.toJSONBytes(req);
byte[] res = post(INSTANCE_RELEASE_URI, params);
AppInstanceReleaseResp resp = JSON.parseObject(new String(res), AppInstanceReleaseResp.class);
return resp; return resp;
} }
......
...@@ -28,17 +28,17 @@ public enum RegionMappingEnum { ...@@ -28,17 +28,17 @@ public enum RegionMappingEnum {
CN_HHHT("huhehaote","呼和浩特","cn-huhehaote","",""), CN_HHHT("huhehaote","呼和浩特","cn-huhehaote","",""),
CN_CD("chengdu","成都","cn-chengdu","",""), CN_CD("chengdu","成都","cn-chengdu","",""),
CN_HY("heyuan","河源","cn-heyuan","",""), CN_HY("heyuan","河源","cn-heyuan","",""),
CN_HK("hongkong","中国香港","cn-hongkong","","ipideash_594"), CN_HK("hongkong","中国香港","cn-hongkong","","mb_gmhd5exet"),
US("us","美国随机","","",""), US("us","美国随机","","",""),
US_CALIFORNIA("california","加利福尼亚","","",""),//待确认 US_CALIFORNIA("california","加利福尼亚","","",""),//待确认
US_VIRGINIA("virginia","弗吉尼亚","us-east-1","","ipideash_589"), US_VIRGINIA("virginia","弗吉尼亚","us-east-1","","ipideash_589"),
EU_UK("uk","英国-伦敦","eu-west-1","","ipideash_591"), EU_UK("uk","英国-伦敦","eu-west-1","","mb_gmh92exc3"),
EU_CENTRAL("germany","德国-法兰克福","eu-central-1","eu-frankfurt",""), EU_CENTRAL("germany","德国-法兰克福","eu-central-1","eu-frankfurt",""),
JAPAN("japan","日本-东京","ap-northeast-1","ap-tokyo",""), JAPAN("japan","日本-东京","ap-northeast-1","ap-tokyo",""),
SINGAPORE("singapore","新加坡","ap-southeast-1","ap-singapore","ipideash_599"), SINGAPORE("singapore","新加坡","ap-southeast-1","ap-singapore","mb_gmyqad4b8"),
AUSTRALIA("australia","澳大利亚-悉尼","","",""),//待确认 AUSTRALIA("australia","澳大利亚-悉尼","","",""),//待确认
MALAYSIA("malaysia","马来西亚-吉隆坡","ap-southeast-3","","ipideash_604"), MALAYSIA("malaysia","马来西亚-吉隆坡","ap-southeast-3","","mb_gmh92ex56"),
YAJIADA("yajiada","印度尼西亚-雅加达","ap-southeast-5","ap-jakarta","ipideash_608"), YAJIADA("yajiada","印度尼西亚-雅加达","ap-southeast-5","ap-jakarta","mb_gmh92exuc"),
INDIA("india","孟买","","ap-mumbai",""),//待确认 INDIA("india","孟买","","ap-mumbai",""),//待确认
MEAST("meast","迪拜","me-east-1","",""), MEAST("meast","迪拜","me-east-1","",""),
BRAZIL("brazil","巴西-圣保罗","","sa-saopaulo",""), BRAZIL("brazil","巴西-圣保罗","","sa-saopaulo",""),
...@@ -46,17 +46,17 @@ public enum RegionMappingEnum { ...@@ -46,17 +46,17 @@ public enum RegionMappingEnum {
SILICON("silicon","美国(硅谷)","us-west-1","na-siliconvalley",""), SILICON("silicon","美国(硅谷)","us-west-1","na-siliconvalley",""),
NANJING("nanjing","南京","","ap-nanjing",""), NANJING("nanjing","南京","","ap-nanjing",""),
BANGKOK("bangkok","泰国(曼谷)","ap-southeast-7","","ipideash_607"), BANGKOK("bangkok","泰国(曼谷)","ap-southeast-7","","mb_gmh92ex88"),
MANILA("manila","菲律宾-马尼拉","ap-southeast-6","","ipideash_606"), MANILA("manila","菲律宾-马尼拉","ap-southeast-6","","ipideash_606"),
SEOUL("seoul","韩国-首尔","ap-northeast-2","ap-seoul","ipideash_621"), SEOUL("seoul","韩国-首尔","ap-northeast-2","ap-seoul","ipideash_621"),
TW("taiwan","中国-台湾","","","ipideash_592"), TW("taiwan","中国-台湾","","","mb_gmhd5exem"),
LSWJS("lasvegas","美国-拉斯维加斯","","","ipideash_592"), LSWJS("lasvegas","美国-拉斯维加斯","","","ipideash_592"),
NY("newyork","美国-纽约","","","ipideash_590"), NY("newyork","美国-纽约","","","ipideash_590"),
LSG("losangeles","美国-洛杉矶","","","ipideash_615"), LSG("losangeles","美国-洛杉矶","","","ipideash_615"),
MAM("miami","美国-迈阿密","","","ipideash_595"), MAM("miami","美国-迈阿密","","","ipideash_595"),
HSD("washington","美国-华盛顿","","","ipideash_613"), HSD("washington","美国-华盛顿","","","mb_gmxaa44sn"),
CAN("canada","加拿大","","","ipideash_603"), CAN("canada","加拿大","","","mb_gmhd5exdf"),
YN("vietnam","越南","","","ipideash_619"), YN("vietnam","越南","","","mb_gmhd5extm"),
; ;
......
...@@ -72,25 +72,27 @@ public class IpvCliestTest { ...@@ -72,25 +72,27 @@ public class IpvCliestTest {
params.add(param); params.add(param);
req.setParams(params); req.setParams(params);
AppOrderResp appOrderResp = IpvClient.instanceOpen("test00012213", AppOrderResp appOrderResp = IpvClient.instanceOpen("test00012213",
"111223", 4, 2, "ipideash_619"); "111223", 1, 1, "mb_gmhd5exet");
System.out.println(JSON.toJSONString(appOrderResp)); System.out.println(JSON.toJSONString(appOrderResp));
} }
@Test @Test
void testGetOrder() throws Exception{ void testGetOrder() throws Exception{
AppGetOrderReq req = new AppGetOrderReq(); AppGetOrderReq req = new AppGetOrderReq();
req.setOrderNo("D20241009112841659606"); req.setOrderNo("C20241021222705135265");
AppOrderResp resp = IpvClient.getOrder("C20241008141433048384"); AppOrderResp resp = IpvClient.getOrder("C20241021222705135265");
System.out.println(JSON.toJSONString(resp)); System.out.println(JSON.toJSONString(resp));
} }
@Test @Test
void testinstanceRelease() throws Exception{ void testinstanceRelease() throws Exception{
AppInstanceReleaseReq req = new AppInstanceReleaseReq(); AppInstanceReleaseReq req = new AppInstanceReleaseReq();
req.setOrderNo("R20241009112657386808"); req.setOrderNo("C20241021212430166572");
req.setInstances(Lists.newArrayList("c_gz7bdmvrvns6qea")); req.setInstances(Lists.newArrayList("c_gtpb9mkn953dp34"));
AppInstanceReleaseResp resp = ipv.instanceRelease(req); AppInstanceReleaseResp appInstanceReleaseResp = IpvClient.instanceRelease(
System.out.println(JSON.toJSONString(resp)); "C20241021212430166572", "c_gtpb9mkn953dp34");
//AppInstanceReleaseResp resp = ipv.instanceRelease(req);
System.out.println(JSON.toJSONString(appInstanceReleaseResp));
} }
@Test @Test
...@@ -101,8 +103,8 @@ public class IpvCliestTest { ...@@ -101,8 +103,8 @@ public class IpvCliestTest {
instance.setInstanceNo("c_gz7bdmvrvns6qea"); instance.setInstanceNo("c_gz7bdmvrvns6qea");
instance.setDuration(1); instance.setDuration(1);
req.setInstances(Lists.newArrayList(instance)); req.setInstances(Lists.newArrayList(instance));
AppOrderResp resp = ipv.instanceRenew(req); //AppOrderResp resp = ipv.instanceRenew(req);
System.out.println(JSON.toJSONString(resp)); //System.out.println(JSON.toJSONString(resp));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment