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相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:

  1. 引用对应的Abp支付的Nuget包 如果仅需某个支付,仅需引用该支付的包。下面以通联支付为例,我们需要在工程中引用此包:

  2. 添加模块依赖 在对应工程的Abp的模块(AbpModule)中,添加对“AbpAllinpayModule”的依赖,如:

 [DependsOn(typeof(AbpAllinpayModule))]
  1. 在DbContext中添加名为“TransactionLogs”的DbSet 整个支付过程中(无论是支付成功还是出现异常),均会记录交易日志。交易日志会记录交易过程中的一些信息,比如客户端信息、交易参数、自定义参数以及异常信息。因此我们需要针对EF添加对TransactionLog的支持。需要在DbContext中添加的完整代码如下所示:

public DbSet<TransactionLog> TransactionLogs { get; set; }
  1. 注册回调逻辑 我们需要实现“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();
}
}

注意Key不要重复。

  1. 向容器中注册回调逻辑

我们可以将回调逻辑写在一个公共的程序集,然后使用以下代码进行注册:

 IocManager.IocContainer.Register(
//注册自定义支付回调逻辑
Classes.FromAssembly(typeof(ApplicationCoreModule).GetAssembly())
.BasedOn<IPaymentCallbackAction>()
.LifestyleTransient()
.Configure(component => component.Named(component.Implementation.FullName))
.WithServiceFromInterface()
);

除了上面的方式,我们还可以通过注入IPaymentManager对象,通过其RegisterCallbackAction方法来注册自定义的回调逻辑。

  1. 发起支付

通过容器获得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相关模块的封装或者历史代码。

官方订阅号

关注“麦扣聊技术”订阅号免费获取:

  • 最新文章、教程、文档

  • 视频教程

  • 基础版免费授权

  • 模板

  • 解决方案

  • 编程心得和理念

官方博客/文档站

其他开源库地址

Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装的更多相关文章

  1. Magicodes.Pay已支持Volo Abp

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

  2. 开源库支付库Magicodes.Pay发布

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

  3. pay-spring-boot 开箱即用的Java支付模块,整合支付宝支付、微信支付

    关于 使用本模块,可轻松实现支付宝支付.微信支付对接,从而专注于业务,无需关心第三方逻辑. 模块完全独立,无支付宝.微信SDK依赖. 基于Spring Boot. 依赖Redis. 我能做什么 支付宝 ...

  4. 支付宝&微信统一支付

    1.实体对应关系: Application  — 支付记录实体 --  支付记录详情 2.流程 1.生成订单选择支付类型 2.支付宝:PC端.手机端.扫码:微信:微信公众号支付.扫码支付.H5支付. ...

  5. 微软打造了全球最大的Git代码库

    丹棱君有话说:今年 2 月,微软宣布将用 Git 管理 Windows 源代码.随后,Visual Studio 宣布开发 “Git 虚拟文件系统(GVFS)”,并将在终极项目和超大型团队中推行 Gi ...

  6. 生信云实证Vol.12:王者带飞LeDock!开箱即用&一键定位分子库+全流程自动化,3.5小时完成20万分子对接

    LeDock是苏黎世大学Zhao HongTao在博士期间开发的一款分子对接软件,专为快速准确地将小分子灵活对接到蛋白质而设计.LeDock优于大部分商业软件,在Astex多样性集合上实现了大于90% ...

  7. Magicodes.Sms短信库的封装和集成

    简介 Magicodes.Sms是心莱团队封装的短信服务库,已提供Abp模块的封装. Nuget 新的包 名称 说明 Nuget Magicodes.Sms.Aliyun 阿里云短信库 Magicod ...

  8. 轻量级开源小程序SDK发车啦

    Magicodes.WxMiniProgram.Sdk 轻量级微信小程序SDK,支持.NET Framework以及.NET Core.目前已提供Abp模块的封装,支持开箱即用. Nuget 新的包 ...

  9. python基础学习笔记——类的约束

    ⾸先, 你要清楚. 约束是对类的约束. 用一个例子说话: 公司让小明给他们的网站完善一个支付功能,小明写了两个类,如下: class QQpay: def pay(self,money): print ...

随机推荐

  1. 【JZOJ4807】破解

    Description 历经千辛万苦,ddddddpppppp 终于找到了IBN5100. dp 事先了解到SERN 共有T 个密码,每个密码是一个长度为N 的01 串,他要利用IBN5100 的特殊 ...

  2. SQL SERVER数据库批量替换某个数据表里的数据update

    批量替换:将A表CMC里面所有包含a替换成b而不影响其他内容UPDATE A SET CMC=REPLACE(CMC,'a','b')

  3. 2.1实现简单基础的vector

    2.1实现简单基础的vector 1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&a ...

  4. 【源码解析】凭什么?spring boot 一个 jar 就能开发 web 项目

    问题 为什么开发web项目,spring-boot-starter-web 一个jar就搞定了?这个jar做了什么? 通过 spring-boot 工程可以看到所有开箱即用的的引导模块 spring- ...

  5. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

  6. 关于Stream的知识分享

    一.什么是Stream 查了一下MSDN,他是这么解释的:提供字节序列的一般视图. 这个解释有点太笼统了,下面,我们来仔细的捋一下 1.什么是字节序列? 字节序列指的是:字节对象被存储为连续的字节序列 ...

  7. 域渗透-凭据传递攻击(pass the hash)完全总结

    总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki  https://en.wikiped ...

  8. C#版本websocket及时通信协议实现(教程示例)

    1:Websocket有java.nodejs.python.PHP.等版本 ,我现在使用的是C3版本,服务器端是Fleck.客户端和服务器端来使用websocket的,下面开始讲解如何使用: 2:在 ...

  9. 用Docker搭建一个支持https的nginx代理服务

    用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...

  10. 微信小程序如何发送订阅消息,正确姿势来了,建议收藏!

    小程序订阅消息公测已经有些日子,今天以世界上最好的语言(PHP)为例,说一下如何发送订阅消息. 1.订阅消息 其实如果用过模板消息的话,改用订阅消息挺简单的,看一下官方文档稍加摸索就能使用. 但是对于 ...