.net core 外观者设计模式 实现,多种支付选择

1,接口

csharp 复制代码
  /// <summary>
  /// Web页面支付
  /// </summary>
  public interface IWebPagePay
  {
      public WebPagePayResult CreatePay(string productName, string orderSn, string totalPrice);
  }

2,实现接口

实现阿里支付

csharp 复制代码
  public class AliPagePay : IWebPagePay
  {
      /// <summary>
      /// 创建支付
      /// </summary>
      /// <param name="productName"></param>
      /// <param name="orderSn"></param>
      /// <param name="totalPrice"></param>
      public WebPagePayResult CreatePay(string productName, string orderSn, string totalPrice)
      {}
      }

实现微信支付

csharp 复制代码
   public class WxNativePay : IWebPagePay
    {
        private readonly WxPayHttpClient _wxPayHttpClient;
        private const string nativeUrl = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";// 支付接口
        private const string mchid = ""; // 商户Id
        private const string certpath = "/Pays/WxPay/certs/apiclient_cert.p12"; // 商户证书路径
        private const string certSerialNo = " "; // 证书序列号

        public IVirtualFileProvider _virtualFileProvider { set; get; }

        public WxNativePay(WxPayHttpClient wxPayHttpClient)
        {
            _wxPayHttpClient = wxPayHttpClient;
        }

        /// <summary>
        /// 创建支付
        /// </summary>
        /// <param name="productName"></param>
        /// <param name="orderSn"></param>
        /// <param name="totalPrice"></param>
        public WebPagePayResult CreatePay(string productName, string orderSn, string totalPrice)
        {}
        }

3,注入ico

csharp 复制代码
  services.AddSingleton<IWebPagePay, AliPagePay>();// 支付宝封装类注册
  services.AddSingleton<IWebPagePay, WxNativePay>();// 微信支付封装

4.使用

使用 GetWebPagePay 根据pagetype 获取到具体的支付实例

csharp 复制代码
 /// <summary>
 /// 支付接口选择
 /// </summary>
 public class WebPagePayFactory
 {
     private readonly Dictionary<string, IWebPagePay> _webPagePays =null;

     public WebPagePayFactory(IEnumerable<IWebPagePay> webPagePays)
     {
         _webPagePays = webPagePays.ToDictionary(pay =>
         {
             return pay.GetType().Name; // AliPagePay  WxNativePay
         });
     }

     /// <summary>
     /// 获取WebPagePay支付
     /// </summary>
     /// <param name="pageType"></param>
     public IWebPagePay GetWebPagePay(string pageType)
     {
         if (string.IsNullOrEmpty(pageType))
         {
             return _webPagePays["WxNativePay"];
         }
         return _webPagePays[pageType];
     }
 }
相关推荐
EmbedLinX几秒前
嵌入式Linux C++常用设计模式
linux·c++·设计模式
PPPPickup7 分钟前
easymall---管理后端商品属性管理
java
人道领域11 分钟前
SSM框架从入门到入土(SpringFrameWork)
java·spring boot·tomcat
源力祁老师24 分钟前
深入解析 Odoo 中 default_get 方法的功能
java·服务器·前端
团子的二进制世界24 分钟前
Sentinel-服务保护(限流、熔断降级)
java·开发语言·sentinel·异常处理
NWU_白杨25 分钟前
多线程安全与通信问题
java
sheji341630 分钟前
【开题答辩全过程】以 工业车辆维修APP设计与实现为例,包含答辩的问题和答案
java
虫小宝37 分钟前
淘客系统的容灾演练与恢复:Java Chaos Monkey模拟节点故障下的服务降级与快速切换实践
java·开发语言
yxm263366908139 分钟前
【洛谷压缩技术续集题解】
java·开发语言·算法
键盘帽子40 分钟前
多线程情况下长连接中的session并发问题
java·开发语言·spring boot·spring·spring cloud