Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
简介
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。
Nuget
新的包
已弃用的包,不再更新
主要功能
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。目前支持以下支付方式和功能:
支付宝支付
APP支付
Wap支付
支付宝国际支付
支持分账
微信支付
小程序支付
APP支付
订单查询
企业付款(提现)
退款申请
普通红包
通联支付
小程序支付
统一支付回调处理
支持日志函数注入(不依赖支付库)
支持支付配置函数注入,以便于支持自定义配置获取逻辑,以应用于不同的场景(比如从配置文件、用户设置获取配置,或者多租户支持)
针对ABP提供模块封装,添加模块依赖即可立即使用。主要包括:
支付渠道注册(IPaymentRegister)
支付回调逻辑处理(IPaymentCallbackAction)
统一支付服务实现(IToPayService)
统一支付服务封装(见IPayAppService)
支付管理器封装(IPaymentManager),包含:
交易日志封装,自动记录客户端信息以及自动异常处理和记录
仅需编写一次回调逻辑,即可支持多个支付渠道
业务参数支持更大长度(500)
开始使用
如果使用Abp相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:
引用对应的Abp支付的Nuget包 如果仅需某个支付,仅需引用该支付的包。下面以通联支付为例,我们需要在工程中引用此包:
添加模块依赖 在对应工程的Abp的模块(AbpModule)中,添加对“AbpAllinpayModule”的依赖,如:
[DependsOn(typeof(AbpAllinpayModule))]
在DbContext中添加名为“TransactionLogs”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。交易日志会记录交易过程中的一些信息,比如客户端信息、交易参数、自定义参数以及异常信息。因此我们需要针对EF添加对TransactionLog的支持。需要在DbContext中添加的完整代码如下所示:
public DbSet<TransactionLog> TransactionLogs { get; set; }
注册回调逻辑 我们需要实现“IPaymentCallbackAction”接口来编写自定义的回调逻辑。如以下示例所示:
public class TestPaymentCallbackAction : IPaymentCallbackAction {/// <summary>/// 业务Key/// </summary>public string Key { get; set; } = "缴费支付"; /// <summary>/// 执行回调/// </summary>/// <returns></returns>public async Task Process(IUnitOfWorkManager unitOfWork, TransactionLog transactionLog) {var data = transactionLog.CustomData.FromJsonString<JObject>();//业务处理 await Task.FromResult(0); } }
注意Key不要重复。
向容器中注册回调逻辑
我们可以将回调逻辑写在一个公共的程序集,然后使用以下代码进行注册:
IocManager.IocContainer.Register(//注册自定义支付回调逻辑Classes.FromAssembly(typeof(ApplicationCoreModule).GetAssembly()) .BasedOn<IPaymentCallbackAction>() .LifestyleTransient() .Configure(component => component.Named(component.Implementation.FullName)) .WithServiceFromInterface() );
除了上面的方式,我们还可以通过注入IPaymentManager对象,通过其RegisterCallbackAction方法来注册自定义的回调逻辑。
发起支付
通过容器获得IPayAppService,然后调用Pay方法即可。也可以自行封装:
public async Task<object> Payment(PaymentInput input) {return await _payAppService.Pay(new PayInputBase() {Body = $"{input.Name} {input.ChargeProjectName}",CustomData = input.ToJsonString(),Key = "缴费支付",OpenId = input.OpenId,Subject = input.ChargeProjectName,TotalAmount = input.Amount,PayChannel = input.PayChannel }); }
通过IPayAppService统一支付有如下好处:
统一支付(无论支付宝还是微信各种端的支付,均可统一)
自动记录交易日志以及进行相关逻辑处理
自定义数据依赖交易日志进行存储,而不依赖支付渠道,因此支持无业务参数的支付渠道,也支持存储更多自定义数据
非ABP集成
请参考Abp相关模块的封装或者历史代码。
官方订阅号
关注“麦扣聊技术”订阅号免费获取:
最新文章、教程、文档
视频教程
基础版免费授权
模板
解决方案
编程心得和理念
相关QQ群
编程交流群<85318032>
产品交流群<897857351>
官方博客/文档站
http://www.cnblogs.com/codelove/
https://docs.xin-lai.com/
其他开源库地址
https://gitee.com/magicodes/Magicodes.Admin.Core
https://github.com/xin-lai
Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装相关推荐
- Magicodes.Pay已支持Volo Abp
Magicodes.Pay已支持Volo Abp 简介 Magicodes.Pay希望打造一个统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前已 ...
- 开源库支付库Magicodes.Pay发布
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前支持以下支付方式和功能: 支付宝APP支付 支付 ...
- 银行统一支付平台(介绍、架构)
介绍: 统一支付服务平台是提供规范管理功能及整合服务功能的支付清算业务平台,它以技术规范.业务规范为设计基础,以支付服务功能作为平台主体,既可以作为独立支付服务平台,以整合的支付服务功能为主,将行内已 ...
- 支付时报错java.lang.RuntimeException: 【微信统一支付】发起支付, returnCode != SUCCESS, returnMsg = appid和mch_id不匹配
1.问题 Hibernate: select ordermaste0_.order_id as order_id1_1_0_, ordermaste0_.buyer_address as buyer_ ...
- pay-spring-boot 开箱即用的Java支付模块,整合支付宝支付、微信支付
关于 使用本模块,可轻松实现支付宝支付.微信支付对接,从而专注于业务,无需关心第三方逻辑. 模块完全独立,无支付宝.微信SDK依赖. 基于Spring Boot. 依赖Redis. 我能做什么 支付宝 ...
- 打造一套安全的UI组件库!
文章较长,耐心观看. 现在再开发一套UI框架似乎已经错过了最佳创业时期,毕竟网上优秀的框架一大堆,轻量级的,重量级的,有依赖的,无依赖的,拿来即用的,需要配置的,应有尽有.但是老衲我找遍整个外网发现唯 ...
- 微信统一支付详解,坑太多,不得不写
最近开发app支付,支付宝按照开发文档很快搞定,本想微信支付开发也一样的容易,结果我错了,一路踩坑不断,到最后终于完成,耗了不少时间和精力,所以想写一篇关于微信统一支付的开发过程,希望大家能少走弯路 ...
- 服务器中调试微信支付免预充,微信支付-统一支付接口被坑经历
今天来写点什么,就写微信支付吧.哥可是被微信支付接口给折腾惨了. 大概从5月22好开始,进行微信开发,到现在也有个吧月了,老总要求3个月拿出微信会员系统,感觉有点悬,这两天又被微信支付给卡住了. 为了 ...
- 第三篇、记录微信统一支付、扫码支付开发
项目中使用了微信的统一支付以及扫码支付,记录下学习记录 目录 项目中使用了微信的统一支付以及扫码支付,记录下学习记录 1.配置wechat4j.properties 文件 2.编写支付工具类 3.统一 ...
最新文章
- Github如何删除repository(仓库)
- Linux文件系统只读Read-only file system
- js判断一个数组是否包含一个指定的值
- 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数
- rsync通过服务同步、linux系统日志、screen工具
- 我们是如何做DevOps的?
- 阿里云首次公布年度3大战略方向,中台做厚,做强生态,还要再招5000人
- composer的使用
- pycharm安装javascript插件_IDEA必备插件系列-Rainbow
- ajax,training my javascript!手写AJAX,用POST方法传值
- BSCI实验之十三:配置点到点链路OSPF及认证
- 在GridView的行绑定中应用Animation动画效果
- 任务管理器杀不了的进程如何关闭
- buildroot 文件系统添加telnet, ssh, 以及制作注意事项
- net.java.html.boot.BrowserBuilder
- 图解电动汽车:电动汽车关键技术
- Spring Bean 作用域
- python 保存为tiff文件, 图像转tiff, tif文件添加投影
- 已解决Mixly与STM32单片机下载成功后无法运行问题
- 老旧计算机桌面,四种旧电脑改造桌面虚拟化的方案