C# 跨平臺的支付類庫ICanPay

隨著微軟的開源,越來越多的項目支持跨平臺,但是各種支付平臺提供的類庫,又老又不支持跨平臺,吐槽下,尤其是微信,還有好多坑,于是ICanPay誕生了,今天就來講ICanPay是什么,怎么使用?

ICanPay是一個支持多商戶多種支付方式的跨平臺網關處理類庫,使用ICanPay可以簡化訂單的創建、查詢、退款和接收網關返回的支付通知等操作。

目前支持的支付網關有:支付寶(Alipay)、微信支付(Wechatpay)、銀聯支付(Unionpay)

下面以支付寶為例,其余兩種支付,請參考Wiki

1. 配置商戶數據

1.在Startup中添加商戶數據

    services.AddICanPay(a =>{var gateways = new Gateways();var merchant = new Merchant{AppId = "",NotifyUrl = "",ReturnUrl = "",AlipayPublicKey = "",Privatekey = ""};gateways.Add(new AlipayGateway(merchant));return gateways;});

2.在Startup中使用ICanPay

    app.UseICanPay();

以上就簡單的完成了對ICanPay的配置操作

2.支付

ICanPay支持多種支付方式,下面就來講解如何使用

1.獲取支付網關

    private readonly IGateways gateways;public YourController(IGateways gateways){this.gateways = gateways;}

2.創建訂單

    var order = new Order(){Amount = 0.01,OutTradeNo = "訂單號",Subject = "測試",};

3.設置支付方式

    var gateway = gateways.Get<AlipayGateway>(GatewayTradeType.Web);

4.支付

    gateway.Payment(order);

特殊說明:GatewayTradeType.Barcode支付方式,需要再實現PaymentSucceed和PaymentFailed事件

3.異步通知

1.獲取支付網關

    private readonly IGateways gateways;public NotifyController(IGateways gateways){this.gateways = gateways;}

