using Aop.Api.Request; using Aop.Api.Response; using BaseModel.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WayneCloud.PaymentProcessors.Alipay.FromSDK; namespace Aop.Api.Business { public class Refund { private static volatile IAopClient client; private static volatile Dictionary clients = new Dictionary(); public static IAopClient Clients(AliPayConfig config) { if (config != null) { if (client == null) { client = new DefaultAopClient(config.serverUrl, config.appId, config.merchant_private_key, "json", config.version, config.sign_type, config.alipay_public_key, config.charset); } return client; } if (clients.ContainsKey(config) != null) { var newClient = new DefaultAopClient(config.serverUrl, config.appId, config.merchant_private_key, "json", config.version, config.sign_type, config.alipay_public_key, config.charset); clients.Add(config, newClient); return newClient; } else { return clients[config]; } } public static async Task Run(ElectronicOrderModel order) { //set the default trade_status to PAYERROR order.TradeStatus = TradeStatus.PAYERROR; string out_trade_no = order.BillNumber; string refund_amount = order.NetAmount.ToString(); string out_request_no = out_trade_no + DateTime.Now.ToString(); StringBuilder sb = new StringBuilder(); sb.Append("{\"out_trade_no\":\"" + out_trade_no + "\","); sb.Append("\"refund_amount\":\"" + refund_amount + "\","); sb.Append("\"out_request_no\":\"" + out_request_no + "\","); sb.Append("\"operator_id\":\"" + (order.OperatorId ?? "") + "\",\"store_id\":\"" + order.SiteId + "\",\"terminal_id\":\"" + (order.TerminalId ?? "") + "\"}"); var refundResponse = await RequestRefund(sb.ToString(), (AliPayConfig)order.Config); //支付成功的情形 if (refundResponse != null && refundResponse.Code == ResultCode.SUCCESS) { order.TradeStatus = TradeStatus.SUCCESS; } return refundResponse; } private static async Task RequestRefund(string biz_content, AliPayConfig config) { AlipayTradeRefundRequest refundRequst = new AlipayTradeRefundRequest(); refundRequst.BizContent = biz_content; AlipayTradeRefundResponse refundResponse = await Clients(config).Execute(refundRequst); return refundResponse; } } }