随着微软的开源,越来越多的项目支持跨平台,但是各种支付平台提供的类库,又老又不支持跨平台,吐槽下,尤其是微信,还有好多坑,于是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

C# 跨平台的支付类库ICanPay相关推荐

  1. 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的支付怎么解决这个问题?

    最近很多讨论应用内支付(IAP)的问题,但是好像很少有人看了这个 App Store Review Guidelines  (https://developer.apple.com/appstore/ ...

  2. ICanPay 统一支付网关

    https://github.com/hiihellox10/ICanPay 统一支付网关.对原代码优化.支持NET46和NETSTANDARD2_0.支持支付宝,微信,银联支付渠道通过Web,App ...

  3. 微信支付(公众号支付)微信公众平台开发教程(5)

    简介 Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的 开发套件(C#SDK), 已全面支持微信公众号.微信支付.企业号.开放平台.JSSDK.摇一摇 ...

  4. 内地移动支付全球领先?醒醒吧,香港在这5个方面已赶超内地了!

    只需一个手机号码或者Email地址就能实现快速转账?跨银行和跨支付平台秒到账?随便说一句"转账给女友1万元"就能实现转账还不收手续费?这就是香港新推出的转账神器"转数快& ...

  5. C++-网络库:Poco概述【开源的C++类库的集合】【提供简单的、快速的网络和可移植应用程序的C++开发】【和C++标准库可以很好的集成并填补C++标准库的功能空缺】【适合嵌入式开发】

    学习一个框架前,要先明白它的是什么,为什么,怎么用.下面这些文字,是从中文poco官网上转过来的,正如poco c++库的特点,非常清晰,代码风格更是一目了然: poco开发库的特点,非常适合写后台处 ...

  6. 第三方SDK集成库(授权/分享/支付)

    github.com/czy1121/sdk- reezy.me/2017-03-31/- 第三方SDK集成库,支持 授权/分享/支付 等功能 授权 目前支持 微信/QQ/新浪微博,客户端只需要配置A ...

  7. 宇宙最強的IDE - Visual Studio 25岁生日快乐

    每位开发者从入门开始或多或少都会接触过 Visual Studio , 现今的 Visual Studio 除了支持传统的 C++ , C# , Visual Basic.NET ,F# 的编程语言外 ...

  8. c语言和c 编程的区别吗,C语言和C有什么区别呀?

    简单地说,它们不是一种语言,语法有差别,编程时具体用到的类库或者函数库也不一样. 虽然它们不是一种语言,不过它们却也有所联系.广泛地说,C可以看作其他三种语言的源语言,因为其他三种语言几乎都是从C而来 ...

  9. Java学习笔记1.1.1 搭建Java开发环境 - Java概述

    文章目录 零.本讲学习目标 一.为什么要学Java? (一)查看TIOBE指标 (二)为什么Java如此受欢迎 1.简单易学 2.跨平台 3.类库丰富 4.使用广泛 5.薪资可观 二.Java简史 ( ...

最新文章

  1. Android string.xml多语言翻译工具
  2. C语言二分查找法(指针和数组实现)
  3. matlab样本序列的时域波形,时域信号matlab实现
  4. DotNetCore Web应用程序中的Cookie管理
  5. java类内部的变量
  6. Java编程作业体会_Java作业的几点总结感想
  7. centos 8 安装使用配置
  8. 输光200亿,利润暴跌77%!史上最“作死”老字号,还想靠天价翻身?
  9. 【hackerrank】Week of Code 26
  10. C# .NET 中实现类似于化学表达式的,平方等的上下标的实现方法
  11. 电商后台之【商品管理系统】
  12. 机器学习之决策树(数据分析师学习必备)——糖潮丽子的博客
  13. Unity 防止数组索引越界的几种方法
  14. 详解java静态数组
  15. [技巧]深入了解强大的 ES6 「 ... 」 运算符
  16. 基于15单片机通过ESP8266实现远程浇花系统(支持天猫精灵和小爱同学)
  17. 中国电子竞技产业研究报告
  18. mysql和pg数据库表备份及还原
  19. 关于OSPF 5类LSA中Forwarding Address
  20. OJ每日一练——爱跑步的师兄

热门文章

  1. 基于android的智能风扇,新锡德尔对基于Android的静电式智能空气净化器系统设计...
  2. php $start_date-sub(,PHP DateTime类常用方法总结
  3. 开发工具:收集12 个顶级 Bug 跟踪工具,值得收藏!
  4. 一篇文章,了解清楚路由器的各种组网
  5. 【前端】网页布局基础
  6. 【原创】MVC+ZTree实现权限树的功能
  7. python request post 数组_[pve][python]用python3获取pve状态信息
  8. elementui el-dialog 离顶部的位置_驻马店建筑物避雷带的安装位置,本月报价
  9. c 跨平台android,Unity 使用C/C++ 跨平台终极解决方式(PC,iOS,Android,以及支持C/C++的平台)...
  10. 用户体验改善案例_改善用户体验研究的5种习惯