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

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

简介

Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。

Nuget

新的包

640?wx_fmt=png

已弃用的包,不再更新

640?wx_fmt=png

主要功能

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

  • 支付宝支付

    • APP支付

    • Wap支付

  • 支付宝国际支付

    • 支持分账

  • 微信支付

    • 小程序支付

    • APP支付

    • 订单查询

    • 企业付款(提现)

    • 退款申请

    • 普通红包

  • 通联支付

    • 小程序支付

  • 统一支付回调处理

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

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

  • 针对ABP提供模块封装,添加模块依赖即可立即使用。主要包括:

    • 支付渠道注册(IPaymentRegister)

    • 支付回调逻辑处理(IPaymentCallbackAction)

    • 统一支付服务实现(IToPayService)

    • 统一支付服务封装(见IPayAppService)

    • 支付管理器封装(IPaymentManager),包含:

    • 交易日志封装,自动记录客户端信息以及自动异常处理和记录

    • 仅需编写一次回调逻辑,即可支持多个支付渠道

    • 业务参数支持更大长度(500)

开始使用

如果使用Abp相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:

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

    640?wx_fmt=png

  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(0);
}
}

注意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相关模块的封装或者历史代码。

官方订阅号

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

  • 最新文章、教程、文档

  • 视频教程

  • 基础版免费授权

  • 模板

  • 解决方案

  • 编程心得和理念

640?wx_fmt=jpeg

相关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




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)

假设我有一个简单的“ Hello World”控制台应用程序&#xff0c;我想发送给朋友来运行。朋友没有安装.NET Core&#xff0c;所以我知道我需要为他构建一个独立的应用程序。很简单&#xff0c;我只需在项目目录中运行以下命令&#xff1a;dotnet publish -r win-x64 -c Release …

python import 问题

https://my.oschina.net/leejun2005/blog/109679 python中&#xff0c;每个py文件被称之为模块&#xff0c;每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中&#xff0c;就可以使用import 模块或import 包来使用。 如果想使用非当前模块中的…

.NET如何写正确的“抽奖”——数组乱序算法

.NET如何写正确的“抽奖”——数组乱序算法数组乱序算法常用于抽奖等生成临时数据操作。就拿年会抽奖来说&#xff0c;如果你的算法有任何瑕疵&#xff0c;造成了任何不公平&#xff0c;在年会现场 code review时&#xff0c;搞不好不能活着走出去。这个算法听起来很简单&#…

maximum mean discrepancy

http://blog.csdn.net/a1154761720/article/details/51516273 MMD&#xff1a;maximum mean discrepancy。最大平均差异。最先提出的时候用于双样本的检测&#xff08;two-sample test&#xff09;问题&#xff0c;用于判断两个分布p和q是否相同。它的基本假设是&#xff1a;如…

FineUICore基础版部署到docker实战

文 | 蒙古海军司令 合作者FineUI用了好多年&#xff0c;最近出了FineUICore版本&#xff0c;一直没时间是试一下docker&#xff0c;前几天买了一个腾讯云服务器&#xff0c;1核2g&#xff0c;装了centos7.6&#xff0c;开始的时候主要是整个个人博客&#xff0c;在腾讯云安装了…

2019全球Microsoft 365开发者训练营(北京站)

Microsoft365介绍&#xff1a;Microsoft365不仅仅是Office 365&#xff0c;它还包括Windows 10操作系统&#xff0c;以及诸多企业级移动和安全应用。它是一套可用于从小型到集团化企业的办公、协作、沟通的企业信息化解决方案。在2017年7月11日举行的Inspire年度合作伙伴大会上…

caffe/common.cu error: function atomicadd has already been defined

http://blog.csdn.NET/houqiqi/article/details/46469981 1, 下载matio(http://sourceforge.NET/projects/matio/) 2,&#xff0c;安装 $ tar zxf matio-X.Y.Z.tar.gz $ cd matio-X.Y.Z $ ./configure $ make $ make check $ make install sudo ldconfig (如果不执行&#x…

微软备战 RPA 市场,Power Platform,Ready GO!

最大赌注就在刚刚&#xff0c;微软在 Microsoft Ignite 2019 大会上&#xff0c;首席执行官萨蒂亚纳德拉&#xff08;Satya Nadella&#xff09;宣布了 Microsoft Power Platform 新平台的发布&#xff0c;并且说到&#xff1a;在与Azure合作方面&#xff0c;微软365&#xff0…

C# 8 新特性 - 只读struct成员

