.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];
     }
 }
相关推荐
从心归零几秒前
sshj使用代理连接服务器
java·服务器·sshj
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius2 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
七夜zippoe2 小时前
分布式系统实战经验
java·分布式
是梦终空2 小时前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
落落落sss2 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸2 小时前
flink doris批量sink
java·前端·flink
Monodye3 小时前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光3 小时前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
无名指的等待7124 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端