using dodohold.core; using System.Text.Json; namespace molilian.core { public partial class TaokeOpenCore { static string _test_base64String = string.Empty; public TkConfigDTO _config; private static string _end_point; static TaokeOpenCore() { _end_point = Environment.GetEnvironmentVariable("EndPoint"); } public TaokeOpenCore() { _config = TkConfigCore.Get(); } public async Task PromotionQueryAsync(string img, string oaid = "", string ip = "") { PromotionQueryDTO result = new() { end_point = _end_point, ip = ip, oaid = oaid, img = img }; if (string.IsNullOrEmpty(img)) { result.success = false; result.message = "调用失败"; result.reason = "无效图片"; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } try { var account = TkPoolCore.GetOne(TkPoolCore.TkAction.promotionQuery); if (account == null) { result.success = false; result.message = "调用失败"; result.reason = "没有匹配账号"; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } TaobaoOpenPlus taobao = new(account.appkey, account.appSecret, account.open_pid); var data = taobao.PromotionQueryRequest(img, oaid); if (data.IsError) { result.success = false; result.message = "调用失败"; result.reason = data.ErrMsg; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } if (!"0".Equals(data.Status)) { result.success = false; result.message = "调用失败"; result.reason = data.Desc; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } result.url = data.Url; oaid = data.Url.GetContentPart("oaid=", "&"); string cookies = string.Empty; int timeout = _config.similar_timeout; #if DEBUG timeout = 5000; #endif using var cts = new CancellationTokenSource(); cts.CancelAfter(timeout); var requestTask = Task.Run(async () => { (result.SimilarPromotion, cookies) = await taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.first, oaid, cookies, cts.Token); (result.PromotionImg, cookies) = await taobao.GetRecommendDataWithRetry(TaobaoOpenPlus.RecommendRequestType.ori, oaid, cookies, cts.Token); result.similarPromotion = result.SimilarPromotion.Convert2Json(); result.promotionImg = result.PromotionImg.Convert2Json(); return result; }, cts.Token); var delayTask = Task.Delay(timeout, cts.Token); var completedTask = await Task.WhenAny(requestTask, delayTask); if (completedTask == requestTask) { result = await requestTask; } else { //============================== 放弃转链-请求超时 ============================== cts.Cancel(); result.success = false; result.message = "调用失败"; result.reason = "请求超时"; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } //(result.SimilarPromotion, cookies) = await taobao.GetRecommendData(TaobaoOpenPlus.RecommendRequestType.first, oaid, cookies); //(result.PromotionImg, cookies) = await taobao.GetRecommendData(TaobaoOpenPlus.RecommendRequestType.ori, oaid, cookies); //result.similarPromotion = result.SimilarPromotion.Convert2Json(); //result.promotionImg = result.PromotionImg.Convert2Json(); result.success = true; result.message = "调用成功"; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, similarPromotion = result.SimilarPromotion, promotionImg = result.PromotionImg, result.url, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } catch (Exception ex) { result.success = false; result.message = "调用失败"; result.reason = ex.Message; _ = TkLogCore.PromotionImgLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, }, APIResultCodeEnum.OK, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } //try //{ // var account = TkPoolCore.GetOne(TkPoolCore.TkAction.promotionQuery); // if (account == null) // { // result.success = false; // result.message = "放弃转链"; // result.reason = "没有匹配账号"; // //_ = TkLogCore.CouponLogAsync(result); // return new APIResult(new // { // result.success, // message = "没有优惠券", // channel = result.channel.ToString(), // }); // } // result.accountId = account.id; // result.accountName = account.name; // alimama = new AlimamaPlus(account); // result = await alimama.PromotionQueryAsync(result); // if (result.success && result.couponAmount == 0) // { // result.success = false; // result.message = "没有优惠券"; // result.reason = "没有优惠券"; // } //} //catch (Exception ex) //{ // if (ex.Message.Contains("was canceled")) // { // result.success = false; // result.message = "放弃转链"; // result.reason = "请求超时"; // } // else // { // _ = new LoggerLibrary("unionCoupon", "tb_error") // .Info(ip, oaid) // .Info(content) // .Info(ex.Message, ex.StackTrace) // .SaveAsync(); // NotifyCore.Notify(new NifyMessage // { // message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}", // priority = NifyMessagePriority.high, // tags = ["red_circle"] // }); // result.success = false; // result.message = "放弃转链"; // result.reason = "转链接口异常"; // } //} //_ = TkLogCore.CouponLogAsync(result, alimama); //if (!result.success) //{ // return new APIResult(new // { // result.success, // message = "没有优惠券", // channel = result?.channel.ToString(), // }); //} //int couponAmount = (int)result.couponAmount * 100; //return new APIResult(new //{ // result.success, // result.message, // channel = result?.channel.ToString(), // result?.itemId, // result?.deeplink_url, // result?.pic, // result?.couponEffectiveStartTime, // result?.couponEffectiveEndTime, //}); } } }