.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];
     }
 }
相关推荐
佳哥的技术分享7 分钟前
Function<T, R> 中 apply,compose, andThen 方法总结
java·学习·r语言
wangmengxxw10 分钟前
SpringAI-结构化输出API
java·人工智能·springai
0和1的舞者12 分钟前
基于Spring的论坛系统-前置知识
java·后端·spring·系统·开发·知识
咕噜企业分发小米12 分钟前
腾讯云和火山引擎在多云管理工具上如何实现成本优化?
java·腾讯云·火山引擎
不平衡的叉叉树16 分钟前
从JDK 1.8到JDK 21:实用新特性
java
Yu_Lijing17 分钟前
基于C++的《Head First设计模式》笔记——状态模式
c++·笔记·设计模式
鱼跃鹰飞20 分钟前
Leetcode1027:最长等差数列
java·数据结构·算法
2301_7973122635 分钟前
学习Java42天
java·开发语言·学习
chilavert31838 分钟前
技术演进中的开发沉思-325 JVM:java体系技术全貌(下)
java·开发语言·jvm
chilavert31841 分钟前
技术演进中的开发沉思-324 JVM:java技术体系全貌(上)
java·开发语言