.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];
     }
 }
相关推荐
karry_k10 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k10 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
SamDeepThinking14 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩17 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码19 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev20 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波1 天前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯1 天前
GoF设计模式——备忘录模式
java·后端·spring·设计模式