From 3d99dc303b316defa2e54ff83a1583fc8e20414b Mon Sep 17 00:00:00 2001 From: AlessandroCH Date: Wed, 30 Jul 2025 19:40:11 +0200 Subject: [PATCH] some changes --- Campofinale/Http/Dispatch.cs | 39 ++++++++++- Campofinale/Http/SDK.cs | 129 +++++++++++++++++++++++++++++++---- Campofinale/Program.cs | 6 +- 3 files changed, 157 insertions(+), 17 deletions(-) diff --git a/Campofinale/Http/Dispatch.cs b/Campofinale/Http/Dispatch.cs index 17a271f..8616f60 100644 --- a/Campofinale/Http/Dispatch.cs +++ b/Campofinale/Http/Dispatch.cs @@ -1,5 +1,6 @@ using Campofinale.Game; using HttpServerLite; +using Newtonsoft.Json; namespace Campofinale.Http { @@ -63,11 +64,46 @@ namespace Campofinale.Http await ctx.Response.SendAsync(resp); } + public class U8ProductInfo + { + public string app_id; + public string channel_id; + public int world_id; + public int store_id; + public string product_id; + public string desc; + public string name; + public int type; + public long price; + public string extra_data; + public string appstore_id; + public string channel_product_id; + } + public class U8ProductListData + { + public List productList = new(); + } [StaticRoute(HttpServerLite.HttpMethod.POST, "/u8/pay/getAllProductList")] public static async Task getAllProductList(HttpContext ctx) { string resp = "{\"productList\":[]}"; - + U8ProductListData rsp = new(); + rsp.productList.Add(new U8ProductInfo() + { + appstore_id="0", + app_id="1", + channel_id="1", + channel_product_id="1", + desc="Test", + name="Test", + price=10, + type=0, + product_id="1", + store_id=1, + world_id=0, + + }); + resp = JsonConvert.SerializeObject(rsp); ctx.Response.StatusCode = 200; ctx.Response.ContentLength = resp.Length; ctx.Response.ContentType = "application/json"; @@ -164,7 +200,6 @@ namespace Campofinale.Http } ctx.Response.StatusCode = 200; - //ctx.Response.ContentLength = resp.Length; ctx.Response.ContentType = "application/json"; await ctx.Response.SendAsync(resp); diff --git a/Campofinale/Http/SDK.cs b/Campofinale/Http/SDK.cs index c097c30..4c5690e 100644 --- a/Campofinale/Http/SDK.cs +++ b/Campofinale/Http/SDK.cs @@ -1,5 +1,9 @@ using Campofinale.Database; using HttpServerLite; +using Newtonsoft.Json; +using System.Diagnostics; +using System.Text; +using System.Text.Json; using static Campofinale.Game.Gacha.GachaManager; using static Campofinale.Http.Dispatch; @@ -20,7 +24,18 @@ namespace Campofinale.Http await ctx.Response.SendAsync(resp); } + [StaticRoute(HttpServerLite.HttpMethod.GET, "/user/pay/v1/query_app_order")] + public static async Task query_app_order(HttpContext ctx) + { + string requestBody = ctx.Request.DataAsString; + Console.WriteLine(requestBody); + string resp = "{\"data\":{\"paidApp\":true,\"hasMinorOrder\":false},\"msg\":\"OK\",\"status\":0,\"type\":\"A\"}"; + ctx.Response.StatusCode = 200; + ctx.Response.ContentType = "application/json"; + await ctx.Response.SendAsync(resp); + + } [StaticRoute(HttpServerLite.HttpMethod.POST, "/user/auth/v1/token_by_phone_password")] public static async Task token_login_phone_cn(HttpContext ctx) { @@ -100,21 +115,69 @@ namespace Campofinale.Http await ctx.Response.SendAsync(resp); } - public struct GrantData + public class GrantReqData { public string token; + public string encodeNonce; + public string appCode; } - [StaticRoute(HttpServerLite.HttpMethod.POST, "/user/oauth2/v2/grant")] - public static async Task account_ugrant(HttpContext ctx) + public class GrantRsp + { + public Data data; + public string msg; + public int status; + public string type; + + public class Data + { + public string token; + public string code; + public string hgId; + public string uid; + public string encodeSign; + } + } + + + /*[StaticRoute(HttpServerLite.HttpMethod.POST, "/user/oauth2/v2/grant")] + public static async Task account_ugrant_old(HttpContext ctx) { string requestBody = ctx.Request.DataAsString; - GrantData grant = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); + GrantReqData grant = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); Account account = DatabaseManager.db.GetAccountByToken(grant.token); string resp = "{\"msg\": \"Error\", \"status\": 2, \"type\": \"A\"}"; if (account != null) { resp = "{\"data\": { \"uid\": \"" + account.id + "\", \"code\": \"" + DatabaseManager.db.GrantCode(account) + "\" }, \"msg\": \"OK\", \"status\": 0, \"type\": \"A\"}"; + if(grant.appCode== "2289f1dd2b923c53") + { + var url = "https://as.hypergryph.com/user/oauth2/v2/grant"; + + var b = new + { + appCode = "2289f1dd2b923c53", + encodeNonce = grant.encodeNonce, + token = "/kKCPAzTCkGOKft+X7sE7T0W", + type = 1 + }; + + var json = JsonSerializer.Serialize(b); + + var handler = new HttpClientHandler + { + UseProxy = false, + }; + + using var client = new HttpClient(handler); + var content = new StringContent(json, Encoding.UTF8, "application/json"); + + var response = await client.PostAsync(url, content); + var responseString = await response.Content.ReadAsStringAsync(); + Logger.Print(responseString); + GrantRspOff rsp = JsonSerializer.Deserialize(responseString); + resp = "{ \"data\": { \"token\": \"" + DatabaseManager.db.GrantCode(account) + "\", \"hgId\": \"" + account.id + "\", \"encodeSign\": \""+ rsp.data.encodeSign + "\" }, \"msg\": \"OK\", \"status\": 0, \"type\": \"A\"}"; + } } ctx.Response.StatusCode = 200; @@ -122,26 +185,70 @@ namespace Campofinale.Http ctx.Response.ContentType = "application/json"; await ctx.Response.SendAsync(resp); + }*/ + [StaticRoute(HttpServerLite.HttpMethod.POST, "/user/oauth2/v2/grant")] + public static async Task account_ugrant(HttpContext ctx) + { + string requestBody = ctx.Request.DataAsString; + + GrantReqData grant = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); + GrantRsp rsp = new GrantRsp(); + Account account = DatabaseManager.db.GetAccountByToken(grant.token); + rsp.type = "A"; + if (account != null) + { + rsp.msg = "OK"; + string grantedToken = DatabaseManager.db.GrantCode(account); + rsp.data = new() + { + hgId = account.id, + uid = account.id, + token = grantedToken, + code = grantedToken + }; + } + else + { + rsp.status = 2; + rsp.msg = "Error"; + + } + + ctx.Response.StatusCode = 200; + ctx.Response.ContentType = "application/json"; + await ctx.Response.SendAsync(JsonConvert.SerializeObject(rsp)); } [StaticRoute(HttpServerLite.HttpMethod.POST, "/u8/user/auth/v2/grant")] public static async Task account_grant(HttpContext ctx) { string requestBody = ctx.Request.DataAsString; - GrantData grant = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); + GrantReqData grant = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); + GrantRsp rsp = new GrantRsp(); Account account = DatabaseManager.db.GetAccountByTokenGrant(grant.token); - string resp = "{\"msg\": \"Error\", \"status\": 2, \"type\": \"A\"}"; + rsp.type = "A"; if (account != null) { - - resp = "{\"data\": { \"token\": \"" + account.token + "\", \"uid\": \"" + account.id + "\", \"code\": \"" + account.grantToken + "\" }, \"msg\": \"OK\", \"status\": 0, \"type\": \"A\"}"; + rsp.msg = "OK"; + rsp.data = new() + { + hgId = account.id, + uid = account.id, + token = account.token, + code = account.grantToken, + }; + } + else + { + rsp.status = 2; + rsp.msg = "Error"; } ctx.Response.StatusCode = 200; ctx.Response.ContentType = "application/json"; - await ctx.Response.SendAsync(resp); + await ctx.Response.SendAsync(JsonConvert.SerializeObject(rsp)); } public class TokenChannelData @@ -233,10 +340,8 @@ namespace Campofinale.Http { transactions.transactionList = new(); } - string resp = Newtonsoft.Json.JsonConvert.SerializeObject(transactions); - ctx.Response.StatusCode = 200; - await ctx.Response.SendAsync(resp); + await ctx.Response.SendAsync(JsonConvert.SerializeObject(transactions)); } [StaticRoute(HttpServerLite.HttpMethod.GET, "/gachahistory")] public static async Task gachahistory(HttpContext ctx) diff --git a/Campofinale/Program.cs b/Campofinale/Program.cs index 1b4bf3d..78e50ad 100644 --- a/Campofinale/Program.cs +++ b/Campofinale/Program.cs @@ -12,7 +12,7 @@ class Program { static void Main(string[] args) { - StartServer(args); + StartServer(args); //FakeClientTester(); } public static byte[] ConcatenateByteArrays(byte[] array1, byte[] array2) @@ -22,7 +22,7 @@ class Program private static void FakeClientTester() { // - string serverIp = "beyond-tyo.gryphline.com"; + string serverIp = "beyond-cn.hypergryph.com"; int serverPort = 30000; Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); @@ -33,7 +33,6 @@ class Program socket.Connect(new IPEndPoint(ipAddress, serverPort)); socket.Send(Packet.EncodePacket((int)CsMsgId.CsLogin,new CsLogin() { ClientVersion="0.5.5",Uid= "", Token= "", Env=EnvType.Prod,PlatformId=ClientPlatformType.Windows,Area=AreaType.Oversea,ClientResVersion="", LoginToken= "" }.ToByteArray())); - while (true) { byte[] buffer = new byte[3]; @@ -44,6 +43,7 @@ class Program byte headLength = Packet.GetByte(buffer, 0); ushort bodyLength = Packet.GetUInt16(buffer, 1); byte[] moreData = new byte[bodyLength + headLength]; + while (socket.Available < moreData.Length) {