UnionCouponCore.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc.Controllers;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using dodohold.core;
  9. using Spire.Pdf.Exporting.XPS.Schema;
  10. using System.Xml.Linq;
  11. using System.Net;
  12. using TencentCloud.Mrs.V20200910.Models;
  13. using Microsoft.AspNetCore.Mvc;
  14. using Microsoft.AspNetCore.Authentication;
  15. using Spire.Pdf.Graphics;
  16. using Google.Protobuf.WellKnownTypes;
  17. using System.Threading.Channels;
  18. using TencentCloud.Weilingwith.V20230427.Models;
  19. namespace molilian.core
  20. {
  21. public partial class UnionCouponCore
  22. {
  23. public static async Task<ActionResult> UnionCouponAsync(string content, string channel, string ip, string oaid)
  24. {
  25. return channel switch
  26. {
  27. "jd" => await JdCouponAsync(content, ip, oaid),
  28. _ => await TaobaoCouponAsync(content, ip, oaid),
  29. };
  30. }
  31. public static async Task<APIResult> TaobaoCouponAsync(string content, string ip = "", string oaid = "")
  32. {
  33. AlimamaPlus alimama = null;
  34. content = content.UrlDecode();
  35. UnionCouponDTO result = new()
  36. {
  37. channel = TkChannelEnum.tb,
  38. rawContent = content
  39. };
  40. try
  41. {
  42. if (AlimamaPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  43. {
  44. result.success = false;
  45. result.message = "放弃转链";
  46. result.reason = reason;
  47. _ = TkLogCore.CouponLogAsync(result);
  48. return new APIResult(new
  49. {
  50. result.success,
  51. result.message,
  52. channel = result.channel.ToString(),
  53. });
  54. }
  55. var account = TkPoolCore.GetOne(TkPoolCore.TkAction.coupon);
  56. if (account == null)
  57. {
  58. result.success = false;
  59. result.message = "放弃转链";
  60. result.reason = "没有匹配账号";
  61. _ = TkLogCore.CouponLogAsync(result);
  62. return new APIResult(new
  63. {
  64. result.success,
  65. result.message,
  66. channel = result.channel.ToString(),
  67. });
  68. }
  69. result.accountId = account.id;
  70. result.accountName = account.name;
  71. alimama = new AlimamaPlus(account);
  72. result = await alimama.UnionCoupon2Async(content, result);
  73. if (result.success && result.couponAmount == 0)
  74. {
  75. result.success = false;
  76. result.message = "放弃转链";
  77. result.reason = "没有优惠券";
  78. }
  79. }
  80. catch (Exception ex)
  81. {
  82. if (ex.Message.Contains("A task was canceled"))
  83. {
  84. result.success = false;
  85. result.message = "放弃转链";
  86. result.reason = "请求超时";
  87. }
  88. else
  89. {
  90. new LoggerLibrary("unionCoupon", "tb_error")
  91. .Info(ip, oaid)
  92. .Info(content)
  93. .Info(ex.Message, ex.StackTrace)
  94. .Save();
  95. NotifyCore.Notify(new NifyMessage
  96. {
  97. message = $"【转链异常TB】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  98. priority = NifyMessagePriority.high,
  99. tags = ["red_circle"]
  100. });
  101. result.success = false;
  102. result.message = "放弃转链";
  103. result.reason = "转链接口异常";
  104. }
  105. }
  106. _ = TkLogCore.CouponLogAsync(result, alimama);
  107. if (!result.success)
  108. {
  109. return new APIResult(new
  110. {
  111. result.success,
  112. result.message,
  113. channel = result?.channel.ToString(),
  114. });
  115. }
  116. return new APIResult(new
  117. {
  118. result.success,
  119. result.message,
  120. channel = result?.channel.ToString(),
  121. result?.itemId,
  122. result?.couponAmount,
  123. result?.deeplink_url,
  124. result?.pic,
  125. result?.couponEffectiveStartTime,
  126. result?.couponEffectiveEndTime,
  127. });
  128. }
  129. public static async Task<APIResult> JdCouponAsync(string content, string ip, string oaid)
  130. {
  131. content = content.UrlDecode();
  132. UnionCouponDTO result = new()
  133. {
  134. channel = TkChannelEnum.jd,
  135. rawContent = content
  136. };
  137. try
  138. {
  139. if (JdUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  140. {
  141. result.success = false;
  142. result.message = "放弃转链";
  143. result.reason = reason;
  144. _ = TkLogCore.CouponLogAsync(result);
  145. return new APIResult(result);
  146. }
  147. var api = DataokeCore.GetOne();
  148. if (api == null)
  149. {
  150. result.success = false;
  151. result.message = "放弃转链";
  152. result.reason = "没有匹配账号";
  153. result.rawContent = content;
  154. _ = TkLogCore.CouponLogAsync(result);
  155. return new APIResult(result);
  156. }
  157. var account = JdPoolCore.GetOne();
  158. if (account == null)
  159. {
  160. result.success = false;
  161. result.message = "放弃转链";
  162. result.reason = "没有匹配账号";
  163. _ = TkLogCore.CouponLogAsync(result);
  164. return new APIResult(result);
  165. }
  166. result = await JdUnionPlus.JdCouponAsync(account, api, content, result);
  167. if (result.success && result.couponAmount == 0)
  168. {
  169. result.success = false;
  170. result.message = "放弃转链";
  171. result.reason = "没有优惠券";
  172. }
  173. }
  174. catch (Exception ex)
  175. {
  176. if (ex.Message.Contains("A task was canceled"))
  177. {
  178. result.success = false;
  179. result.message = "放弃转链";
  180. result.reason = "请求超时";
  181. }
  182. else
  183. {
  184. new LoggerLibrary("unionCoupon", "jd_error")
  185. .Info(ip, oaid)
  186. .Info(content)
  187. .Info(ex.Message, ex.StackTrace)
  188. .Save();
  189. NotifyCore.Notify(new NifyMessage
  190. {
  191. message = $"【转链异常JD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  192. priority = NifyMessagePriority.high,
  193. tags = ["red_circle"]
  194. });
  195. result.success = false;
  196. result.message = "内部错误";
  197. result.reason = "转链接口异常";
  198. }
  199. }
  200. _ = TkLogCore.CouponLogAsync(result);
  201. if (!result.success)
  202. {
  203. return new APIResult(new
  204. {
  205. result.success,
  206. result.message,
  207. channel = result?.channel.ToString(),
  208. });
  209. }
  210. return new APIResult(new
  211. {
  212. result.success,
  213. result.message,
  214. channel = result?.channel.ToString(),
  215. result?.itemId,
  216. result?.couponAmount,
  217. result?.deeplink_url,
  218. result?.pic,
  219. result?.couponEffectiveStartTime,
  220. result?.couponEffectiveEndTime,
  221. });
  222. }
  223. }
  224. }