Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core。目前支持以下支付方式和功能:

  • 支付宝APP支付

  • 支付宝Wap支付

  • 支付宝国际支付

    • 支持分账

  • 微信小程序支付

  • 微信APP支付

  • 统一支付回调处理

  • 支持日志函数注入(不依赖日志库)

  • 支持支付配置函数注入,以便于支持自定义配置获取逻辑,以应用于不同的场景(比如从配置文件、用户设置获取配置,或者多租户支持)

目前此库我们在很多项目上已经进行了验证,由于项目赶工,许多功能我们并没有添加、迁移或者重构过来,在后续的过程中,我们会逐步来完成这些工作。同时,在Magicodes.Admin开源库中,我们也编写了相关的Demo和实现。

Magicodes.Pay开源库地址:

https://github.com/xin-lai/magicodes.pay

Magicodes.Admin开源库地址:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core

整个支付实现这块,我们在Magicodes.Admin开源库中已经提供了统一支付的Demo,而且我们将会提供根据请求头来自动调用相关支付的功能。如下图所示: 

在各个业务支付场景中,我们可以非常方便的调用此统一支付,如下图所示:

 

VNext

这是目前的下个版本的规划:

  • 支付宝PC支付

  • 微信H5支付

  • 提供默认的回调管理逻辑,支持回调处理函数的注入

具体功能我们会根据项目的情况来迭代,如果你有好的建议或者意见,可以关注我们的公众号“magiccodes”来提交您的意见或者意见。

如何配置

相关库的配置相对比较简单,一般均使用相关Builder类来配置自定义日志逻辑、配置获取逻辑等,具体可以查阅Builder目录下的代码。

配置参考

相关配置请参考此代码:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Startup/PayStartup.cs

部分代码如下所示:

支付相关代码可以参考:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Services/PayAppService.cs

配置界面参考

如下图所示: 

Demo

微信支付Demo

      
if (WeChatPayApi == null)
{
throw new UserFriendlyException("支付未开放,请联系管理员!");
}
var appPayInput = new WeChat.Pay.Dto.AppPayInput
{
Body = input.Body,
OutTradeNo = input.OutTradeNo,
Attach = input.CustomData,
TotalFee = input.TotalAmount,
SpbillCreateIp = _clientInfoProvider?.ClientIpAddress
};
try
{
var appPayOutput = WeChatPayApi.AppPay(appPayInput);
return Task.FromResult(appPayOutput);
}
catch (Exception ex)
{
throw new UserFriendlyException(ex.Message);
}
  

支付宝支付Demo

 if (AlipayAppService == null)
{
throw new UserFriendlyException("支付未开放,请联系管理员!");
}
var appPayInput = new Alipay.Dto.AppPayInput
{
Body = input.Body,
Subject = input.Subject,
TradeNo = input.OutTradeNo,
PassbackParams = input.CustomData,
TotalAmount = input.TotalAmount
};
try
{
var appPayOutput = await AlipayAppService.AppPay(appPayInput);
return appPayOutput.Response.Body;
}
catch (Exception ex)
{
throw new UserFriendlyException(ex.Message);
}

 

支付宝国际支付Demo    

if (GlobalAlipayAppService == null)
{
throw new UserFriendlyException("支付未开放,请联系管理员!");
}
var payInput = new Alipay.Global.Dto.PayInput
{
Body = input.Body,
Subject = input.Subject,
TradeNo = input.OutTradeNo,
//PassbackParams = input.CustomData,
TotalFee = input.TotalAmount,
};
try
{
return await GlobalAlipayAppService.Pay(payInput);
}
catch (Exception ex)
{
throw new UserFriendlyException(ex.Message);
}

  

国际支付宝分账参考界面

支付回调

目的

统一回调处理逻辑和回调处理地址

代码参考

