新产品火狐
This commit is contained in:
@@ -71,7 +71,8 @@
|
|||||||
地区
|
地区
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
运营商
|
<span v-if="product_id ==19">剩余拨数:</span>
|
||||||
|
<span v-else="product_id ==19">运营商:</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
服务器域名
|
服务器域名
|
||||||
@@ -105,7 +106,8 @@
|
|||||||
<td>{{info.city}}</td>
|
<td>{{info.city}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>运营商:</td>
|
<td v-if="product_id ==19">剩余拨数:</td>
|
||||||
|
<td v-else="product_id ==19">运营商:</td>
|
||||||
<td>{{info.supply}}</td>
|
<td>{{info.supply}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -236,6 +238,11 @@
|
|||||||
this.search_field = '蘑菇IP';
|
this.search_field = '蘑菇IP';
|
||||||
this.sstp = '4430';
|
this.sstp = '4430';
|
||||||
break;
|
break;
|
||||||
|
case 19:
|
||||||
|
this.l2tp = '123';
|
||||||
|
this.search_field = '火狐独享IP';
|
||||||
|
this.sstp = '1500';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
@@ -334,6 +341,9 @@
|
|||||||
case 18:
|
case 18:
|
||||||
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
|
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
|
||||||
break;
|
break;
|
||||||
|
case 19:
|
||||||
|
self.location.href='http://php-api.juip.com/script/linedata/data/download/huohu.csv';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
detail(r){
|
detail(r){
|
||||||
|
|||||||
@@ -86,6 +86,11 @@
|
|||||||
<a href="#@item.Product.Id" role="tab" data-toggle="tab" id="select-7" style="font-size: 25px;">@item.Product.Name </a>
|
<a href="#@item.Product.Id" role="tab" data-toggle="tab" id="select-7" style="font-size: 25px;">@item.Product.Name </a>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
else if(item.Product.Id == 19) {
|
||||||
|
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
|
||||||
|
<a href="#@item.Product.Id" role="tab" data-toggle="tab" id="select-19" style="font-size: 25px;"><span style="color: #f64e3d;font-weight:bold;padding-right: 5px;">新</span>@item.Product.Name<span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">抄低价</span></a>
|
||||||
|
</li>
|
||||||
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
|
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
|
||||||
@@ -99,6 +104,10 @@
|
|||||||
$("#select-7").on('click',function(){
|
$("#select-7").on('click',function(){
|
||||||
alert('请注意!无尽IP仅供电脑端使用!');
|
alert('请注意!无尽IP仅供电脑端使用!');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#select-19").on('click',function(){
|
||||||
|
alert('本产品为独享,每个账号对应一个宽带拨号,永不超载,保证了网速及稳定性。使用时只需设置这个唯一的服务器:1.hhip.vip,在账号列表中点击切换地区即可任意组合自己需要的地区。本产品灵活便捷,欢迎选购!');
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
@@ -118,6 +127,7 @@
|
|||||||
需求5个以上,可以联系客服设置优惠价;
|
需求5个以上,可以联系客服设置优惠价;
|
||||||
开通后有任何问题可无理由退款,并支持自助提现
|
开通后有任何问题可无理由退款,并支持自助提现
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@foreach (var package in item.Packages.Where(m => m.Status == 1&&(m.TenantId==1157||m.TenantId==9999||m.TenantId==10000)).OrderBy(m => m.TenantId))
|
@foreach (var package in item.Packages.Where(m => m.Status == 1&&(m.TenantId==1157||m.TenantId==9999||m.TenantId==10000)).OrderBy(m => m.TenantId))
|
||||||
{
|
{
|
||||||
if (package.IsTest == 1)
|
if (package.IsTest == 1)
|
||||||
|
|||||||
@@ -19,16 +19,55 @@
|
|||||||
height: calc(85vh);
|
height: calc(85vh);
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
.form-control {
|
||||||
|
height: 50px;
|
||||||
|
font-size: 25px;
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.citylabel {
|
||||||
|
font-weight: normal;
|
||||||
|
width: 300px;
|
||||||
|
height: 50px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-top: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: solid 1px #ccc;
|
||||||
|
}
|
||||||
|
.citylabel>span{
|
||||||
|
padding-left: 50px;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] {
|
||||||
|
position:none;
|
||||||
|
margin-left: 10px;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
height: 50px;
|
||||||
|
width: 90%;
|
||||||
|
font-size: 25px;
|
||||||
|
}
|
||||||
|
.province{
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<vc:redirecct-login></vc:redirecct-login>
|
<vc:redirecct-login></vc:redirecct-login>
|
||||||
<div id="app" >
|
<div id="app" >
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label style="width: 90%;margin-left: 0.3rem;" v-for="(item,index) in assign_add_list">
|
<div id="jike">
|
||||||
<input type="checkbox" style="height: 0.3rem;width: 0.3rem;" v-model="assign_list" :value="item.name+'-'+item.id"/> <span v-if="item.status ==2">{{item.name}}</span><span v-if="item.status ==1" style="color: red;">{{item.name}}</span>
|
<label style="width: 90%;margin-left: 0.3rem;" v-for="(item,index) in assign_add_list">
|
||||||
</label>
|
<input type="checkbox" style="height: 0.3rem;width: 0.3rem;" v-model="assign_list" :value="item.name+'-'+item.id"/> <span v-if="item.status ==2">{{item.name}}</span><span v-if="item.status ==1" style="color: red;">{{item.name}}</span>
|
||||||
<br>
|
</label>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
<div id="huohu">
|
||||||
|
加载中,请稍后...
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="text-align: center;height:calc(5vh);margin-top:0.2rem;">
|
<div style="text-align: center;height:calc(5vh);margin-top:0.2rem;">
|
||||||
<button type="button" class="btnTui btn-refund" v-on:click="selectAddAssign()">确定选择</button>
|
<button type="button" class="btnTui btn-refund" v-on:click="selectAddAssign()">确定选择</button>
|
||||||
@@ -40,8 +79,8 @@
|
|||||||
account = getQueryVariable('account'),
|
account = getQueryVariable('account'),
|
||||||
pass = getQueryVariable('password');
|
pass = getQueryVariable('password');
|
||||||
|
|
||||||
if(product_id != 13) {
|
if(product_id != 13&&product_id != 19) {
|
||||||
alert('目前仅支持极客产品!');
|
alert('目前仅支持极客、火狐产品!');
|
||||||
window.location.href = "/User/MyAccounts";
|
window.location.href = "/User/MyAccounts";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,53 +100,111 @@
|
|||||||
var that = this;
|
var that = this;
|
||||||
this.assign_account = account;
|
this.assign_account = account;
|
||||||
this.assign_pass = pass;
|
this.assign_pass = pass;
|
||||||
$.ajax({
|
if(product_id == 13){
|
||||||
type: 'GET',
|
$("#jike").show();
|
||||||
url: 'http://php-api.juip.com/product/AccountAddress/index?user='+account+'&password='+pass,
|
$("#huohu").hide();
|
||||||
dataType: "json",
|
$.ajax({
|
||||||
contentType: "application/json",
|
type: 'GET',
|
||||||
success: function (res) {
|
url: 'http://php-api.juip.com/product/AccountAddress/index?user='+account+'&password='+pass,
|
||||||
console.log(res)
|
dataType: "json",
|
||||||
that.assign_add_list = res;
|
contentType: "application/json",
|
||||||
//if (res.Code == 10000) {
|
success: function (res) {
|
||||||
// that.onLineData = res.Data;
|
that.assign_add_list = res;
|
||||||
// for (var i = 0; i < that.onLineData.length; i++) {
|
//if (res.Code == 10000) {
|
||||||
// that.onLineData[i].ProductId = productId;
|
// that.onLineData = res.Data;
|
||||||
// }
|
// for (var i = 0; i < that.onLineData.length; i++) {
|
||||||
//}
|
// that.onLineData[i].ProductId = productId;
|
||||||
}
|
// }
|
||||||
});
|
//}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(product_id == 19){
|
||||||
|
$("#huohu").show();
|
||||||
|
$("#jike").hide();
|
||||||
|
$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
url: 'http://php-api.juip.com/product/AccountAddress/getList?user='+account+'&password='+pass,
|
||||||
|
dataType: "json",
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (res) {
|
||||||
|
$("#huohu").html('<p style="font-size:30px;">统一服务器地址:1.hhip.vip</p>');
|
||||||
|
$("#huohu").append(res.ipmodel);
|
||||||
|
$("#huohu").append("<hr>");
|
||||||
|
$("#huohu").append(res.city);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
selectAddAssign() {
|
selectAddAssign() {
|
||||||
if(this.assign_list.length>20||this.assign_list.length==0){
|
if(product_id == 13){
|
||||||
alert('最多选择20个,至少选择一个!');
|
if(this.assign_list.length>20||this.assign_list.length==0){
|
||||||
return;
|
alert('最多选择20个,至少选择一个!');
|
||||||
}
|
return;
|
||||||
let data = {
|
|
||||||
list:this.assign_list,
|
|
||||||
account:this.assign_account,
|
|
||||||
password:this.assign_pass,
|
|
||||||
}
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: 'http://php-api.juip.com/product/AccountAddress/select',
|
|
||||||
dataType: "json",
|
|
||||||
data:JSON.stringify(data),
|
|
||||||
contentType: "application/json",
|
|
||||||
success: function (res) {
|
|
||||||
if(res.code == 1){
|
|
||||||
alert('选择成功');
|
|
||||||
} else {
|
|
||||||
alert('选择失败');
|
|
||||||
}
|
|
||||||
//if (res.Code == 10000) {
|
|
||||||
// that.onLineData = res.Data;
|
|
||||||
// for (var i = 0; i < that.onLineData.length; i++) {
|
|
||||||
// that.onLineData[i].ProductId = productId;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
});
|
let data = {
|
||||||
|
list:this.assign_list,
|
||||||
|
account:this.assign_account,
|
||||||
|
password:this.assign_pass,
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'http://php-api.juip.com/product/AccountAddress/select',
|
||||||
|
dataType: "json",
|
||||||
|
data:JSON.stringify(data),
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (res) {
|
||||||
|
if(res.code == 1){
|
||||||
|
alert('选择成功');
|
||||||
|
} else {
|
||||||
|
alert('选择失败');
|
||||||
|
}
|
||||||
|
//if (res.Code == 10000) {
|
||||||
|
// that.onLineData = res.Data;
|
||||||
|
// for (var i = 0; i < that.onLineData.length; i++) {
|
||||||
|
// that.onLineData[i].ProductId = productId;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(product_id == 19){
|
||||||
|
let address_checked = [];
|
||||||
|
$("input[name='citys[]']:checked").each(function(i){
|
||||||
|
address_checked.push($(this).val());
|
||||||
|
});
|
||||||
|
let ipmode = $("select[name='ipmode']").val();
|
||||||
|
console.log(address_checked)
|
||||||
|
console.log(ipmode)
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
list:address_checked,
|
||||||
|
account:this.assign_account,
|
||||||
|
password:this.assign_pass,
|
||||||
|
ipmode:ipmode,
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'http://php-api.juip.com/product/AccountAddress/setAddress',
|
||||||
|
dataType: "json",
|
||||||
|
data:JSON.stringify(data),
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (res) {
|
||||||
|
if(res.code == 1){
|
||||||
|
alert('选择成功');
|
||||||
|
} else {
|
||||||
|
alert('选择失败');
|
||||||
|
}
|
||||||
|
//if (res.Code == 10000) {
|
||||||
|
// that.onLineData = res.Data;
|
||||||
|
// for (var i = 0; i < that.onLineData.length; i++) {
|
||||||
|
// that.onLineData[i].ProductId = productId;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -27,4 +27,34 @@
|
|||||||
$("#coupon_num").text(res.Data.length);
|
$("#coupon_num").text(res.Data.length);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function getQueryString(name) {
|
||||||
|
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
||||||
|
var r = window.location.search.substr(1).match(reg);
|
||||||
|
if (r != null) return unescape(r[2]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var is_realname = getQueryString('realname');
|
||||||
|
|
||||||
|
if(is_realname){
|
||||||
|
let data = {
|
||||||
|
cookie:document.cookie
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'http://php-api.juip.com/api/test/aliGetResult',
|
||||||
|
dataType: "json",
|
||||||
|
contentType: "application/json",
|
||||||
|
data: JSON.stringify(data),
|
||||||
|
beforeSend: function(xhr) {
|
||||||
|
xhr.withCredentials = true;
|
||||||
|
},
|
||||||
|
crossDomain: true,
|
||||||
|
success: function (res) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -99,8 +99,8 @@
|
|||||||
<a class="btnXq" asp-action="OnLine" asp-controller="User" asp-route-productId="@item.ProductId" asp-route-account="@item.Account">
|
<a class="btnXq" asp-action="OnLine" asp-controller="User" asp-route-productId="@item.ProductId" asp-route-account="@item.Account">
|
||||||
<button type="button" class="btnXq" style="margin-top:3px">查看在线</button>
|
<button type="button" class="btnXq" style="margin-top:3px">查看在线</button>
|
||||||
</a>
|
</a>
|
||||||
<a class="btnXq" href="/User/AssignAddress?productId=@item.ProductId&account=@item.Account&password=@item.Pwd">
|
<a class="btnXq" v-if="@item.ProductId==13||@item.ProductId==19" href="/User/AssignAddress?productId=@item.ProductId&account=@item.Account&password=@item.Pwd">
|
||||||
<button type="button" class="btnXq" style="margin-top:3px">指定线路</button>
|
<button type="button" class="btnXq" style="margin-top:3px">切换地区</button>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -94,7 +94,8 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>产品</th>
|
<th>产品</th>
|
||||||
<th>城市</th>
|
<th>城市</th>
|
||||||
<th>运营商</th>
|
<th v-if="product_id ==19">剩余拨数</th>
|
||||||
|
<th v-else="product_id ==19">运营商</th>
|
||||||
<th>服务器域名</th>
|
<th>服务器域名</th>
|
||||||
<th>IP量</th>
|
<th>IP量</th>
|
||||||
<th>实时带宽</th>
|
<th>实时带宽</th>
|
||||||
@@ -228,6 +229,11 @@
|
|||||||
this.search_field = '蘑菇IP';
|
this.search_field = '蘑菇IP';
|
||||||
this.sstp = '4430';
|
this.sstp = '4430';
|
||||||
break;
|
break;
|
||||||
|
case 19:
|
||||||
|
this.l2tp = '123';
|
||||||
|
this.search_field = '火狐IP';
|
||||||
|
this.sstp = '1500';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
@@ -344,6 +350,9 @@
|
|||||||
case 18:
|
case 18:
|
||||||
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
|
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
|
||||||
break;
|
break;
|
||||||
|
case 19:
|
||||||
|
self.location.href='http://php-api.juip.com/script/linedata/data/download/huohu.csv';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -517,7 +517,7 @@
|
|||||||
else if(item.Product.Id == 6||item.Product.Id == 2||item.Product.Id == 4 ||item.Product.Id == 14||item.Product.Id == 8) {
|
else if(item.Product.Id == 6||item.Product.Id == 2||item.Product.Id == 4 ||item.Product.Id == 14||item.Product.Id == 8) {
|
||||||
<div class="productItem" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id" a-pkg-id="@(item.Packages.FirstOrDefault(m=>m.Status==1).Id)">@item.Product.Name <span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">抄底价</span></div>
|
<div class="productItem" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id" a-pkg-id="@(item.Packages.FirstOrDefault(m=>m.Status==1).Id)">@item.Product.Name <span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">抄底价</span></div>
|
||||||
}
|
}
|
||||||
else if(item.Product.Id == 18|| item.Product.Id == 5) {
|
else if(item.Product.Id == 18|| item.Product.Id == 5|| item.Product.Id == 19) {
|
||||||
<div class="productItem" style="" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id"><span style="color: #f64e3d;font-weight:bold;padding-right: 5px;"> 新</span>@item.Product.Name <span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">抄底价</span></div>
|
<div class="productItem" style="" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id"><span style="color: #f64e3d;font-weight:bold;padding-right: 5px;"> 新</span>@item.Product.Name <span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">抄底价</span></div>
|
||||||
}
|
}
|
||||||
else if(item.Product.Id == 17) {
|
else if(item.Product.Id == 17) {
|
||||||
@@ -606,6 +606,9 @@
|
|||||||
@* @if(item.Product.Id == 8){
|
@* @if(item.Product.Id == 8){
|
||||||
<p class="youhuiNew">月卡送10天,双月卡赠送1个月,活动截止时间2021年3月31日<br>(同一个IP账号不限次数,<span style="color:FF0033;background-color:#FFFF33;">您可对同一账号多次续费都有赠送</span>,每位会员不限账号数量,您可购买多个IP账号都有赠送))</p>
|
<p class="youhuiNew">月卡送10天,双月卡赠送1个月,活动截止时间2021年3月31日<br>(同一个IP账号不限次数,<span style="color:FF0033;background-color:#FFFF33;">您可对同一账号多次续费都有赠送</span>,每位会员不限账号数量,您可购买多个IP账号都有赠送))</p>
|
||||||
} *@
|
} *@
|
||||||
|
@if(item.Product.Id == 19){
|
||||||
|
<p class="youhuiNew">本产品为独享,每个账号对应一个宽带拨号,永不超载,保证了网速及稳定性。<br>使用时只需设置这个唯一的服务器:1.hhip.vip,在账号列表中点击切换地区即可任意组合自己需要的地区。本产品灵活便捷,欢迎选购!</p>
|
||||||
|
}
|
||||||
|
|
||||||
@*<p class="text-center nameSmall">—<span>@item.Product.Name</span>—</p>*@
|
@*<p class="text-center nameSmall">—<span>@item.Product.Name</span>—</p>*@
|
||||||
<div class="card" style="margin-top:30px;">
|
<div class="card" style="margin-top:30px;">
|
||||||
|
|||||||
@@ -442,6 +442,9 @@
|
|||||||
@* @if(defaultProduct.Id == 8){
|
@* @if(defaultProduct.Id == 8){
|
||||||
<p class="youhuiNew">月卡送10天,双月卡赠送1个月,活动截止时间2021年3月31日<br>(同一个IP账号不限次数,<span style="color:FF0033;background-color:#FFFF33;">您可对同一账号多次续费都有赠送</span>,每位会员不限账号数量,您可购买多个IP账号都有赠送))</p>
|
<p class="youhuiNew">月卡送10天,双月卡赠送1个月,活动截止时间2021年3月31日<br>(同一个IP账号不限次数,<span style="color:FF0033;background-color:#FFFF33;">您可对同一账号多次续费都有赠送</span>,每位会员不限账号数量,您可购买多个IP账号都有赠送))</p>
|
||||||
} *@
|
} *@
|
||||||
|
@if(defaultProduct.Id == 19){
|
||||||
|
<p class="youhuiNew">本产品为独享,每个账号对应一个宽带拨号,永不超载,保证了网速及稳定性。<br>使用时只需设置这个唯一的服务器:1.hhip.vip,在账号列表中点击切换地区即可任意组合自己需要的地区。本产品灵活便捷,欢迎选购!</p>
|
||||||
|
}
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div style="display: flex;margin: 0 auto;">
|
<div style="display: flex;margin: 0 auto;">
|
||||||
|
|||||||
@@ -51,6 +51,18 @@
|
|||||||
padding: 30px;
|
padding: 30px;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.citylabel {
|
||||||
|
font-weight: normal;
|
||||||
|
width: 160px;
|
||||||
|
height: 35px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-top: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: solid 1px #ccc;
|
||||||
|
}
|
||||||
|
.province{
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.online {
|
.online {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@@ -250,20 +262,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@* 指定地区 *@
|
@* 指定地区 *@
|
||||||
<div class="online" style="overflow: hidden;" v-cloak v-if="showAddress">
|
<div class="online" style="overflow: hidden;display:none;" v-cloak id="showAddress">
|
||||||
<h4>最多选择20条线路 <span style="color: red;">标红</span>为线路正在维护中</h4>
|
<div id="jike">
|
||||||
<img src="~/img/close.png" class="btnOnlineClose" style="position: absolute;top:10px;" v-on:click="closeOnline()" />
|
<h4>最多选择20条线路 <span style="color: red;">标红</span>为线路正在维护中</h4>
|
||||||
<div style="overflow-y: auto;width:950px;height:580px;">
|
<img src="~/img/close.png" class="btnOnlineClose" style="position: absolute;top:10px;" v-on:click="closeOnline()" />
|
||||||
<div class="checkbox">
|
<div style="overflow-y: auto;width:950px;height:580px;">
|
||||||
<label style="width: 25%;" v-for="(item,index) in assign_add_list">
|
<div class="checkbox">
|
||||||
<input type="checkbox" v-model="assign_list" :value="item.name+'-'+item.id"><span v-if="item.status ==2">{{item.name}}</span><span v-if="item.status ==1" style="color: red;">{{item.name}}</span>
|
<label style="width: 25%;" v-for="(item,index) in assign_add_list">
|
||||||
</label>
|
<input type="checkbox" v-model="assign_list" :value="item.name+'-'+item.id"><span v-if="item.status ==2">{{item.name}}</span><span v-if="item.status ==1" style="color: red;">{{item.name}}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" v-on:click="closeOnline()">取消</button>
|
<div id="huohu" style="overflow-y: auto;width:950px;height:580px;">
|
||||||
<button type="button" class="btn btn-primary" v-on:click="selectAddAssign()">确定选择</button>
|
请稍后,加载中...
|
||||||
</div>
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" v-on:click="closeOnline()">取消</button>
|
||||||
|
<button type="button" class="btn btn-primary" v-on:click="selectAddAssign()">确定选择</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="editList">
|
<div class="editList">
|
||||||
<form>
|
<form>
|
||||||
@@ -346,7 +364,7 @@
|
|||||||
<button type="button" class="btn btn-danger btn-rebuy"><img src="~/img/xufei.png"> 续费</button>
|
<button type="button" class="btn btn-danger btn-rebuy"><img src="~/img/xufei.png"> 续费</button>
|
||||||
<button type="button" class="btn btn-primary btn-refund">
|
<button type="button" class="btn btn-primary btn-refund">
|
||||||
<img src="~/img/tui.png"> 退货</button>
|
<img src="~/img/tui.png"> 退货</button>
|
||||||
<a style="color:red"> *非本系统开通账号无法退款,请联系客服处理</a>
|
<a style="color:red"> *批量续费可通过筛选和搜索功能精准定位账号</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6 text-right">
|
<div class="col-lg-6 text-right">
|
||||||
<button type="button" class="btn btn-primary laozhanghao"><img src="~/img/renzheng_gray.png"> 老账号认证</button>
|
<button type="button" class="btn btn-primary laozhanghao"><img src="~/img/renzheng_gray.png"> 老账号认证</button>
|
||||||
@@ -382,7 +400,7 @@
|
|||||||
<td class="redT">@(item.Status==AccountStatus.Refund?"已退货": item.RestTime)</td>
|
<td class="redT">@(item.Status==AccountStatus.Refund?"已退货": item.RestTime)</td>
|
||||||
@*<td class="greenT">查看</td>*@
|
@*<td class="greenT">查看</td>*@
|
||||||
<td class="blueT"><a @@click="online(@item.ProductId,'@item.Account')">查看</a> </td>
|
<td class="blueT"><a @@click="online(@item.ProductId,'@item.Account')">查看</a> </td>
|
||||||
<td class="blueT"><a @@click="assign_address(@item.ProductId,'@item.Account','@item.Pwd')">地区列表</a> </td>
|
<td class="blueT"><a v-if="@item.ProductId==13||@item.ProductId==19" @@click="assign_address(@item.ProductId,'@item.Account','@item.Pwd')">切换地区</a> </td>
|
||||||
<td class="blueT"><a asp-action="Index" asp-controller="LineList" asp-route-ProductId="@item.ProductId" target="_blank">查看</a> </td>
|
<td class="blueT"><a asp-action="Index" asp-controller="LineList" asp-route-ProductId="@item.ProductId" target="_blank">查看</a> </td>
|
||||||
<td class="blueT"> <a asp-action="soft" asp-controller="product" target="_blank">下载</a></td>
|
<td class="blueT"> <a asp-action="soft" asp-controller="product" target="_blank">下载</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -452,11 +470,11 @@
|
|||||||
mutilAuthLoading: false,
|
mutilAuthLoading: false,
|
||||||
oneAuthLoading: false,
|
oneAuthLoading: false,
|
||||||
showOnline: false,
|
showOnline: false,
|
||||||
showAddress: false,
|
|
||||||
assign_add_list:[],
|
assign_add_list:[],
|
||||||
assign_list:[],
|
assign_list:[],
|
||||||
assign_account:'',
|
assign_account:'',
|
||||||
assign_pass:'',
|
assign_pass:'',
|
||||||
|
productId:'',
|
||||||
searchModel: {
|
searchModel: {
|
||||||
ExpiredDay:-1,
|
ExpiredDay:-1,
|
||||||
ProductId:@this.Context.Request.GetInt("ProductId"),
|
ProductId:@this.Context.Request.GetInt("ProductId"),
|
||||||
@@ -643,64 +661,125 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
assign_address(productId, account,pass) {
|
assign_address(productId, account,pass) {
|
||||||
if(productId != 13){
|
if(productId != 13 && productId != 19){
|
||||||
alert('目前仅支持极客产品!');
|
alert('目前仅支持极客、火狐产品!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.showAddress = true
|
$("#showAddress").show();
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
this.assign_account = account;
|
this.assign_account = account;
|
||||||
this.assign_pass = pass;
|
this.assign_pass = pass;
|
||||||
$.ajax({
|
this.productId = productId;
|
||||||
type: 'GET',
|
if(productId == 13){
|
||||||
url: 'http://php-api.juip.com/product/AccountAddress/index?user='+account+'&password='+pass,
|
$("#jike").show();
|
||||||
dataType: "json",
|
$("#huohu").hide();
|
||||||
contentType: "application/json",
|
$.ajax({
|
||||||
success: function (res) {
|
type: 'GET',
|
||||||
that.assign_add_list = res;
|
url: 'http://php-api.juip.com/product/AccountAddress/index?user='+account+'&password='+pass,
|
||||||
//if (res.Code == 10000) {
|
dataType: "json",
|
||||||
// that.onLineData = res.Data;
|
contentType: "application/json",
|
||||||
// for (var i = 0; i < that.onLineData.length; i++) {
|
success: function (res) {
|
||||||
// that.onLineData[i].ProductId = productId;
|
that.assign_add_list = res;
|
||||||
// }
|
//if (res.Code == 10000) {
|
||||||
//}
|
// that.onLineData = res.Data;
|
||||||
}
|
// for (var i = 0; i < that.onLineData.length; i++) {
|
||||||
});
|
// that.onLineData[i].ProductId = productId;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(productId == 19){
|
||||||
|
$("#huohu").show();
|
||||||
|
$("#jike").hide();
|
||||||
|
$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
url: 'http://php-api.juip.com/product/AccountAddress/getList?user='+account+'&password='+pass,
|
||||||
|
dataType: "json",
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (res) {
|
||||||
|
$("#huohu").html('<p style="font-size:30px;">统一服务器地址:1.hhip.vip</p>');
|
||||||
|
$("#huohu").append(res.ipmodel);
|
||||||
|
$("#huohu").append("<hr>");
|
||||||
|
$("#huohu").append(res.city);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
selectAddAssign() {
|
selectAddAssign() {
|
||||||
if(this.assign_list.length>20||this.assign_list.length==0){
|
if(this.productId == 19){
|
||||||
alert('最多选择20个,至少选择一个!');
|
let address_checked = [];
|
||||||
return;
|
$("input[name='citys[]']:checked").each(function(i){
|
||||||
}
|
address_checked.push($(this).val());
|
||||||
let data = {
|
});
|
||||||
list:this.assign_list,
|
let ipmode = $("select[name='ipmode']").val();
|
||||||
account:this.assign_account,
|
console.log(address_checked)
|
||||||
password:this.assign_pass,
|
console.log(ipmode)
|
||||||
}
|
|
||||||
$.ajax({
|
let data = {
|
||||||
type: 'POST',
|
list:address_checked,
|
||||||
url: 'http://php-api.juip.com/product/AccountAddress/select',
|
account:this.assign_account,
|
||||||
dataType: "json",
|
password:this.assign_pass,
|
||||||
data:JSON.stringify(data),
|
ipmode:ipmode,
|
||||||
contentType: "application/json",
|
|
||||||
success: function (res) {
|
|
||||||
if(res.code == 1){
|
|
||||||
alert('选择成功');
|
|
||||||
} else {
|
|
||||||
alert('选择失败');
|
|
||||||
}
|
|
||||||
//if (res.Code == 10000) {
|
|
||||||
// that.onLineData = res.Data;
|
|
||||||
// for (var i = 0; i < that.onLineData.length; i++) {
|
|
||||||
// that.onLineData[i].ProductId = productId;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
});
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'http://php-api.juip.com/product/AccountAddress/setAddress',
|
||||||
|
dataType: "json",
|
||||||
|
data:JSON.stringify(data),
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (res) {
|
||||||
|
if(res.code == 1){
|
||||||
|
alert('选择成功');
|
||||||
|
} else {
|
||||||
|
alert('选择失败');
|
||||||
|
}
|
||||||
|
//if (res.Code == 10000) {
|
||||||
|
// that.onLineData = res.Data;
|
||||||
|
// for (var i = 0; i < that.onLineData.length; i++) {
|
||||||
|
// that.onLineData[i].ProductId = productId;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(this.productId == 13){
|
||||||
|
if(this.assign_list.length>20||this.assign_list.length==0){
|
||||||
|
alert('最多选择20个,至少选择一个!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let data = {
|
||||||
|
list:this.assign_list,
|
||||||
|
account:this.assign_account,
|
||||||
|
password:this.assign_pass,
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: 'http://php-api.juip.com/product/AccountAddress/select',
|
||||||
|
dataType: "json",
|
||||||
|
data:JSON.stringify(data),
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (res) {
|
||||||
|
if(res.code == 1){
|
||||||
|
alert('选择成功');
|
||||||
|
} else {
|
||||||
|
alert('选择失败');
|
||||||
|
}
|
||||||
|
//if (res.Code == 10000) {
|
||||||
|
// that.onLineData = res.Data;
|
||||||
|
// for (var i = 0; i < that.onLineData.length; i++) {
|
||||||
|
// that.onLineData[i].ProductId = productId;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
closeOnline() {
|
closeOnline() {
|
||||||
this.showOnline = false;
|
this.showOnline = false;
|
||||||
this.showAddress = false;
|
$("#showAddress").hide();
|
||||||
this.onLineData = [];
|
this.onLineData = [];
|
||||||
},
|
},
|
||||||
killout: function (item) {
|
killout: function (item) {
|
||||||
|
|||||||
475
Services/Hncore.Pass.Vpn/Service/AgentClient14Service.cs
Normal file
475
Services/Hncore.Pass.Vpn/Service/AgentClient14Service.cs
Normal file
@@ -0,0 +1,475 @@
|
|||||||
|
using AngleSharp.Html.Parser;
|
||||||
|
using Hncore.Infrastructure.Common;
|
||||||
|
using Hncore.Infrastructure.Extension;
|
||||||
|
using Hncore.Infrastructure.Serializer;
|
||||||
|
using Hncore.Infrastructure.WebApi;
|
||||||
|
using Hncore.Pass.Vpn.Model;
|
||||||
|
using Hncore.Pass.Vpn.Request.Product;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
namespace Hncore.Pass.Vpn.Service
|
||||||
|
{
|
||||||
|
public class AgentClient14Service:AgentClientBaseService
|
||||||
|
{
|
||||||
|
string LoginUrl { get; set; } = "api/login";
|
||||||
|
string LoginCodeUrl { get; set; } = "main/imgcode.html";
|
||||||
|
string RefrushTokenUrl { get; set; } = "agent/index.html";
|
||||||
|
string SingleAddUrl { get; set; } = "api/number";
|
||||||
|
string SingleReAddUrl { get; set; } = "api/number/renew";
|
||||||
|
string MuiltAddUrl { get; set; } = "agent/memberMuiltAdd.html";
|
||||||
|
string RefundUrl { get; set; } = "api/number/refund";
|
||||||
|
string UpdateUrl = "api/number/";//agent/memberUpdate/id/1155709.html
|
||||||
|
string OnlineUrl { get; set; } = "api/numberLine/";
|
||||||
|
string KIllUrl { get; set; } = "api/numberOffline";
|
||||||
|
string searchAccountUrl = "api/numberSingle/";
|
||||||
|
string searchTestAccountUrl = "api/numberSingle/";
|
||||||
|
string DeleteUrl { get; set; } = "api/number/refund";//1160862.html";
|
||||||
|
IHttpClientFactory m_HttpClientFactory;
|
||||||
|
public AgentClient14Service(IHttpClientFactory httpClientFactory):base(httpClientFactory)
|
||||||
|
{
|
||||||
|
m_HttpClientFactory = httpClientFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<int> RefrushStatus()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
public override async Task<(byte[], string)> GetCode()
|
||||||
|
{
|
||||||
|
var client = CreateHttpClient(false);
|
||||||
|
if (this.LoginUrl.NotHas()) return (null, "");
|
||||||
|
var getResp = await client.GetAsync(this.LoginUrl);
|
||||||
|
var cookie = this.GetCookie(getResp, "PHPSESSID");
|
||||||
|
if (cookie.Has())
|
||||||
|
{
|
||||||
|
client.DefaultRequestHeaders.Add("Cookie", cookie);
|
||||||
|
var ret = await client.GetByteArrayAsync(this.LoginCodeUrl + "?t=" + DateTime.Now.Millisecond);
|
||||||
|
return (ret, cookie);
|
||||||
|
}
|
||||||
|
return (null, "");
|
||||||
|
}
|
||||||
|
public override async Task<ApiResult> Login(AgentLoginRequest request)
|
||||||
|
{
|
||||||
|
return new ApiResult(request.Key);
|
||||||
|
}
|
||||||
|
public override bool CheckAccount(int productId,List<string> accounts)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新开
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packageId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <param name="pwd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<ApiResult> NewAccount(string packageKey, string account, string pwd, int connCount = 1, int accountType = 1, int payCount = 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var userid = "kh";
|
||||||
|
|
||||||
|
var url = "/api/raduserCreate?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&userid="+userid+"&username="+account+"&password="+pwd+"&prdid=8&maxonline="+connCount+"&day="+packageKey;
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
return new ApiResult(ResultCode.C_SUCCESS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new ApiResult(ResultCode.C_INVALID_ERROR, "开户失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新开
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packageId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <param name="pwd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<ApiResult> NewMuiltAccount(string packageKey, string account, string pwd, int connCount = 1, int accountType = 1,int startNum=0, int endNum=1 )
|
||||||
|
{
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
var map = new Dictionary<string, string>(){
|
||||||
|
{"group","single" },
|
||||||
|
{"number",account },
|
||||||
|
{"password",pwd },
|
||||||
|
{"connect",connCount.ToString()},
|
||||||
|
{"interval","1"},
|
||||||
|
{"type",packageKey},
|
||||||
|
{"body","api"},
|
||||||
|
{"mobile","13073735878"}
|
||||||
|
};
|
||||||
|
var title = GetOpTitle("NewAccount", account);
|
||||||
|
LogHelper.Info(title, map.ToJson());
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var resp = await client.PostAsForm(this.SingleAddUrl, map);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["status"].ToString();
|
||||||
|
if (status =="400")
|
||||||
|
{
|
||||||
|
return new ApiResult(ResultCode.C_SUCCESS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogHelper.Error(title, content);
|
||||||
|
return new ApiResult(ResultCode.C_INVALID_ERROR, "开户失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.Error(title, ex.Message);
|
||||||
|
return new ApiResult(ResultCode.C_INVALID_ERROR, "开户失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 续费
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="productId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <param name="pwd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<ApiResult> NewReAccount(string packageKey, string account, int connCount, int payCount = 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var url = "/api/raduserRenew?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&username="+account+"&day="+packageKey;
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
return new ApiResult(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new ApiResult(ResultCode.C_INVALID_ERROR, "续费失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 删除账号
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="productId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<bool> DeleteAccount(string account)
|
||||||
|
{
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
var infoRet = await this.GetAccountInfo(account, true);
|
||||||
|
if (infoRet.Code != ResultCode.C_SUCCESS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var title = GetOpTitle("DeleteAccount", account);
|
||||||
|
LogHelper.Info(title, account);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var delete = this.DeleteUrl + infoRet.Data.Id + ".html";
|
||||||
|
var resp = await client.GetAsync(delete);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
if (content.Has() && content.IndexOf("alert(\"删除成功\")") != -1)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogHelper.Error(title, content);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.Error(title, ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 得到账号信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="productId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<ApiResult<OriginAccountModel>> GetAccountInfo(string account,bool isTest=false)
|
||||||
|
{
|
||||||
|
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
var url = "/api/raduserInfo?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&username="+account;
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
var data = jo["data"];
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
var trData = new OriginAccountModel
|
||||||
|
{
|
||||||
|
Id = "",
|
||||||
|
Account = data["username"].ToString(),
|
||||||
|
Pwd = data["password"].ToString(),
|
||||||
|
AccountType = "",
|
||||||
|
Package = "",
|
||||||
|
ConnectCount = "",
|
||||||
|
RegistTime = data["createtime"].ToString(),
|
||||||
|
EndTime = data["expiretime"].ToString(),
|
||||||
|
RestTime = "",
|
||||||
|
Amount = "",
|
||||||
|
Remark = "",
|
||||||
|
};
|
||||||
|
return new ApiResult<OriginAccountModel>(trData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new ApiResult<OriginAccountModel>(ResultCode.C_INVALID_ERROR, "没有查询到信息");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 修改账号密码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="productId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <param name="pwd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<bool> UpdateAccountPwd(string account, string pwd)
|
||||||
|
{
|
||||||
|
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
var url = "/api/raduserChpw?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&username="+account+"&newpass="+pwd;
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 退款
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packageId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<ApiResult> Refund(string account, string packageKey, int days)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return new ApiResult(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 是否在线
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="productId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<ApiResult<List<OriginAccountOnlineModel>>> OnLine(string account)
|
||||||
|
{
|
||||||
|
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
var url = "/api/raduserAcct?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&username="+account;
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
var retData = new List<OriginAccountOnlineModel>();
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
if(jo.ContainsKey("data")){
|
||||||
|
foreach (var tr in jo["data"])
|
||||||
|
{
|
||||||
|
JObject jsondata = (JObject)JsonConvert.DeserializeObject(tr.ToJson());
|
||||||
|
|
||||||
|
var trData = new OriginAccountOnlineModel
|
||||||
|
{
|
||||||
|
Account = account,
|
||||||
|
ServerIP = jsondata["serverip"].ToString(),
|
||||||
|
LoginTime = jsondata["starttime"].ToString(),
|
||||||
|
OnlineTime = "",
|
||||||
|
LoginIP = jsondata["framedip"].ToString(),
|
||||||
|
UpStream = "",
|
||||||
|
DownStream = "",
|
||||||
|
Id= "{account:\""+account+"\",radacctid:\""+jsondata["radacctid"].ToString()+"\"}",
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
retData.Add(trData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ApiResult<List<OriginAccountOnlineModel>>(retData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new ApiResult<List<OriginAccountOnlineModel>>(ResultCode.C_INVALID_ERROR, "查询失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 踢号
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="productId"></param>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<bool> KillOut( string id)
|
||||||
|
{
|
||||||
|
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
JObject userinfo = (JObject)JsonConvert.DeserializeObject(id);
|
||||||
|
|
||||||
|
var url = "/api/raduserDisconnect?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&username="+userinfo["account"]+"&radacctid="+userinfo["radacctid"];
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
var title = GetOpTitle("KillOut", id);
|
||||||
|
var info = "";
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.Error(title, ex.Message + "-->info:" + info);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否存在
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="account"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override async Task<bool> Exist(string account)
|
||||||
|
{
|
||||||
|
Random rd = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
int i = rd.Next();
|
||||||
|
|
||||||
|
var time_s = DateTime.Now.GetUnixTimeStamp();
|
||||||
|
var agentid = "admin1";
|
||||||
|
var nonce = MD5(time_s.ToString()) + i.ToString();
|
||||||
|
|
||||||
|
var apikey = "b220b83508db57f44e5ce86a7b34cae9";
|
||||||
|
var sign = MD5(time_s+nonce+apikey);
|
||||||
|
|
||||||
|
var url = "/api/raduserExist?agentid="+agentid+"&ti="+time_s+"&nonce="+nonce+"&sign="+sign+"&username="+account;
|
||||||
|
|
||||||
|
var client = CreateHttpClient();
|
||||||
|
|
||||||
|
var resp = await client.GetAsync(url);
|
||||||
|
var content = await resp.Content.ReadAsStringAsync();
|
||||||
|
Console.WriteLine("=========================================================================");
|
||||||
|
Console.WriteLine(content);
|
||||||
|
Console.WriteLine("=========================================================================");
|
||||||
|
JObject jo = (JObject)JsonConvert.DeserializeObject(content);
|
||||||
|
var status = jo["errcode"].ToString();
|
||||||
|
|
||||||
|
if (status =="0")
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -69,6 +69,8 @@ namespace Hncore.Pass.Vpn.Service
|
|||||||
agent = new AgentClient12Service(m_HttpClientFactory) { ClientName = product.GroupNO };
|
agent = new AgentClient12Service(m_HttpClientFactory) { ClientName = product.GroupNO };
|
||||||
if (product.GroupNO == "g13")
|
if (product.GroupNO == "g13")
|
||||||
agent = new AgentClient13Service(m_HttpClientFactory) { ClientName = product.GroupNO };
|
agent = new AgentClient13Service(m_HttpClientFactory) { ClientName = product.GroupNO };
|
||||||
|
if (product.GroupNO == "g14")
|
||||||
|
agent = new AgentClient14Service(m_HttpClientFactory) { ClientName = product.GroupNO };
|
||||||
agent.Product = product;
|
agent.Product = product;
|
||||||
return agent;
|
return agent;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user