2.實現支付通知事件

    PaymentNotify notify = new PaymentNotify(gateways);notify.PaymentSucceed += Notify_PaymentSucceed;notify.PaymentFailed += Notify_PaymentFailed;notify.UnknownGateway += Notify_UnknownGateway;private void Notify_PaymentSucceed(object sender, PaymentSucceedEventArgs e){// 支付成功時時的處理代碼/* 建議添加以下校驗。* 1、需要驗證該通知數據中的OutTradeNo是否為商戶系統中創建的訂單號,* 2、判斷Amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額),*/if (e.GatewayType == typeof(AlipayGateway)){var notify = (Notify)e.Notify;}}private void Notify_PaymentFailed(object sender, PaymentFailedEventArgs e){// 支付失敗時的處理代碼}private void Notify_UnknownGateway(object sender, UnknownGatewayEventArgs e){// 無法識別支付網關時的處理代碼}

3.接收支付通知

    await notify.ReceivedAsync();

4.輔助接口

1.查詢

    var notify = (Notify)gateway.Query(new Auxiliary{OutTradeNo = "訂單號"});

2.撤銷

    var notify = (Notify)gateway.Cancel(new Auxiliary{OutTradeNo = "訂單號"});

3.關閉

    var notify = (Notify)gateway.Close(new Auxiliary{OutTradeNo = "訂單號"});

4.退款

    var notify = (Notify)gateway.Refund(new Auxiliary{OutTradeNo = "訂單號",RefundAmount = 123,OutRefundNo = "退款單號"});

5.退款查詢

    var notify = (Notify)gateway.RefundQuery(new Auxiliary{OutTradeNo = "訂單號",OutRefundNo = "退款單號"});

6.對賬單下載

    gateway.BillDownload(new Auxiliary{BillType = "trade",BillDate = "2017-10-31"});

以上就簡單的講解了如何使用ICanPay,如果有什么問題,也可以在Github上提問。
項目地址:ICanPay

轉載于:https://www.cnblogs.com/varorbc/p/7890331.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281794.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281794.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET CORE 下收發郵件之 MAILKIT

背景利用代碼發送郵件在工作中還是比較常見的&#xff0c;相信大家都用過SmtpClient來處理發送郵件的操作&#xff0c;不過這個類以及被標記已過時&#xff0c;所以介紹一個微軟推薦的庫MailKit來處理。MailKit開源地址&#xff1a;https://github.com/jstedfast/MailKit需要郵…

【20181026T2】**圖【最小瓶頸路+非旋Treap+啟發式合并】

題面 【錯解】 最大最小&#xff1f;最小生成樹嘛 蛤&#xff1f;還要求和&#xff1f; 點分治&#xff1f; 不可做啊 寫了個MST暴力LCA&#xff0c;30pts&#xff0c;140多行 事后發現30分是給dijkstra的 woc 【正解】 樹上計數問題&#xff1a;①并查集②啟發式合并③點分治 …

java實現關鍵詞云_Java synchronized 關鍵詞詳細說明

Java synchronized 關鍵詞詳細說明外置專業技能點系統進程和進程的定義進程建立方法進程的情況情況變換線程安全的定義synchronized 關鍵詞的幾類使用方法裝飾非靜態數據組員方式synchronized public void sync(){}裝飾靜態數據組員方式synchronized public static void sync()…

損失函數(Loss function) 和 代價函數(Cost function)

1損失函數和代價函數的區別&#xff1a; 損失函數(Loss function)&#xff1a;指單個訓練樣本進行預測的結果與實際結果的誤差。 代價函數(Cost function)&#xff1a;整個訓練集&#xff0c;所有樣本誤差總和(所有損失函數總和)的平均值。&#xff08;這一步體現在propagate()…

Hadoop/HDFS命令

Hadoop中文手冊&#xff1a;http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 英文手冊&#xff1a;http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/CommandsManual.html Hadoop fs命令 hadoop fs: 該命令可以用于其他文件系統&#x…

《Node.js 入門系列》—— 一些簡單的排錯方法(一)

目錄 TypeError: undefined is not a functionTypeError: Cannot read property xxx of undefined 或者 TypeError: Cannot read property xxx of null檢查變量是未賦值檢查函數是否有返回值檢查變量是否引用了某個對象不存在的屬性檢查調用函數時是否未該傳遞參數俗話說“常在…

內置IOC容器ServiceCollection

.NetCore內置IOC容器ServiceCollection一、IOC介紹IOC&#xff1a;全名(Inversion of Control)-控制反轉IOC意味著我們將對象的創建控制權交給了外部容器&#xff0c;我們不管它是如何創建的&#xff0c;我們只需要知道&#xff0c;當我們想要某個實例時&#xff0c;我們可以直…

java中 有沒有方法將瀏覽器標簽欄去掉_用JS去掉IE窗口的標題欄,工具欄,地址欄...

前言:經常上網的朋友可能會到過這樣一些網站&#xff0c;一進入首頁立刻會彈出一個窗口&#xff0c;或者按一個連接或按鈕彈出&#xff0c;通常在這個窗口里會顯示一些注意事項、版權信息 、警告、歡迎光顧之類的話或者作者想要特別提示的信息。其實制作這樣的頁面效果非常的容…

React+Redux仿Web追書神器

引言 由于 10 月份做的 React Native 項目沒有使用到 Redux 等庫&#xff0c;寫了一段時間想深入學習 React&#xff0c;有個想法想做個 demo 練手下&#xff0c;那時候其實還沒想好要做哪一個類型的&#xff0c;也看了些動漫的&#xff0c;小說閱讀&#xff0c;聚合資源的開源…

【算法】LeetCode算法題-Maximum Subarray

這是悅樂書的第154次更新&#xff0c;第156篇原創 01 看題和準備 今天介紹的是LeetCode算法題中Easy級別的第13題&#xff08;順位題號是53&#xff09;。給定一個整數數組nums&#xff0c;找出一個最大和&#xff0c;此和是由數組中索引連續的元素組成&#xff0c;至少包含一個…

windows配置solr5.5.2(不通過tomcat,使用內置jetty)

一、windows下配置solr5.5.2(不通過tomcat,使用內置jetty) 第一步&#xff1a;安裝Jdk1.7 Solr5.5好像只支持Jdk1.7及以上的版本&#xff0c;沒親測&#xff0c;solr6.0是只支持jdk1.8及以上的&#xff0c;下圖為啟動solr時的截圖&#xff1a; 如何在windows環境下配置jdk及驗證…

java起源英文_Abbreviation 英文詞組縮寫(來源:南陽理工大學ACM)java

As we know, we often use a short sequence of characters in place of some words with a very long name. For example, ACM is an abbreviation of “Association for Computing Machinery”. Now we are using an acronymic method to get the abbreviation. An acronym i…

【C# Personal Handbook】運行環境

一、CLR、CLI、CTS、CLS、BCL、FCL簡介CLI&#xff08;公共語言基礎&#xff09;CLI是微軟公司向ECMA提交的一份語言和數據格式規范&#xff0c;CLR是目前為止唯一一個公共語言基礎的實現版本。CLI包括了公共類型系統&#xff08;CTS&#xff09;、公共中間語言&#xff08;CIL…

如何完善自己的知識結構

★領域 &#xff08;本來想用“學科”這個詞&#xff0c;后來覺得“學科”的范疇還是偏小&#xff0c;就改用“領域”&#xff09;  按照傳統的習慣&#xff0c;通常會把知識歸類到不同的領域&#xff08;比如&#xff1a;文學、數學、計算機、烹調、等等&#xff09;。 ◇領…

MATLAB編程與應用系列-關于MATLAB編程入門教程的總體編寫安排

本系列教程來源于出版設計《基于MATLAB編程基礎與典型應用書籍》&#xff0c;如涉及版權問題&#xff0c;請聯系&#xff1a;156204968qq.com。 出版社&#xff1a;人民郵電出版社&#xff0c; 頁數&#xff1a;525。 本系列教程目前基于MATLABR2006a&#xff0c;可能對于更高級…

python語言特性-------python2.7教程學習【廖雪峰版】(一)

開始學習廖雪峰的py2.7教程&#xff1a; 2017年6月5日12:54:28 筆記&#xff1a; 廖雪峰python2.7教程1.用任何編程語言來開發程序&#xff0c;都是為了讓計算機干活。 2.Python是一種相當高級的語言。代碼少還不好&#xff1f;代碼少的代價是運行速度慢。3.用Python可以做什么…

java調c++代碼_Java中調用C++代碼的實現 | 學步園

JNI為 Java Native Interface 即Java本地接口&#xff0c;使用此種方式可以對C/C代碼進行調用&#xff0c;其在本質上是對C/C生成的動態庫進行調用而不是直接對C/C代碼進行調用Java代碼如下&#xff1a;public class TestJNI{//JNI在本質上是調用C/C的動態庫來實現的&#xff…

jeesite1.X 集成多數據源

2019獨角獸企業重金招聘Python工程師標準>>> 網上看了幾個例子&#xff0c;都是相同數據源的動態切換&#xff0c;如果不是同一種數據庫類型&#xff0c;分頁查詢就出問題。經過研究解決問題。 jeesite.properties配置多數數據源地址,這里以mysql5.7和sqlserver2008…

k8s HPA(HorizontalPodAutoscaler)-自動水平伸縮

Horizontal Pod Autoscaling in Kubernetes寫在前面我們平時部署web服務&#xff0c;當服務壓力大撐不住的時候&#xff0c;我們會加機器(加錢)&#xff1b;一般沒有上容器編排是手動加的&#xff0c;臨時加的機器&#xff0c;臨時部署的服務還要改Nginx的配置&#xff0c;最后…

jQuery 基金會和 Dojo 基金會合并:Open Web

統一基金會&#xff0c;服務開發人員&#xff0c;推動開放 Web 技術發展jQuery 基金會和 Dojo 基金會今天宣布計劃聯合&#xff0c;旨在建立最大&#xff0c;最多樣化和最全面的基金會&#xff0c;通過服務開發者&#xff0c;他們的項目&#xff0c;他們的社區來構建開放的 Web…