OrderQuery.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Collections.Generic;
  2. using System.Text;
  3. using System.Threading.Tasks;
  4. using Aop.Api.Request;
  5. using Aop.Api.Response;
  6. using BaseModel.Models;
  7. using WayneCloud.PaymentProcessors.Alipay.FromSDK;
  8. namespace Aop.Api.Business
  9. {
  10. public class OrderQuery
  11. {
  12. private static volatile IAopClient client;
  13. private static volatile Dictionary<AliPayConfig, IAopClient> clients = new Dictionary<AliPayConfig, IAopClient>();
  14. public static IAopClient Clients(AliPayConfig config)
  15. {
  16. if (config != null)
  17. {
  18. if (client == null)
  19. {
  20. client = new DefaultAopClient(config.serverUrl,
  21. config.appId,
  22. config.merchant_private_key,
  23. "json",
  24. config.version,
  25. config.sign_type,
  26. config.alipay_public_key,
  27. config.charset);
  28. }
  29. return client;
  30. }
  31. if (clients.ContainsKey(config) != null)
  32. {
  33. var newClient = new DefaultAopClient(config.serverUrl,
  34. config.appId,
  35. config.merchant_private_key,
  36. "json",
  37. config.version,
  38. config.sign_type,
  39. config.alipay_public_key,
  40. config.charset);
  41. clients.Add(config, newClient);
  42. return newClient;
  43. }
  44. else
  45. {
  46. return clients[config];
  47. }
  48. }
  49. public static async Task<AopResponse> Run(ElectronicOrderModel order)
  50. {
  51. StringBuilder sb = new StringBuilder();
  52. sb.Append("{\"out_trade_no\":\"" + order.BillNumber + "\"}");
  53. var payRequst = new AlipayTradeQueryRequest {BizContent = sb.ToString()};
  54. AlipayTradeQueryResponse queryResponse = await Clients((AliPayConfig)order.Config).Execute(payRequst);
  55. if (string.Compare(queryResponse.Code, ResultCode.SUCCESS, false) == 0)
  56. {
  57. if (queryResponse.TradeStatus == "TRADE_FINISHED"
  58. || queryResponse.TradeStatus == "TRADE_SUCCESS")
  59. {
  60. order.TradeStatus = TradeStatus.SUCCESS;
  61. }
  62. else if (queryResponse.TradeStatus == "TRADE_CLOSED")
  63. {
  64. order.TradeStatus = TradeStatus.CLOSED;
  65. }
  66. }
  67. return queryResponse;
  68. }
  69. }
  70. }