上图的PayAction参考: 

 void PayAction(string key, string outTradeNo, string transactionId, int totalFee, JObject data)
{
using (var paymentCallbackManagerObj = iocManager.ResolveAsDisposable<PaymentCallbackManager>())
{
var paymentCallbackManager = paymentCallbackManagerObj?.Object;
if (paymentCallbackManager == null)
{
throw new ApplicationException("支付回调管理器异常,无法执行回调!");
}
AsyncHelper.RunSync(async () => await paymentCallbackManager.ExecuteCallback(key, outTradeNo, transactionId, totalFee, data));
}
} 

完整回调代码请参考此代码:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core/blob/develop/src/unity/Magicodes.Pay/Startup/PayStartup.cs

回调逻辑参考:

开源库支付库Magicodes.Pay发布的更多相关文章

  1. Magicodes.Pay已支持Volo Abp

    Magicodes.Pay已支持Volo Abp 简介 Magicodes.Pay希望打造一个统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前已 ...

  2. Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装

    Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装 简介 Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framew ...

  3. Android开源项目及库搜集

    TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...

  4. Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

    在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...

  5. iOS、mac开源项目及库汇总

    原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499    iOS每日一记------------之 中级完美大整理 iOS.m ...

  6. 值得推荐的C/C++开源框架和库

    值得推荐的C/C++开源框架和库  转自:http://www.cnblogs.com/lidabo/p/5514155.html   - 1. Webbench Webbench是一个在Linux下 ...

  7. 值得学习的C语言开源项目和库

    收集一些C/C++相关的源码,如有更高效的库,请提醒我 补充上去 C/C++相关交流Q群 1414577 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具. ...

  8. 转载一篇c++开源框架和库

    值得学习的C语言开源项目 -1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性 ...

  9. Android 开源项目及库汇总(2)

    Android 开源项目及库汇总(2) ListenToCode 2.7 2018.10.10 15:43 字数 8527 阅读 1001评论 0喜欢 29 地图 百度地图– Android百度地图 ...

随机推荐

  1. NOIP2013提高组 T2 火柴排队

    一开始看也想不到这居然要用到逆序对,归并排序. 先来看看题目: 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间 ...

  2. c# winform打印excel(使用NPOI+Spire.xls+PrintDocument直接打印excel)

    前言 c#做winform程序要求生成并打印Excel报告,为了不安装Office相应组件,我选择了NPOI来生成Excel报告,用winform的PrintDocument控件来触发打印操作,而难点 ...

  3. js计算发表的时间...分钟/小时以前/以后

    网上找的都好复杂,这本来就是个粗略显示通俗的时间,绕来绕去都晕了 function timeAgo(o){ var n=new Date().getTime(); var f=n-o; var bs= ...

  4. RDD算子

    RDD算子 #常用Transformation(即转换,延迟加载) #通过并行化scala集合创建RDD val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8 ...

  5. IIS7配置伪静态把后缀名映射为html

    1.在IIS新建站点.[ 创建的时候不用去选择版本和模式,默认即可 ] 2.选中站点,切换到功能试图,找到“处理程序映射",双击之后,在打开窗口右侧的操作栏目下做如下设置: 1) 右边&qu ...

  6. .net 发布程序时出现“类型ASP.global_asax同时存在于...”错误的解决办法

    web程序发布后,通过浏览器访问程序显示如下的错误信息: 编译器错误消息: CS0433: 类型“ASP.global_asax”同时存在于“c:\WINDOWS\Microsoft.NET\Fram ...

  7. mongodb远程数据库的连接以及备份导入导出数据

    环境win10; 运行cmd cd到目录mongodb的bin目录: 连接远程mongodb: 连接命令:mongo -u username -p pwd host:post/database(数据库 ...

  8. MVC编程模型

    MVC 编程模型 MVC 是三个 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型 ...

  9. RAID部署

    添加硬盘 1.创建一个RAID阵列卡 2.格式化刚刚做好的md0 3.创建挂载目录 4.自动挂载,永久生效 5.使用 创建RAID 1.创建一个RAID阵列卡 2.格式化 3.创建挂载目录 4.自动挂 ...

  10. SQL 查询当前时间

    Mysql: select date_format(now(),'%Y-%m-%d'); Oracle: Oracle中如何获取系统当前时间进行语句的筛选是SQL语句的常见功能 获取系统当前时间dat ...