UnionCouponCore.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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. 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. 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. .SaveAsync();
  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. message = "没有优惠券",
  113. channel = result?.channel.ToString(),
  114. });
  115. }
  116. int couponAmount = (int)result.couponAmount * 100;
  117. return new APIResult(new
  118. {
  119. result.success,
  120. result.message,
  121. channel = result?.channel.ToString(),
  122. result?.itemId,
  123. couponAmount,
  124. result?.deeplink_url,
  125. result?.pic,
  126. result?.couponEffectiveStartTime,
  127. result?.couponEffectiveEndTime,
  128. });
  129. }
  130. public static async Task<APIResult> JdCouponAsync(string content, string ip, string oaid)
  131. {
  132. content = content.UrlDecode();
  133. UnionCouponDTO result = new()
  134. {
  135. channel = TkChannelEnum.jd,
  136. rawContent = content
  137. };
  138. try
  139. {
  140. if (JdUnionPlus.ShouldIgnoreRequest(ip, oaid, out string reason))
  141. {
  142. result.success = false;
  143. result.message = "放弃转链";
  144. result.reason = reason;
  145. _ = TkLogCore.CouponLogAsync(result);
  146. return new APIResult(new
  147. {
  148. result.success,
  149. message = "没有优惠券",
  150. channel = result.channel.ToString(),
  151. });
  152. }
  153. var api = DataokeCore.GetOne();
  154. if (api == null)
  155. {
  156. result.success = false;
  157. result.message = "放弃转链";
  158. result.reason = "没有匹配账号";
  159. result.rawContent = content;
  160. _ = TkLogCore.CouponLogAsync(result);
  161. return new APIResult(new
  162. {
  163. result.success,
  164. message = "没有优惠券",
  165. channel = result.channel.ToString(),
  166. });
  167. }
  168. var account = JdPoolCore.GetOne();
  169. if (account == null)
  170. {
  171. result.success = false;
  172. result.message = "放弃转链";
  173. result.reason = "没有匹配账号";
  174. _ = TkLogCore.CouponLogAsync(result);
  175. return new APIResult(new
  176. {
  177. result.success,
  178. message = "没有优惠券",
  179. channel = result.channel.ToString(),
  180. });
  181. }
  182. result = await JdUnionPlus.JdCouponAsync(account, api, content, result);
  183. if (result.success && result.couponAmount == 0)
  184. {
  185. result.success = false;
  186. result.message = "没有优惠券";
  187. result.reason = "没有优惠券";
  188. }
  189. }
  190. catch (Exception ex)
  191. {
  192. if (ex.Message.Contains("A task was canceled"))
  193. {
  194. result.success = false;
  195. result.message = "放弃转链";
  196. result.reason = "请求超时";
  197. }
  198. else
  199. {
  200. _ = new LoggerLibrary("unionCoupon", "jd_error")
  201. .Info(ip, oaid)
  202. .Info(content)
  203. .Info(ex.Message, ex.StackTrace)
  204. .SaveAsync();
  205. NotifyCore.Notify(new NifyMessage
  206. {
  207. message = $"【转链异常JD】\n{content}\n\n{ex.Message}\n{ex.StackTrace}",
  208. priority = NifyMessagePriority.high,
  209. tags = ["red_circle"]
  210. });
  211. result.success = false;
  212. result.message = "内部错误";
  213. result.reason = "转链接口异常";
  214. }
  215. }
  216. _ = TkLogCore.CouponLogAsync(result);
  217. if (!result.success)
  218. {
  219. return new APIResult(new
  220. {
  221. result.success,
  222. message = "没有优惠券",
  223. channel = result?.channel.ToString(),
  224. });
  225. }
  226. int couponAmount = (int)(result.couponAmount * 100);
  227. return new APIResult(new
  228. {
  229. result.success,
  230. result.message,
  231. channel = result?.channel.ToString(),
  232. result?.itemId,
  233. couponAmount,
  234. result?.deeplink_url,
  235. result?.pic,
  236. result?.couponEffectiveStartTime,
  237. result?.couponEffectiveEndTime,
  238. });
  239. }
  240. }
  241. }