AlipayController.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using Alipay.AopSdk.Core.Util;
  4. using GxPress.Common.AliPay;
  5. using GxPress.Common.WechatPay;
  6. using GxPress.Service.Interface.Order;
  7. using Microsoft.AspNetCore.Authorization;
  8. using Microsoft.AspNetCore.Http;
  9. using Microsoft.AspNetCore.Mvc;
  10. namespace GxPress.Api.WebControllers
  11. {
  12. [Route("api/web/alipay")]
  13. [ApiController]
  14. [Authorize]
  15. public class AlipayController : Controller
  16. {
  17. private readonly IOrderService orderService;
  18. private IHttpContextAccessor _contextAccessor;
  19. private HttpContext _context { get { return _contextAccessor.HttpContext; } }
  20. public AlipayController(IOrderService orderService, IHttpContextAccessor contextAccessor)
  21. {
  22. this.orderService = orderService;
  23. _contextAccessor = contextAccessor;
  24. }
  25. [HttpGet()]
  26. [AllowAnonymous]
  27. public string GetNativePayUrl()
  28. {
  29. var alipay = new PcPay();
  30. return alipay.PayRequest("637263608658642543_7", "汪峰讲故事", "0.01", "汪峰讲故事");
  31. }
  32. /// <summary>
  33. /// 回调地址
  34. /// </summary>
  35. [HttpGet("notify")]
  36. [AllowAnonymous]
  37. public async Task Callback()
  38. {
  39. Dictionary<string, string> sArray = GetRequestGet();
  40. if (sArray.Count != 0)
  41. {
  42. try
  43. {
  44. //校验数据的正确性
  45. bool flag = AlipaySignature.RSACheckV1(sArray, Config.AlipayPublicKey, Config.CharSet, Config.SignType, false);
  46. if (flag)
  47. {
  48. //Console.WriteLine($"同步验证通过,订单号:{sArray["out_trade_no"]}");
  49. if (await orderService.InsertAliPayOrderAsync(sArray))
  50. {
  51. var res = new WxPayData();
  52. res.SetValue("out_trade_no", sArray["out_trade_no"]);
  53. res.SetValue("attach", sArray["out_trade_no"]);
  54. res.SetValue("total_fee", sArray["total_amount"]);
  55. res.SetValue("transaction_id", sArray["trade_no"]);
  56. //创建订单
  57. if (await orderService.InsertWxOrderAsync(res))
  58. {
  59. _context.Response.StatusCode = 200;
  60. }
  61. }
  62. else
  63. {
  64. _context.Response.StatusCode = 500;
  65. }
  66. }
  67. else
  68. {
  69. // Console.WriteLine($"同步验证失败,订单号:{sArray["out_trade_no"]}");
  70. _context.Response.StatusCode = 500;
  71. }
  72. }
  73. catch (System.Exception)
  74. {
  75. _context.Response.StatusCode = 500;
  76. }
  77. }
  78. else
  79. {
  80. _context.Response.StatusCode = 500;
  81. }
  82. }
  83. private Dictionary<string, string> GetRequestPost()
  84. {
  85. Dictionary<string, string> sArray = new Dictionary<string, string>();
  86. ICollection<string> requestItem = Request.Form.Keys;
  87. foreach (var item in requestItem)
  88. {
  89. sArray.Add(item, Request.Form[item]);
  90. }
  91. return sArray;
  92. }
  93. private Dictionary<string, string> GetRequestGet()
  94. {
  95. Dictionary<string, string> sArray = new Dictionary<string, string>();
  96. ICollection<string> requestItem = Request.Query.Keys;
  97. foreach (var item in requestItem)
  98. {
  99. sArray.Add(item, Request.Query[item]);
  100. }
  101. return sArray;
  102. }
  103. }
  104. }