using molilian.core; using dodohold.core; using Microsoft.AspNetCore.Mvc; using Org.BouncyCastle.Ocsp; using System.Text.Json; using System.Runtime.InteropServices; using System.Net; using System.Security.Cryptography; using Microsoft.AspNetCore.Authentication; using TencentCloud.Ecm.V20190719.Models; namespace molilian.api.Controllers { [ApiController] [Route("[controller]/[action]")] public class TkController : ControllerBase { protected IHttpContextAccessor _accessor; public TkController(IHttpContextAccessor accessor) { _accessor = accessor; } /// /// oppo调用 /// /// 正文 /// 渠道。tb/jd /// 分配的客户端账号 /// 11位时间戳 /// 签名 /// 客户的IP /// 客户的唯一ID /// [HttpPost] public async Task unionParse([FromBody] JsonElement form, [FromQuery] string a = "", [FromQuery] int t = 0, [FromQuery] string sign = "") { //正文 var content = form.Read("s", string.Empty); var channel = form.Read("c", string.Empty); var ip = form.Read("ip", string.Empty); var oaid = form.Read("oaid", string.Empty); //验证签名 if (string.IsNullOrEmpty(a) || string.IsNullOrEmpty(sign)) { return new APIResult(new { success = false, message = "验证错误" }, APIResultCodeEnum.Unauthorized); } DateTime time1 = t.Convert2Datetime(); if (time1 < DateTime.Now.AddMinutes(-10)) { return new APIResult(new { success = false, message = "验证错误2" }, APIResultCodeEnum.Unauthorized); } var account = ApiAccountCore.GetOne(a); if (account == null) { return new APIResult(new { success = false, message = "验证错误3" }, APIResultCodeEnum.Unauthorized); } string app_sign = $"{account.api_secret}@{t}".MD5(); if (sign != app_sign) { return new APIResult(new { success = false, message = "验证错误4" }, APIResultCodeEnum.Unauthorized); } return await UnionParseCore.UnionParseAsync(content, channel, ip, oaid); } [HttpPost] public async Task unsafeParse([FromBody] JsonElement form) { var content = form.Read("s", string.Empty); var channel = form.Read("c", string.Empty); var ip = form.Read("ip", string.Empty); var oaid = form.Read("oaid", string.Empty); // var count = form.Read("i", 1); //#if DEBUG // ActionResult result = null; // for (var i = 0; i < count; i++) // { // result = await UnionParseCore.UnionParseAsync(content, channel, ip, oaid); // } // if (result != null) return result; // return new APIResult(new // { // success = true, // message = "ok" // }); //#else return await UnionParseCore.UnionParseAsync(content, channel, ip, oaid); //#endif } /// /// 第三方调用 /// /// /// /// [HttpGet] public async Task parse(string s, string s2 = "", string ip = "", string oaid = "") { AlimamaPlus alimama = null; ip = AlimamaPlus.OppoDecode(ip); oaid = AlimamaPlus.OppoDecode(oaid); var result = AlimamaPlus.GetFormattedObject(s, ip, oaid); string body = ""; string content = s.UrlDecode(); string content2 = s2.UrlDecode(); string account_name = string.Empty; result.rawContent = content; result.rawContent2 = content2; try { if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out string reason)) { result.success = false; result.message = "放弃转链"; result.reason = reason; _ = TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } var account = TkPoolCore.GetOne(); if (account == null) { result.success = false; result.message = "放弃转链"; result.reason = "没有匹配账号"; _ = TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } account_name = account.name; alimama = new AlimamaPlus(account); if (alimama.ShouldIgnoreOtherAff(s2)) { result.success = false; result.message = "放弃转链"; result.reason = "其他推广链接"; _ = TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } result = await alimama.UnionParseAsync(content, result); } catch (Exception ex) { if (ex.Message.Contains("A task was canceled")) { result.success = false; result.message = "放弃转链"; result.reason = "请求超时"; } else { new LoggerLibrary("api_error", "parse") .Info(s, s2) .Info($"【taobao】{account_name}", body) .Info(ex.Message, ex.StackTrace) .Save(); NotifyCore.Notify(new NifyMessage { message = $"【转链接口异常】{account_name}\n{content}\n{content2}\n{body}\n\n{ex.Message}\n{ex.StackTrace}", priority = NifyMessagePriority.high, tags = ["red_circle"] }); result.success = false; result.message = "放弃转链"; result.reason = "转链接口异常"; } } _ = TkLogCore.LogAsync(result, alimama); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } [HttpGet] public ActionResult parse2(string s, string s2 = "", string ip = "", string oaid = "") { AlimamaPlus alimama = null; ip = AlimamaPlus.OppoDecode(ip); oaid = AlimamaPlus.OppoDecode(oaid); var result = AlimamaPlus.GetFormattedObject(s, ip, oaid); string body = ""; string content = s.UrlDecode(); string content2 = s2.UrlDecode(); string account_name = string.Empty; result.rawContent = content; result.rawContent2 = content2; try { if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out string reason)) { result.success = false; result.message = "放弃转链"; result.reason = reason; _ = TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } var account = TkPoolCore.GetOne(); if (account == null) { result.success = false; result.message = "放弃转链"; result.reason = "没有匹配账号"; _ = TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } account_name = account.name; alimama = new AlimamaPlus(account); if (alimama.ShouldIgnoreOtherAff(s2)) { result.success = false; result.message = "放弃转链"; result.reason = "其他推广链接"; _ = TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } alimama.UnionParse(content, ref result); //result.ip = ip; //result.oaid = oaid; } catch (Exception ex) { new LoggerLibrary("api_error", "parse") .Info(s, s2) .Info($"【taobao】{account_name}", body) .Info(ex.Message, ex.StackTrace) .Save(); NotifyCore.Notify(new NifyMessage { message = $"【转链接口异常】{account_name}\n{content}\n{content2}\n{body}\n\n{ex.Message}\n{ex.StackTrace}", priority = NifyMessagePriority.high, tags = ["red_circle"] }); result.success = false; result.message = "放弃转链"; result.reason = "转链接口异常"; } _ = TkLogCore.LogAsync(result, alimama); return new APIResult(new { result.success, result.message, result.content, result.couponAmount, result.taoToken, result.shortLinkurl, result.deeplink_url, }); } [HttpGet] public ActionResult jd_parse(string s, string s2 = "", string ip = "", string oaid = "") { var result = JdUnionPlus.GetFormattedObject(s, ip, oaid); string body = ""; string content = s.UrlDecode(); string content2 = s2.UrlDecode(); try { if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out string reason)) { result.success = false; result.message = "放弃转链"; result.reason = reason; result.rawContent = content; result.rawContent2 = content2; TkLogCore.LogAsync(result); return new APIResult(result); } var api = DataokeCore.GetOne(); if (api == null) { result.success = false; result.message = "放弃转链"; result.reason = "没有匹配账号"; result.rawContent = content; result.rawContent2 = content2; TkLogCore.LogAsync(result); return new APIResult(result); } var account = JdPoolCore.GetOne(); if (account == null) { result.success = false; result.message = "放弃转链"; result.reason = "没有匹配账号"; result.rawContent = content; result.rawContent2 = content2; TkLogCore.LogAsync(result); return new APIResult(result); } result = DataokeCore.JdParse(result, api, account, content); } catch (Exception ex) { new LoggerLibrary("api_error") .Info(s, s2) .Info("【jd】", body) .Info(ex.Message, ex.StackTrace) .Save(); NotifyCore.Notify(new NifyMessage { message = $"【转链接口异常】\n{content}\n{content2}\n{body}\n\n{ex.Message}\n{ex.StackTrace}", priority = NifyMessagePriority.high, tags = ["red_circle"] }); result.success = false; result.message = "放弃转链"; result.reason = "转链接口异常"; } result.rawContent = content; result.rawContent2 = content2; TkLogCore.LogAsync(result); return new APIResult(new { result.success, result.message, result.shortLinkurl, result.deeplink_url, }); } //[HttpGet] //public Task parse3(string s, string s2, string ip = "", string oaid = "") //{ // var result = AlimamaPlus.GetFormattedObject(s, ip, oaid); // string body = ""; // string content = s.UrlDecode(); // string content2 = s2.UrlDecode(); // try // { // if (AlimamaPlus.ShouldIgnoreRequest("", "")) // { // result.success = false; // result.message = "放弃转链"; // } // else // { // var account = VeapiPoolCore.GetOne(); // if (account == null) // { // result.success = false; // result.message = "内部错误(500)"; // } // else // { // var core = new VeapiPlus(account.name, account.key, account.sessionKey); // result = core.UnionParse(content); // } // } // } // catch (Exception ex) // { // NotifyCore.Notify(new NifyMessage // { // message = $"【转链接口异常】\n{body}", // priority = NifyMessagePriority.high, // tags = ["red_circle"] // }); // result.success = false; // result.message = "转链接口异常"; // } // _ = TkLogCore.Log(content, content2, result); // return Task.FromResult(new APIResult(result)); //} [HttpGet("{ignorePercentage}")] public ActionResult set_ignore(int ignorePercentage = 0) { TkConfigCore.Update(ignorePercentage); return new APIResult(new { success = true, message = "ok" }); } [HttpGet("{ignorePercentage}")] public ActionResult set_jd_ignore(int ignorePercentage = 0) { TkConfigCore.JdUpdate(ignorePercentage); return new APIResult(new { success = true, message = "ok" }); } [HttpGet] public ActionResult reload() { ApiAccountCore.Refresh(); ProxyNodesCore.Refresh(); DataokeCore.Refresh(); JdPoolCore.Refresh(); PangolinPoolCore.Refresh(); TkConfigCore.Refresh(); TkPoolCore.Refresh(); VeapiPoolCore.Refresh(); return new APIResult(new { success = true, message = "ok", }); } [HttpPost] public ActionResult updateCookies([FromBody] JsonElement form) { string cookie = form.Read("cookie", string.Empty); var user_agent = _accessor.HttpContext.Request.UserAgent(); TkPoolCore.UpdateCookies(cookie, user_agent); return new APIResult(new { success = true, message = "ok" }); } [HttpGet] public async Task dplist([FromQuery] string query = "", [FromQuery] string a = "", [FromQuery] int t = 0, [FromQuery] string sign = "") { query = ""; //验证签名 if (string.IsNullOrEmpty(a) || string.IsNullOrEmpty(sign)) { return new APIResult(new { success = false, message = "验证错误" }, APIResultCodeEnum.Unauthorized); } DateTime time1 = t.Convert2Datetime(); if (time1 < DateTime.Now.AddMinutes(-10)) { return new APIResult(new { success = false, message = "验证错误2" }, APIResultCodeEnum.Unauthorized); } var account = ApiAccountCore.GetOne(a); if (account == null) { return new APIResult(new { success = false, message = "验证错误3" }, APIResultCodeEnum.Unauthorized); } string app_sign = $"{account.api_secret}@{t}".MD5(); if (sign != app_sign) { return new APIResult(new { success = false, message = "验证错误4" }, APIResultCodeEnum.Unauthorized); } List list = []; Random rand = new Random(); if (rand.Next(0, 10) > 1) { list = [ new { url = "tbopen://m.taobao.com/tbopen/index.html?action=ali.open.nav&module=h5&h5Url=https%3A%2F%2Fs.click.taobao.com%2FgRtQClt&backURL=__back_url__", count = 1, time = DateTime.Now, }, new { url = "tbopen://m.taobao.com/tbopen/index.html?action=ali.open.nav&module=h5&h5Url=https%3A%2F%2Fs.click.taobao.com%2FDZLLYkt&backURL=__back_url__", count = 1, time = DateTime.Now, }, new { url = "tbopen://m.taobao.com/tbopen/index.html?action=ali.open.nav&module=h5&h5Url=https%3A%2F%2Fs.click.taobao.com%2FtLVLYkt&backURL=__back_url__", count = 1, time = DateTime.Now, }, ]; } return new APIResult(new { success = true, message = list.Count == 0 ? "none" : "ok", data = list, }); } } }