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
C# 跨平台的支付类库ICanPay的更多相关文章
- PHP 支付类库, cURL开源HTTP类库
未做任何测试 支付类库地址:http://doc.yurunsoft.com/PaySDK cURL开源HTTP类库地址:http://doc.yurunsoft.com/YurunHttp/1
- Visual Studio 调试技巧:10 篇热文汇总
本文精选了 DotNet 2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...
- ICanPay介绍
ICanPay介绍 ICanPay是一个支持多商户多种支付方式的跨平台网关处理类库,使用ICanPay可以简化订单的创建.查询.退款和接收网关返回的支付通知等操作. 目前支持的支付网关有:支付宝(Al ...
- ***CodeIgniter集成微信支付(转)
微信支付Native扫码支付模式二之CodeIgniter集成篇 http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...
- 微信支付Native扫码支付模式二之CodeIgniter集成篇
CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/ ...
- 从Java看跨平台的.NET需要些什么?
跨平台的运行时(Runtime):JRE(JVM) -> .NET Core CLR . 跨平台的编译器(Compiler):javac -> Roslyn [github.com/d ...
- 微信支付开发-Senparc.Weixin.MP详解
年底了,反而工作更忙了,我从15年11月开始写<1024伐木累>系列小说和爆笑对白,得到了很多身边的技术好友的支持,现在爆笑对白已经有越来越多的朋友一起帮着写段子,整理,包括小说内容的编辑 ...
- C#微信支付
回归主题,16年1月初我对微信开发比较好奇,由于自己是一个比较喜欢钱的人,所以对支付功能颇为冲动,就用公司信息在微信平台申请了一个服务号,还给腾讯打赏了300大洋做了下认证,抽空看了下微信支付官方的文 ...
- tp5 -- 微信公众号支付
近来期间比较忙, 忙完之后发现最近有挺多的东西没有整理,于是乎.就将以前用到的一些小东西整理了一下. 如果对您有帮助,则是我最大的幸运. 本篇主要是说了一下整合TP5的微信公众号支付. 不过由于最近T ...
随机推荐
- Scala 运算符和集合转换操作示例
Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为 ...
- Yarn一点小认识
正文 打开官网http://hadoop.apache.org/docs/r2.6.5/hadoop-yarn/hadoop-yarn-site/YARN.html,将图片拿过来. 我用的是2.6.5 ...
- 移动端效果之IndexList
写在前面 接着前面的移动端效果讲,这次讲解的的是IndexList的实现原理.效果如下: 代码请看这里:github 移动端效果之swiper 移动端效果之picker 移动端效果之cellSwipe ...
- junit搭配hamcrest使用
开篇 - 快速进行软件编码,与功能测试应该是每个写代码的人,应该掌握的技能,如何进行优雅的写代码,把测试的时间压缩,腾出时间来休息.下面听我一一道来: 依赖:junit 4.4 hamcrest 1. ...
- faster-rcnn中ROI_POOIING层的解读
在没有出现sppnet之前,RCNN使用corp和warp来对图片进行大小调整,这种操作会造成图片信息失真和信息丢失.sppnet这个模型推出来之后(关于这个网络的描述,可以看看之前写的一篇理解:ht ...
- Lustre文件系统测试——obdfilter-survey测试
Lustre文件系统测试--obdfilter-survey测试 介绍 该测试主要是在lustre文件系统工作环境下进行,将直接在ost上生成工作负载模拟并行文件访问,可准确检测盘阵在lustre文件 ...
- Tomcat Java.OutOfMemoryError : PermGen Space异常
背景:前些日子更新公司多年前一个旧平台发布到Tomcat上之后,频繁收到网站许多模块无法正常使用的反汇. 测试过程中发现平台发布一段时间后,访问相关网页出现如下500页面 解决方案:PermGen s ...
- C 返回函数与闭包的考虑
#include <stdio.h> typedef int (*fun)(); fun closure(int i) { int squ() { return i*i; } return ...
- Java并发编程之显式锁机制
我们之前介绍过synchronized关键字实现程序的原子性操作,它的内部也是一种加锁和解锁机制,是一种声明式的编程方式,我们只需要对方法或者代码块进行声明,Java内部帮我们在调用方法之前和结束时加 ...
- 本地连接 vmware服务器
在本机中装载虚拟机,安装redhat.需要调试使用redhat可以与Windows进行通讯. 分为多步,在此前提下,默认你已经安装好且可以vm 和虚拟机 1:点击虚拟机>设置>添加网络适配 ...