当前位置: 首页 > news >正文

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

1,接口

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

2,实现接口

实现阿里支付

  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){}}

实现微信支付

   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 = ""; // 商户Idprivate 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

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

4.使用

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

 /// <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];}}

相关文章:

  • Vue事件总线(EventBus)的概念、使用以及注意事项
  • python_翻译二维列表的表头
  • Python面试题:使用Matplotlib和Seaborn进行数据可视化
  • 【Leetcode】十八、动态规划:不同路径 + 全1的最大正方形
  • C++ OpenCV 使用 resize() 调整图像大小
  • 正则采集器——前端搭建
  • 从小白到架构师:万字长文 | 社交媒体应用系统设计
  • python实现建立一个智能小车路径规划
  • SvelteKit - 1. 初始化项目
  • 快速上手FastAPI:构建和调用Python API的全方位指南
  • 【elementui】记录el-table设置左、右列固定时,加大滚动条宽度至使滚动条部分被固定列遮挡的解决方法
  • 解决R语言找不到系统库导致的报错
  • jenkins删除历史构建记录
  • CentOS 7.x 的 YUM 仓库问题
  • Poetry入门教程
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【知识碎片】第三方登录弹窗效果
  • 08.Android之View事件问题
  • 2017前端实习生面试总结
  • 345-反转字符串中的元音字母
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Docker入门(二) - Dockerfile
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java IO学习笔记一
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript基础之Array数组API
  • JSONP原理
  • js算法-归并排序(merge_sort)
  • sessionStorage和localStorage
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 关于使用markdown的方法(引自CSDN教程)
  • 老板让我十分钟上手nx-admin
  • 十年未变!安全,谁之责?(下)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 通过npm或yarn自动生成vue组件
  • 小而合理的前端理论:rscss和rsjs
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 阿里云重庆大学大数据训练营落地分享
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​用户画像从0到100的构建思路
  • ## 基础知识
  • ### RabbitMQ五种工作模式:
  • #Linux(权限管理)
  • #大学#套接字
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (万字长文)Spring的核心知识尽揽其中
  • (转)创业家杂志:UCWEB天使第一步
  • (转)大道至简,职场上做人做事做管理
  • .NET C# 操作Neo4j图数据库
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件