//using System; //using System.Threading.Tasks; //using System.Web; //using Com.Alipay.Domain; //using Com.Alipay.Business; //using Com.Alipay; //using Com.Alipay.Model; //using System.Collections.Generic; //using PaymentGatewaySharedLibs; //using TradeStatus = PaymentGatewaySharedLibs.TradeStatus; //namespace PaymentGateway.GatewayApp //{ // public class AlipayPaymentProcessor : IPaymentProcessor // { // private readonly NLog.Logger _logger = NLog.LogManager.GetLogger("Main"); // private static volatile Dictionary clients = new Dictionary(); // public static IAlipayTradeService Clients(AliPayConfig config) // { // if (!clients.ContainsKey(config)) // { // var newClient = F2FBiz.CreateClientInstance(config.serverUrl, // config.appId, // config.merchant_private_key, // config.version, // config.sign_type, // config.alipay_public_key, // config.charset); // clients.Add(config, newClient); // return newClient; // } // else // { // return clients[config]; // } // } // public async Task Process(ElectronicOrderModel order) // { // order.TradeStatus = TradeStatus.PAYERROR; // _logger.Info("Alipay is processing order " + order.BillNumber); // var config = (AliPayConfig)order.Config; // AlipayTradePayContentBuilder builder = BuildPayContent(order); // AlipayF2FPayResult payResult = Clients(config).tradePay(builder); // switch (payResult.Status) // { // case ResultEnum.SUCCESS: // order.TradeStatus = TradeStatus.SUCCESS; // break; // case ResultEnum.FAILED: // _logger.Info("Request failed with result: ResultEnum.FAILED"); // break; // case ResultEnum.UNKNOWN: // _logger.Info("Failed due to unknown reason, plesae check your network configuration and cable connection, " + // "then retry with a new order number"); // break; // } // _logger.Info("The final Alipay response is :\r\n" + HttpUtility.UrlDecode(payResult.response?.Body)); // return new GenericProcessResponse() // { // AopResponse = payResult.response // }; // } // public async Task UnifiedOrder(ElectronicOrderModel order) // { // order.TradeStatus = TradeStatus.PAYERROR; // _logger.Info("UnifiedOrder is processing order " + order.BillNumber); // var config = (AliPayConfig)order.Config; // AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(order); // AlipayF2FPrecreateResult payResult = Clients(config).tradePrecreate(builder); // switch (payResult.Status) // { // case ResultEnum.SUCCESS: // order.TradeStatus = TradeStatus.SUCCESS; // break; // case ResultEnum.FAILED: // _logger.Info("Request failed with result: ResultEnum.FAILED"); // break; // case ResultEnum.UNKNOWN: // _logger.Info("Failed due to unknown reason, plesae check your network configuration and cable connection, " + // "then retry with a new order number"); // break; // } // _logger.Info("The final Alipay response is :\r\n" + HttpUtility.UrlDecode(payResult.response?.Body)); // return new GenericProcessResponse() // { // AopResponse = payResult.response // }; // } // public async Task Return(ElectronicOrderModel order) // { // _logger.Info("Alipay is processing refund, BillNumber = " + order.BillNumber); // AlipayTradeRefundContentBuilder builder = BuildRefundContent(order); // AlipayF2FRefundResult refundResult = Clients((AliPayConfig)order.Config).tradeRefund(builder); // //请在这里加上商户的业务逻辑程序代码 // switch (refundResult.Status) // { // case ResultEnum.SUCCESS: // order.TradeStatus = TradeStatus.SUCCESS; // break; // case ResultEnum.FAILED: // _logger.Info("Request failed with result: ResultEnum.FAILED"); // break; // case ResultEnum.UNKNOWN: // if (refundResult.response == null) // { // _logger.Info("Failed due to unknown reason, plesae check your network configuration and cable connection, " + // "then retry with a new order number"); // } // else // { // _logger.Info("System error, please try refunding mannualy"); // } // break; // } // _logger.Info("The final Alipay refund response is :\r\n" + refundResult.response?.Body); // return new GenericProcessResponse() // { // AopResponse = refundResult.response // }; // } // public async Task Query(ElectronicOrderModel order) // { // return await Query(order, 1, 2000); // } // public async Task Query(ElectronicOrderModel order, int count, int interval) // { // order.TradeStatus = TradeStatus.PAYERROR; // _logger.Info("Ali Query is processing order: " + order.BillNumber); // //商户订单号 // string out_trade_no = order.BillNumber; // //商户网站订单系统中唯一订单号,必填 // var queryResult = Clients((AliPayConfig)order.Config).tradeLoopQuery(out_trade_no, count, interval); // if (queryResult.TradeStatus == "TRADE_FINISHED" || // queryResult.TradeStatus == "TRADE_SUCCESS") // { // order.TradeStatus = TradeStatus.SUCCESS; // } // else // { // _logger.Info("Failed due to unknown reason, plesae check your network configuration and cable connection, " + // "then retry with a new order number"); // } // _logger.Info("Ali Query process complete, result : \r\n" + queryResult != null ? queryResult.Body : ""); // return new GenericProcessResponse() // { // AopResponse = queryResult // }; // } // public async Task Cancel(ElectronicOrderModel cancelOrder) // { // _logger.Info("Ali CodePay failure, reverse order " + cancelOrder.BillNumber); // return new GenericProcessResponse(); // } // /// // /// 构造支付请求数据 // /// // /// 请求数据集 // private AlipayTradePayContentBuilder BuildPayContent(ElectronicOrderModel order) // { // //线上联调时,请输入真实的外部订单号。 // string out_trade_no = order.BillNumber; // var config = (AliPayConfig)order.Config; // //扫码枪扫描到的用户手机钱包中的付款条码 // AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); // //收款账号 // builder.seller_id = config.pid; // //订单编号 // builder.out_trade_no = out_trade_no; // //支付场景,无需修改 // builder.scene = "bar_code"; // //支付授权码,付款码 // builder.auth_code = order.AuthCode.Trim(); // //订单总金额 // builder.total_amount = order.NetAmount.ToString(); // //参与优惠计算的金额 // //builder.discountable_amount = ""; // //不参与优惠计算的金额 // //builder.undiscountable_amount = ""; // //订单名称 // builder.subject = order.Title; // //自定义超时时间 // builder.timeout_express = "30m"; // //订单描述 // builder.body = ""; // //门店编号,很重要的参数,可以用作之后的营销 // builder.store_id = order.SiteId; // //操作员编号,很重要的参数,可以用作之后的营销 // builder.operator_id = order.OperatorId; // //传入商品信息详情 // List gList = new List(); // order.FuelOrderDetails.ForEach(i => // { // GoodsInfo goods = new GoodsInfo(); // goods.goods_id = i.FuelProductId; // goods.goods_name = i.FuelProductName; // goods.price = i.Amount.ToString(); // goods.quantity = i.Qualtity.ToString(); // gList.Add(goods); // }); // builder.goods_detail = gList; // //系统商接入可以填此参数用作返佣 // //ExtendParams exParam = new ExtendParams(); // //exParam.sysServiceProviderId = "20880000000000"; // //builder.extendParams = exParam; // return builder; // } // /// // /// 构造支付请求数据 // /// // /// 请求数据集 // private AlipayTradePrecreateContentBuilder BuildPrecreateContent(ElectronicOrderModel order) // { // //线上联调时,请输入真实的外部订单号。 // string out_trade_no = order.BillNumber; // var config = (AliPayConfig)order.Config; // //扫码枪扫描到的用户手机钱包中的付款条码 // var builder = new AlipayTradePrecreateContentBuilder(); // //收款账号 // builder.seller_id = config.pid; // //订单编号 // builder.out_trade_no = out_trade_no; // //订单总金额 // builder.total_amount = order.NetAmount.ToString(); // //参与优惠计算的金额 // //builder.discountable_amount = ""; // //不参与优惠计算的金额 // //builder.undiscountable_amount = ""; // //订单名称 // builder.subject = order.Title; // //自定义超时时间 // builder.timeout_express = "30m"; // //订单描述 // builder.body = ""; // //门店编号,很重要的参数,可以用作之后的营销 // builder.store_id = order.SiteId; // //操作员编号,很重要的参数,可以用作之后的营销 // builder.operator_id = order.OperatorId; // //传入商品信息详情 // List gList = new List(); // order.FuelOrderDetails.ForEach(i => // { // GoodsInfo goods = new GoodsInfo(); // goods.goods_id = i.FuelProductId; // goods.goods_name = i.FuelProductName; // goods.price = i.Amount.ToString(); // goods.quantity = i.Qualtity.ToString(); // gList.Add(goods); // }); // builder.goods_detail = gList; // //系统商接入可以填此参数用作返佣 // //ExtendParams exParam = new ExtendParams(); // //exParam.sysServiceProviderId = "20880000000000"; // //builder.extendParams = exParam; // return builder; // } // /// // /// 构造退款请求数据 // /// // /// 请求数据集 // private AlipayTradeRefundContentBuilder BuildRefundContent(ElectronicOrderModel order) // { // AlipayTradeRefundContentBuilder builder = new AlipayTradeRefundContentBuilder(); // //支付宝交易号与商户网站订单号不能同时为空 // builder.out_trade_no = order.BillNumber; // //退款请求单号保持唯一性。 // builder.out_request_no = order.BillNumber + DateTime.Now.ToString(); // //退款金额 // builder.refund_amount = order.NetAmount.ToString(); // builder.refund_reason = "refund from POS"; // return builder; // } // } //}