1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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<AliPayConfig, IAopClient> clients = new Dictionary<AliPayConfig, IAopClient>();
- 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<AopResponse> 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<AlipayTradeRefundResponse> RequestRefund(string biz_content, AliPayConfig config)
- {
- AlipayTradeRefundRequest refundRequst = new AlipayTradeRefundRequest();
- refundRequst.BizContent = biz_content;
- AlipayTradeRefundResponse refundResponse = await Clients(config).Execute(refundRequst);
- return refundResponse;
- }
- }
- }
|