Refund.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using Aop.Api.Request;
  2. using Aop.Api.Response;
  3. using BaseModel.Models;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using WayneCloud.PaymentProcessors.Alipay.FromSDK;
  10. namespace Aop.Api.Business
  11. {
  12. public class Refund
  13. {
  14. private static volatile IAopClient client;
  15. private static volatile Dictionary<AliPayConfig, IAopClient> clients = new Dictionary<AliPayConfig, IAopClient>();
  16. public static IAopClient Clients(AliPayConfig config)
  17. {
  18. if (config != null)
  19. {
  20. if (client == null)
  21. {
  22. client = new DefaultAopClient(config.serverUrl,
  23. config.appId,
  24. config.merchant_private_key,
  25. "json",
  26. config.version,
  27. config.sign_type,
  28. config.alipay_public_key,
  29. config.charset);
  30. }
  31. return client;
  32. }
  33. if (clients.ContainsKey(config) != null)
  34. {
  35. var newClient = new DefaultAopClient(config.serverUrl,
  36. config.appId,
  37. config.merchant_private_key,
  38. "json",
  39. config.version,
  40. config.sign_type,
  41. config.alipay_public_key,
  42. config.charset);
  43. clients.Add(config, newClient);
  44. return newClient;
  45. }
  46. else
  47. {
  48. return clients[config];
  49. }
  50. }
  51. public static async Task<AopResponse> Run(ElectronicOrderModel order)
  52. {
  53. //set the default trade_status to PAYERROR
  54. order.TradeStatus = TradeStatus.PAYERROR;
  55. string out_trade_no = order.BillNumber;
  56. string refund_amount = order.NetAmount.ToString();
  57. string out_request_no = out_trade_no + DateTime.Now.ToString();
  58. StringBuilder sb = new StringBuilder();
  59. sb.Append("{\"out_trade_no\":\"" + out_trade_no + "\",");
  60. sb.Append("\"refund_amount\":\"" + refund_amount + "\",");
  61. sb.Append("\"out_request_no\":\"" + out_request_no + "\",");
  62. sb.Append("\"operator_id\":\"" + (order.OperatorId ?? "") + "\",\"store_id\":\"" + order.SiteId + "\",\"terminal_id\":\"" + (order.TerminalId ?? "") + "\"}");
  63. var refundResponse = await RequestRefund(sb.ToString(), (AliPayConfig)order.Config);
  64. //支付成功的情形
  65. if (refundResponse != null && refundResponse.Code == ResultCode.SUCCESS)
  66. {
  67. order.TradeStatus = TradeStatus.SUCCESS;
  68. }
  69. return refundResponse;
  70. }
  71. private static async Task<AlipayTradeRefundResponse> RequestRefund(string biz_content, AliPayConfig config)
  72. {
  73. AlipayTradeRefundRequest refundRequst = new AlipayTradeRefundRequest();
  74. refundRequst.BizContent = biz_content;
  75. AlipayTradeRefundResponse refundResponse = await Clients(config).Execute(refundRequst);
  76. return refundResponse;
  77. }
  78. }
  79. }