From c74967b113347cf77cf82cee87e2d34fd3f3297c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cwanyongkang=E2=80=9D?= <“937888580@qq.com”> Date: Sat, 28 Sep 2024 10:04:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=98=91=E8=8F=87=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/AgentClient22Service.cs | 404 ++++++++++++++++++ .../Hncore.Pass.Vpn/Service/AgentService.cs | 2 + 2 files changed, 406 insertions(+) create mode 100644 Services/Hncore.Pass.Vpn/Service/AgentClient22Service.cs diff --git a/Services/Hncore.Pass.Vpn/Service/AgentClient22Service.cs b/Services/Hncore.Pass.Vpn/Service/AgentClient22Service.cs new file mode 100644 index 0000000..2912c0b --- /dev/null +++ b/Services/Hncore.Pass.Vpn/Service/AgentClient22Service.cs @@ -0,0 +1,404 @@ +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 AgentClient22Service: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/agent/AddAccount?apikey=80cf4f64e990b78a9fc5eb&product=1&"; + string SingleReAddUrl { get; set; } = "api/agent/updateAccount?apikey=80cf4f64e990b78a9fc5eb&"; + string MuiltAddUrl { get; set; } = "agent/memberMuiltAdd.html"; + string RefundUrl { get; set; } = "api/agent/refund?apikey=80cf4f64e990b78a9fc5eb&"; + string UpdateUrl = "api/agent/updateAccount?apikey=80cf4f64e990b78a9fc5eb&";//agent/memberUpdate/id/1155709.html + string OnlineUrl { get; set; } = "api/agent/getOnlineList?apikey=80cf4f64e990b78a9fc5eb&"; + string KIllUrl { get; set; } = "api/agent/disconnect?apikey=80cf4f64e990b78a9fc5eb&"; + string searchAccountUrl = "api/agent/getAccountInfo?apikey=80cf4f64e990b78a9fc5eb&"; + string searchTestAccountUrl = "api/numberSingle/"; + string DeleteUrl { get; set; } = "api/number/refund";//1160862.html"; + string is_exist { get; set; } = "api/agent/exist?apikey=80cf4f64e990b78a9fc5eb&";//1160862.html"; + IHttpClientFactory m_HttpClientFactory; + public AgentClient22Service(IHttpClientFactory httpClientFactory):base(httpClientFactory) + { + m_HttpClientFactory = httpClientFactory; + } + + public override async Task 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 Login(AgentLoginRequest request) + { + return new ApiResult(request.Key); + } + public override bool CheckAccount(int productId,List accounts) + { + return false; + } + + /// + /// 新开 + /// + /// + /// + /// + /// + public override async Task NewAccount(string packageKey, string account, string pwd, int connCount = 1, int accountType = 1, int payCount = 1) + { + var client = CreateHttpClient(); + + + string[] arrStr = packageKey.Split('-'); + var taocan = arrStr[0]; + var limit = arrStr[1]; + + try + { + var url = this.SingleAddUrl + "type=one&username="+account+"&pass="+pwd+"&taocan="+taocan+"&connect="+connCount.ToString()+"&limit="+limit; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + if (status =="10000") + { + return new ApiResult(ResultCode.C_SUCCESS); + } + else + { + return new ApiResult(ResultCode.C_INVALID_ERROR, "开户失败"); + } + } + catch (Exception ex) + { + return new ApiResult(ResultCode.C_INVALID_ERROR, "开户失败"); + } + } + + /// + /// 新开 + /// + /// + /// + /// + /// + public override async Task 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(){}; + + + if(packageKey == "test"){ + map = new Dictionary(){ + {"group","test" }, + {"number",account }, + {"password",pwd }, + {"body","api"}, + {"mobile","13073735878"} + }; + } else { + map = new Dictionary(){ + {"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, "开户失败"); + } + } + + /// + /// 续费 + /// + /// + /// + /// + /// + public override async Task NewReAccount(string packageKey, string account, int connCount, int payCount = 1) + { + var client = CreateHttpClient(); + + string[] arrStr = packageKey.Split('-'); + var taocan = arrStr[0]; + var limit = arrStr[1]; + + try + { + var url = this.SingleReAddUrl + "type=rebuy&username="+account+"&taocan="+taocan; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + if (status =="10000") + { + return new ApiResult(1); + } + else + { + return new ApiResult(ResultCode.C_INVALID_ERROR, "续费失败"); + } + } + catch (Exception ex) + { + return new ApiResult(ResultCode.C_INVALID_ERROR, "续费失败"); + } + + } + /// + /// 删除账号 + /// + /// + /// + /// + public override async Task DeleteAccount(string account) + { + + return false; + } + /// + /// 得到账号信息 + /// + /// + /// + /// + public override async Task> GetAccountInfo(string account,bool isTest=false) + { + + var client = CreateHttpClient(); + + var url = this.searchAccountUrl + "account="+account; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + var data = jo["data"]; + if (status =="10000") + { + var trData = new OriginAccountModel + { + Id = "", + Account = data["username"].ToString(), + Pwd = data["pass"].ToString(), + AccountType = "", + Package = "", + ConnectCount = "", + RegistTime = data["create_time"].ToString(), + EndTime = data["expire_time"].ToString(), + RestTime = "", + Amount = "", + Remark = "", + }; + return new ApiResult(trData); + } + + return new ApiResult(ResultCode.C_INVALID_ERROR, "没有查询到信息"); + + } + /// + /// 修改账号密码 + /// + /// + /// + /// + /// + public override async Task UpdateAccountPwd(string account, string pwd) + { + + var client = CreateHttpClient(); + + try + { + var url = this.UpdateUrl + "type=update_pass&username="+account+"&pass="+pwd; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + if (status =="10000") + { + return true; + } + else + { + return false; + } + } + catch (Exception ex) + { + return false; + } + + } + /// + /// 退款 + /// + /// + /// + /// + public override async Task Refund(string account, string packageKey, int days) + { + var client = CreateHttpClient(); + var url = this.RefundUrl + "username=" + account; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + + + return new ApiResult(1); + } + /// + /// 是否在线 + /// + /// + /// + /// + public override async Task>> OnLine(string account) + { + var client = CreateHttpClient(); + + var url = this.OnlineUrl + "account="+account; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + var retData = new List(); + if (status =="10000") + { + 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["serveip"].ToString(), + LoginTime = jsondata["start_time"].ToString(), + OnlineTime = jsondata["online_time"].ToString(), + LoginIP = jsondata["userip"].ToString(), + UpStream = jsondata["upbite"].ToString(), + DownStream = jsondata["downbite"].ToString(), + Id= jsondata["id"].ToString(), + + }; + + retData.Add(trData); + } + } + return new ApiResult>(retData); + } + + return new ApiResult>(ResultCode.C_INVALID_ERROR, "查询失败"); + + } + /// + /// 踢号 + /// + /// + /// + /// + public override async Task KillOut( string id) + { + var client = CreateHttpClient(); + + try + { + var url = this.KIllUrl + "id="+id; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + if (status =="10000") + { + return true; + } + else + { + return false; + } + } + catch (Exception ex) + { + return false; + } + return false; + } + + /// + /// 是否存在 + /// + /// + /// + public override async Task Exist(string account) + { + var client = CreateHttpClient(); + var url = this.is_exist + "username=" + account; + var resp = await client.GetAsync(url); + var content = await resp.Content.ReadAsStringAsync(); + + + JObject jo = (JObject)JsonConvert.DeserializeObject(content); + var status = jo["code"].ToString(); + if (status == "-10000") + { + return true; + } + return false; + } + } +} diff --git a/Services/Hncore.Pass.Vpn/Service/AgentService.cs b/Services/Hncore.Pass.Vpn/Service/AgentService.cs index 8d730b3..091737d 100644 --- a/Services/Hncore.Pass.Vpn/Service/AgentService.cs +++ b/Services/Hncore.Pass.Vpn/Service/AgentService.cs @@ -85,6 +85,8 @@ namespace Hncore.Pass.Vpn.Service agent = new AgentClient20Service(m_HttpClientFactory) { ClientName = product.GroupNO }; if (product.GroupNO == "g21") agent = new AgentClient21Service(m_HttpClientFactory) { ClientName = product.GroupNO }; + if (product.GroupNO == "g22") + agent = new AgentClient22Service(m_HttpClientFactory) { ClientName = product.GroupNO }; agent.Product = product; return agent; }