从C# 8开始&#xff0c;我们可以在struct的成员上使用readonly修饰符。 为struct的成员添加readonly修饰符就表示告诉编译器和开发者该成员不可以修改struct的状态。 看下面这个例子&#xff1a; 这里的ToString()方法不会修改Point这个struct的状态&#xff0c;所以我们可以在…

.NET Core 3.0 中间件 Middleware

中间件官网文档解释&#xff1a;中间件是一种装配到应用管道以处理请求和响应的软件 每个中间件&#xff1a;选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。使用 IApplicationBuilder 创建中间件管道ASP.NET Core 请求管道包含一系列请求委托&…

重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境

今天&#xff08;北京时间 2019 年 11 月 4 日&#xff09;&#xff0c;在 Microsoft Ignite 2019 大会上&#xff0c;微软正式发布了 Visual Studio Online 公开预览版&#xff01;概览Visual Studio Online 提供了由云服务支撑的开发环境。无论是一个长期项目&#xff0c;或是…

Ubuntu Linux将支持所有树莓派设备

Canonical 近期公开了对 Raspberry Pi 4 的支持计划&#xff0c;并表示将支持所有 Raspberry Pi 设备。随着 Ubuntu Server 19.10 版本的发布&#xff0c;Canonical 宣布正式支持 Raspberry Pi 4&#xff0c;Raspberry Pi 4 性能强大&#xff0c;但成本较低&#xff0c;可以在边…

面试官:你连RESTful都不知道我怎么敢要你?

加个“星标★”&#xff0c;每天11.50&#xff0c;好文必达全文约4000字&#xff0c;预计阅读时间8分钟面试官&#xff1a;了解RESTful吗&#xff1f;01 前言回归正题&#xff0c;看过很多RESTful相关的文章总结&#xff0c;参齐不齐&#xff0c;结合工作中的使用&#xff0c;非…

深入理解.NET Core的基元(二) - 共享框架

原文&#xff1a;Deep-dive into .NET Core primitives, part 2: the shared framework作者&#xff1a;Nate McMaster[1] 译文&#xff1a;深入理解.NET Core的基元&#xff08;二&#xff09; - 共享框架 作者&#xff1a;Lamond Lu本篇是之前翻译过的《深入理解.NET Core的基…

net core WebApi——使用xUnits来实现单元测试

前言从开始敲代码到现在&#xff0c;不停地都是在喊着记得做测试&#xff0c;记得自测&#xff0c;测试人员打回来扣你money之类的&#xff0c;刚开始因为心疼钱&#xff08;当然还是为了代码质量&#xff09;&#xff0c;就老老实实自己写完自己跑一遍&#xff0c;没有流程没有…

python利用opencv标注bounding box

http://blog.csdn.net/xieqiaokang/article/details/60780608 1. 函数 用 OpenCV 标注 bounding box 主要用到下面两个工具——cv2.rectangle() 和 cv2.putText()。用法如下&#xff1a; # cv2.rectangle() # 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细 cv2…

微软发布 SQL Server 2019 新版本

2019 年 11 月 4 日&#xff0c;微软在美国奥兰多举办的 Ignite 大会上发布了关系型数据库 SQL Server 的新版本。与之前版本相比&#xff0c;新版本的 SQL Server 2019 具备以下重要功能&#xff1a;在 Linux 和容器中运行的能力&#xff0c;连接大数据存储系统的 PolyBase 技…

AdminLTE 3.0发布了

点击蓝字关注我们前言在11月2日&#xff0c;作者正式发布了AdminLTE 3.0版本。该版本基于Bootstrap 4.x。使用Bootstrap 4.x的小伙伴可以愉快的使用AdminLTE。GithubAdminLTE是一个完全响应的管理模板。基于Bootstrap 4框架。高度可定制且易于使用。适合从小型移动设备到大型台…

这位优秀的.NET开发者是怎样炼成的?

本文来自DotNET技术圈作者&#xff1a;邹溪源一&#xff0c;社区的小圈子今年3月的一次技术交流活动上&#xff0c;那是我们.NET技术社区第一次组织线下活动&#xff0c;由于没什么经验&#xff0c;所以活动组织得比较仓促&#xff0c;内容也比较一般&#xff0c;效果还是有点欠…

求知无限,刷新.NET 中国社区

2019 Microsoft Ignite The Tour 2020年1月13日至14日深圳会展中心举办&#xff0c;今年的大会是免费的哦&#xff0c;所以也很火爆&#xff0c;我们为您开通专属报名渠道&#xff0c;,扫下方二位码 请在注册时务必填写RSVPCode: MITTCE。大会全面解锁微软黑科技&#xff1a;&g…