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

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

  1. PHP 支付类库, cURL开源HTTP类库

    未做任何测试 支付类库地址:http://doc.yurunsoft.com/PaySDK cURL开源HTTP类库地址:http://doc.yurunsoft.com/YurunHttp/1

  2. Visual Studio 调试技巧:10 篇热文汇总

    本文精选了 DotNet  2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...

  3. ICanPay介绍

    ICanPay介绍 ICanPay是一个支持多商户多种支付方式的跨平台网关处理类库,使用ICanPay可以简化订单的创建.查询.退款和接收网关返回的支付通知等操作. 目前支持的支付网关有:支付宝(Al ...

  4. ***CodeIgniter集成微信支付(转)

    微信支付Native扫码支付模式二之CodeIgniter集成篇  http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...

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

    CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/ ...

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

    跨平台的运行时(Runtime):JRE(JVM)  -> .NET Core CLR . 跨平台的编译器(Compiler):javac  -> Roslyn [github.com/d ...

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

    年底了,反而工作更忙了,我从15年11月开始写<1024伐木累>系列小说和爆笑对白,得到了很多身边的技术好友的支持,现在爆笑对白已经有越来越多的朋友一起帮着写段子,整理,包括小说内容的编辑 ...

  8. C#微信支付

    回归主题,16年1月初我对微信开发比较好奇,由于自己是一个比较喜欢钱的人,所以对支付功能颇为冲动,就用公司信息在微信平台申请了一个服务号,还给腾讯打赏了300大洋做了下认证,抽空看了下微信支付官方的文 ...

  9. tp5 -- 微信公众号支付

    近来期间比较忙, 忙完之后发现最近有挺多的东西没有整理,于是乎.就将以前用到的一些小东西整理了一下. 如果对您有帮助,则是我最大的幸运. 本篇主要是说了一下整合TP5的微信公众号支付. 不过由于最近T ...

随机推荐

  1. cocos2dx - v2.3.3编辑器骨骼动画

    接上一节内容:cocos2dx - v2.3.3编辑器简单使用及不同分辨率适配 本节主要Cocos骨骼动画的创建及使用 一.新建 用Cocos Studio工具新建一个状态栏项目.如下图: 当然也可以 ...

  2. chromium源码阅读--Browser进程初始化

    最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先IPC message loop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的q ...

  3. Archlinux 安装小计

    前阵子Fedora太不稳定,几乎不能正常使用了,同时也对版本形式的linux每次升级后各种扫尾和清扫工作感到有点厌倦,心里也非常想体验一下linux的滚动发行版,所以下定决心要干掉fedora,主流的 ...

  4. (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    原文出自:http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...

  5. LINUX 笔记-wget命令

    使用wget下载单个文件 命令:wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip 使用wget -c断点续传 命令:wget -c http: ...

  6. Mysql Explain 参数解释

    查询计划使用以及使用说明 table:显示这一行数据是关于哪张表的. type:显示使用了何种类型,从最好到最差的连接类型为system.const.eq_ref.ref.fulltext.ref_o ...

  7. macOs升级到10.13.1Beta || JAVA升级到最新版之后PhpStorm菜单栏问题

    macOs升级到10.13.1Beta || JAVA升级到最新版之后PhpStorm菜单栏会消失,估计不止出现在PhpStorm,一系列jetbrains的产品可能都会有这个问题,包括eclipis ...

  8. sql语句如何查询一个表中某两个字段的相同数据?

    Select Name,ID From A group by Name,ID having count (*)>1

  9. ios微信支付 v3

    V2版本和V3版本存在很大的差异. 1. 从成功通过微信支付商户的资料审核返回的邮件开始: 你可以获得这些参数  appid,appSecret,partnerID,    partnerKey(从平 ...

  10. poj3270Cow Sorting(置换+贪心)

    Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7587   Accepted: 2982 Descr ...