开源库支付库Magicodes.Pay发布
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目录下的代码。
配置参考
部分代码如下所示:


配置界面参考
如下图所示: 


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发布的更多相关文章
- Magicodes.Pay已支持Volo Abp
Magicodes.Pay已支持Volo Abp 简介 Magicodes.Pay希望打造一个统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前已 ...
- Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装 简介 Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framew ...
- Android开源项目及库搜集
TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...
- Win10 UWP开发系列——开源控件库:UWPCommunityToolkit
在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...
- iOS、mac开源项目及库汇总
原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ...
- 值得推荐的C/C++开源框架和库
值得推荐的C/C++开源框架和库 转自:http://www.cnblogs.com/lidabo/p/5514155.html - 1. Webbench Webbench是一个在Linux下 ...
- 值得学习的C语言开源项目和库
收集一些C/C++相关的源码,如有更高效的库,请提醒我 补充上去 C/C++相关交流Q群 1414577 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具. ...
- 转载一篇c++开源框架和库
值得学习的C语言开源项目 -1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性 ...
- Android 开源项目及库汇总(2)
Android 开源项目及库汇总(2) ListenToCode 2.7 2018.10.10 15:43 字数 8527 阅读 1001评论 0喜欢 29 地图 百度地图– Android百度地图 ...
随机推荐
- [JZOJ3615]【NOI2014模拟】数列(平面几何+二维线段树)
Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|. 你需要写一个程序支持2种操作(k都是正 ...
- 二、JAVA基础、语法
第二节:JAVA基础.语法 1.修饰符.变量: Java中主要有如下几种类型的变量 局部变量 ...
- 201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结
实验十六 线程技术 实验时间 2017-12-8 1.实验目的与要求 (1) 掌握线程概念: ‐多线程 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. ...
- 马昕璐 201771010118《面向对象程序设计(java)》第十六周学习总结
第一部分:理论知识学习部分 程序:一段静态的代码,应用程序执行的蓝本. 进程:是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程. 多线程:进程执行过程中产生的多条执行线索,比进程 ...
- [LeetCode] Smallest Subtree with all the Deepest Nodes 包含最深结点的最小子树
Given a binary tree rooted at root, the depth of each node is the shortest distance to the root. A n ...
- 口袋appnabcd
N(need)需求:依据我们学习经历的情况而言,对于初次接触的专业的学生来说,对学习的方向上会感到迷茫,不知道如何学习以及不知道学什么.比如对于计算机专业来说,对于一些软件的选择和下载,应用环境配置等 ...
- H5混合开发问题总结
1.This application is modifying the autolayout engine from a background thread, which can lead to en ...
- Unity进阶----Lua语言知识点(2018/11/08)
国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...
- C++通过GetAdapatersInfo获取网卡配置信息
DWORD GetAdaptersInfo( PIP_ADAPTER_INFO pAdapterInfo, //指向一个缓冲区,用来取得IP_ADAPTER_INFO结构列表 PULONG pOutB ...
- MyEclipse 10 报错记录
1. js文件:右键 >> MyEclipse >> Exclude From Validation 2. Servlet 警告:Window ==> Preferenc ...