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
时间: 2024-10-12 19:39:18

C# 跨平台的支付类库ICanPay的相关文章

微信支付开发-Senparc.Weixin.MP详解

在网上找到了做微信对接的C#SDK:Senparc.Weixin.MP.这个类库的封装,在我看来,还是不错的,基本囊货了微信的功能,并且在不断的完善.类库是开源的,每个功能都有写简单的单元测试,看起来一目了然.主要对接DLL对应的功能如下: 公众号+微信支付 SDK:Senparc.Weixin.MP.dll 企业号 SDK:Senparc.Weixin.QY.dll 开放平台 SDK:Senparc.Weixin.Open.dll 官方地址:http://weixin.senparc.com/

微信支付Demo下载(完整文档+使用说明)

提供两个测试版本,Java于PHP,都是经过测试成功后上传,功能都没有问题.代码逻辑有困惑时可以参考开发文档,上面很清楚. Java版: 1. 在开通微信支付的公众号下访问 htpp://服务器地址/mainServlet 2. 修改MainServlet.java和TopayServlet.java 里面的商户参数,授权返回地址和notify_url部分即可. 3. 代码是别人的劳动成果,经自己稍微修改后测试成功,demo并没有十分的简化,大家可以做一个参考吧.如果出现签名失败,仔细检查下自己

微信支付Native扫码支付模式二之CodeIgniter集成篇

微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 官方API列表:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 二维码生成类库:phpqrcode 走了几天的弯路,直到遇到Lamtin指点(热心网友),他说你既然是集成

微信扫码支付模式二之CodeIgniter集成篇

CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 官方API列表:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 二维码生成类库:phpqrcode 走了几天的弯路,直到遇到Lamtin指点(热心网友)

从Java看跨平台的.NET需要些什么?

跨平台的运行时(Runtime):JRE(JVM)  -> .NET Core CLR . 跨平台的编译器(Compiler):javac  -> Roslyn [github.com/dotnet/roslyn] . 跨平台的基础类库(BCL):JCL -> .NET Core Framework [github.com/dotnet/corefx] . 跨平台的集成开发工具(IDE):Eclipse -> 暂无. 跨平台的生成工具(Build):Gradle -> 暂无

“聚合支付”增值盛宴:打通银行垂直账户壁垒

近年来,"聚合支付"行业迎来井喷式的大爆发,商业银行.第三方支付机构.收单代理商等纷纷加入到这一领域的竞争. 所谓"聚合支付"也称"融合支付",是指从事支付.结算.清算服务之外的支付服务商,借助银行.非银机构或清算组织的支付通道与清结算能力,利用自身的技术与服务集成,将一个以上的银行.非银机构或清算组织的支付服务整合到一起,为商户提供"支付通道"."集合对账"."技术对接"."

ThinkPHP3.2对接开发支付宝即时到帐接口

ThinkPHP3.2对接开发支付宝即时到帐接口 在做一些商城.自动发卡网站.会员积分充值.金币充值等等这类网站都时候,我们极大可能需要使用到第三方都支付接口.不管是财付通.支付宝.银联.贝宝.易宝这些都 ThinkPHP3.2对接开发支付宝即时到帐接口        在做一些商城.自动发卡网站.会员积分充值.金币充值等等这类网站都时候,我们极大可能需要使用到第三方都支付接口.不管是财付通.支付宝.银联.贝 宝.易宝这些都好,总之这些第三方支付平台给我们带来了很多便利都地方.我们只需要跟这些平台

nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Windows程序员的事实). 操作系统 API.操作系统发展到今日,几乎桌面应用的所有功能,都是基于系统API构建的.调用API和语言及技术无关,哪怕是使用汇编.例如(代码来源于网络,本地重新编译): ;我的第一个win32汇编程序 ;一个经典的hello world !程序 ;>>>>&

Qt3升至Qt4需要注意的几件事项浅谈

公司以前的项目是用Qt3写的,随着时间的推移慢慢显示出Qt3有多方面的限制,因此先公司决定用Qt4来改写这个项目,并为软件添加新功能,在此背景先编写此文章. 先扯一下没用的:gotfocus是获得焦点时触发,Lostfocus是失去焦点的时候触发.比如:新建两个文本框,当点击第一个文本框的时候,则触发第一个文本框的getfocus事件,表示第一个文本框获得了焦点,可以进行操作了.然后鼠标点击第二个文本框的时候,第一个文本框首先触发lostfocus事件,标明它已经失去焦点,无法进行操作.同时第二