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 AgentClient17Service: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 AgentClient17Service(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 url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=adduser&user="+account+"&pass="+pwd+"&serverid="+packageKey+"&logincount="+connCount.ToString()+"&idname=万勇强&idcard=410325199407079912"; if (packageKey == "test") { url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=addtestuser&user="+account+"&password="+pwd+"&idname=万勇强&idcard=410325199407079912"; } var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); if (status =="1") { return new ApiResult(ResultCode.C_SUCCESS); } else { 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(){ {"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 url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=buy&user="+account+"&serverid="+packageKey; var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); if (status =="1") { return new ApiResult(1); } else { return new ApiResult(ResultCode.C_INVALID_ERROR, "续费失败"); } } /// /// 删除账号 /// /// /// /// public override async Task DeleteAccount(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 = "a478ad5aa3079bbbef3cd45e2d55d61e"; var sign = MD5(time_s+nonce+apikey); var url = "/api/raduserRefund?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(); if (status =="0") { return true; } else { return false; } } /// /// 得到账号信息 /// /// /// /// public override async Task> GetAccountInfo(string account,bool isTest=false) { var url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=getuserinfo&user="+account; var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); if (status =="1") { var trData = new OriginAccountModel { Id = "", Account = account, Pwd = jo["password"].ToString(), AccountType = jo["pause"].ToString(), Package = "", ConnectCount = jo["logincount"].ToString(), RegistTime = "", EndTime = jo["expiretime"].ToString(), RestTime = "", Amount = "", Remark = "", }; return new ApiResult(trData); } else { return new ApiResult(ResultCode.C_INVALID_ERROR, "没有查询到信息"); } } /// /// 修改账号密码 /// /// /// /// /// public override async Task UpdateAccountPwd(string account, string pwd) { var url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=setuser&user="+account+"&new_pwd="+pwd; var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); if (status =="1") { return true; } else { return false; } } /// /// 退款 /// /// /// /// public override async Task Refund(string account, string packageKey, int days) { var url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=requestcancell&user="+account; var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); if (status =="1") { return new ApiResult(1); } else { return new ApiResult(ResultCode.C_INVALID_ERROR, "退款失败"); } } /// /// 是否在线 /// /// /// /// public override async Task>> OnLine(string account) { var url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=get_user_onlinelog&user="+account; var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); var retData = new List(); if (status =="1") { 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["server_ip"].ToString(), LoginTime = "", OnlineTime = jsondata["online_time"].ToString(), LoginIP = jsondata["client_ip"].ToString(), UpStream = "", DownStream = "", Id= "{user:\""+account+"\",address:\""+jsondata["address"].ToString()+"\",server_ip:\""+jsondata["server_ip"].ToString()+"\"}", }; retData.Add(trData); } } return new ApiResult>(retData); } else { return new ApiResult>(retData); } } /// /// 踢号 /// /// /// /// public override async Task KillOut( string id) { JObject info = (JObject)JsonConvert.DeserializeObject(id); var url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=user_online_offline&user="+info["user"].ToString()+"&address="+info["address"].ToString()+"&server_ip="+info["server_ip"].ToString(); var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["code"].ToString(); if (status =="1") { return true; } return false; } /// /// 是否存在 /// /// /// public override async Task Exist(string account) { var url = "?secretId=108006113&secretKey=87085a351a64c116df09ebc07d5781sf&type=getuserlenNum&user="+account; var client = CreateHttpClient(); var resp = await client.GetAsync(url); var content = ""; using (var sr = new StreamReader(resp.Content.ReadAsStreamAsync().Result, Encoding.GetEncoding("iso-8859-1"))) { content = sr.ReadToEnd(); } JObject jo = (JObject)JsonConvert.DeserializeObject(content); var status = jo["status"].ToString(); if (status =="success") { return false; } return true; } } }