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;
using COSXML.Network;
using System.Linq;
using static dodohold.core.ZTOExpress.CreateOrderArgs;
using MySqlX.XDevAPI;
using TencentCloud.Ame.V20190916.Models;
using YunhuiKit;
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);
var clickId = form.Read("clickId", string.Empty);
var commerceType = form.Read("commerceType", 0);
var riskStrategy = form.Read("riskStrategy", 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 = await ApiAccountCore.GetOneAsync(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, commerceType, ip, oaid, riskStrategy, 0, clickId);
}
[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 clickId = form.Read("clickId", string.Empty);
int accountid = form.Read("aid", 0);
var commerceType = form.Read("commerceType", 0);
var riskStrategy = form.Read("riskStrategy", string.Empty);
#if DEBUG
//ip = "127.0.0.1";
//oaid = "test-oaid";
#endif
return await UnionParseCore.UnionParseAsync(content, channel, commerceType, ip, oaid, riskStrategy, accountid, clickId);
}
[HttpPost]
public async Task unsafeBatchParse([FromBody] JsonElement form)
{
var content = form.PathReadArray("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 clickId = form.Read("clickId", string.Empty);
int accountid = form.Read("aid", 0);
int count = form.Read("count", 0);
var commerceType = form.Read("commerceType", 0);
//入参参数。brw-浏览器,qapp-快应用
var riskStrategy = form.Read("riskStrategy", string.Empty);
#if DEBUG
//ip = "127.0.0.1";
//oaid = "test-oaid";
#endif
for (int i = 0; i < count; i++)
{
_ = await UnionParseCore.UnionParseAsync(content[i], channel, commerceType, ip, oaid, riskStrategy, accountid, clickId);
}
return new APIResult(new { msg = "ok" });
}
[HttpPost]
public async Task unionCoupon([FromBody] JsonElement form, [FromQuery] string a = "", [FromQuery] int t = 0, [FromQuery] string sign = "")
{
//正文
var content = form.Read("s", string.Empty);
var dplink = form.Read("dp", string.Empty);
var channel = form.Read("c", string.Empty);
var ip = form.Read("ip", string.Empty);
var oaid = form.Read("oaid", string.Empty);
var clickId = form.Read("clickId", 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 = await ApiAccountCore.GetOneAsync(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 UnionCouponCore.UnionCouponAsync(content, dplink, channel, ip, oaid, clickId);
}
[HttpPost]
public async Task unsafeCoupon([FromBody] JsonElement form)
{
var content = form.Read("s", string.Empty);
var dplink = form.Read("dp", string.Empty);
var channel = form.Read("c", string.Empty);
var ip = form.Read("ip", string.Empty);
var oaid = form.Read("oaid", string.Empty);
var clickId = form.Read("clickId", string.Empty);
#if DEBUG
ip = "127.0.0.1";
oaid = "test-oaid";
#endif
return await UnionCouponCore.UnionCouponAsync(content, dplink, channel, ip, oaid, clickId);
}
[HttpGet]
public async Task 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, string.Empty, 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 = await JdPoolCore.GetOneAsync();
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)
.SaveAsync();
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.itemId,
result.itemName,
result.deeplink_url,
});
}
[HttpGet]
public async Task Reload()
{
await EndPointCore.NotifyReload();
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 = "")
{
var clientIp = _accessor.HttpContext.GetUserIp();
//验证签名
if (string.IsNullOrEmpty(a) || string.IsNullOrEmpty(sign))
{
_ = new LoggerLibrary("api", "dplist_error")
.Info($"{clientIp}\t{query}")
.Info($"{a}\t{sign}\t{t}")
.Info("验证错误")
.SaveAsync();
return new APIResult(new { success = false, message = "验证错误" }, APIResultCodeEnum.Unauthorized);
}
DateTime time1 = t.Convert2Datetime();
if (time1 < DateTime.Now.AddMinutes(-10))
{
_ = new LoggerLibrary("api", "dplist_error")
.Info($"{clientIp}\t{query}")
.Info($"{a}\t{sign}\t{t}")
.Info("验证错误2")
.SaveAsync();
return new APIResult(new { success = false, message = "验证错误2" }, APIResultCodeEnum.Unauthorized);
}
var account = await ApiAccountCore.GetOneAsync(a);
if (account == null)
{
_ = new LoggerLibrary("api", "dplist_error")
.Info($"{clientIp}\t{query}")
.Info($"{a}\t{sign}\t{t}")
.Info("验证错误3")
.SaveAsync();
return new APIResult(new { success = false, message = "验证错误3" }, APIResultCodeEnum.Unauthorized);
}
string app_sign = $"{account.api_secret}@{t}".MD5();
if (sign != app_sign)
{
_ = new LoggerLibrary("api", "dplist_error")
.Info($"{clientIp}\t{query}")
.Info($"{a}\t{sign}\t{t}")
.Info("验证错误4")
.SaveAsync();
return new APIResult(new { success = false, message = "验证错误4" }, APIResultCodeEnum.Unauthorized);
}
if (string.IsNullOrEmpty(query))
{
_ = new LoggerLibrary("api", "dplist_error")
.Info($"{clientIp}\t{query}")
.Info($"{a}\t{sign}\t{t}")
.Info("查询条件不能为空")
.SaveAsync();
return new APIResult(new { success = false, message = "查询条件不能为空" });
}
int[] report_account_ids = account.report_account_ids.TryToArray(',');
int[] report_exclude_account_ids = account.report_exclude_account_ids.TryToArray(',');
string filter = $"batchId=@query";
var account_list = await TkPoolCore.ListAsync();
List account_ids = [];
if (account_list.Any())
{
account_ids = account_list.Where(e => e.enable_fake_click).Select(e => e.id).ToList();
if (report_account_ids.Length > 0)
{
account_ids = account_ids.Intersect(report_account_ids).ToList();
}
if (report_exclude_account_ids.Length > 0)
{
account_ids = account_ids.Except(report_exclude_account_ids).ToList();
}
filter += $" AND accountId IN @account_ids";
}
string orderBy = "paid_time ASC";
var data = new DBContext.Table("tk_order_tracking")
.Where(filter, new { query, account_ids })
.Order(orderBy)
.Select();
//fake_click_link_type
List