.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 分钟前
MySQL中的约束
android·java·数据库·spring boot·mysql
wxin_VXbishe11 分钟前
springboot新能源车充电站管理系统小程序-计算机毕业设计源码29213
java·c++·spring boot·python·spring·django·php
程序员陆通12 分钟前
月烧 400 刀到不到 20 刀:我是怎么把 OpenClaw 的 Token 账单砍掉 95% 的
java·前端·数据库
代码漫谈1 小时前
一文学习 SpringBoot 的 application.yml 配置,基于 Spring Boot 3.2.x
java·spring boot·spring·配置文件
SamDeepThinking1 小时前
程序员如何接受工作内容毫无意义?
java·后端·程序员
三翼鸟数字化技术团队1 小时前
基于Redis ZSet实现分布式优先级队列的技术实践
java·redis
无所事事O_o1 小时前
加密过程及原理浅析
java·加密
2301_771717212 小时前
最近在刷牛客:使用Spring AOP实现性能监控时
java·后端·spring
华清远见成都中心2 小时前
C 语言内存管理深度解析:malloc/free 与嵌入式堆栈分配策略
java·c语言·算法
YANZ2222 小时前
亚马逊绿标(CPF):从环保认证到跨境流量新引擎
java·大数据·人工智能·搜索引擎·百度