开源库支付库Magicodes.Pay发布



640?wx_fmt=gif

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

  • 支付宝APP支付

  • 支付宝Wap支付

  • 支付宝国际支付

      支持分账

  • 微信小程序支付

  • 微信APP支付

  • 统一支付回调处理

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

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


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

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

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

640?wx_fmt=png

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

640?wx_fmt=png

640?wx_fmt=png

VNext

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

  • 支付宝PC支付

  • 微信H5支付

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

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

如何配置

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

配置参考

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

部分代码如下所示:

640?wx_fmt=png

640?wx_fmt=png

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

配置界面参考

 如下图所示: 

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

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);}
 国际支付宝分账参考界面

640?wx_fmt=png

支付回调
 目的

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

 代码参考

640?wx_fmt=png


上图的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

回调逻辑参考:

640?wx_fmt=png


扫码关注

如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


QQ群:

编程交流群<85318032> 

产品交流群<897857351> 

640?wx_fmt=jpeg


更多内容,扫码关注




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

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

相关文章

火车载客(ybtoj-二叉堆)

文章目录题目描述解析我的思路代码题解思路题目描述 解析 我的思路 其实就是线段覆盖的一个变体 贪心的想&#xff1a; 把游客按右端点升序排序 后面的证明就和线段覆盖一样了 如果有两个游客冲突 我们应该选右端点靠右的 因为这样对以后继续在右边出现的游客来说肯定不会更差…

NetCore基于EasyNetQ的高级API使用RabbitMq

一、消息队列消息队列作为分布式系统中的重要组件&#xff0c;常用的有MSMQ&#xff0c;RabbitMq&#xff0c;Kafa&#xff0c;ActiveMQ&#xff0c;RocketMQ。至于各种消息队列的优缺点比较&#xff0c;在这里就不做扩展了&#xff0c;网上资源很多。更多内容可参考 消息队列及…

二分图匹配(二)

文章目录例题&#xff1a;NC20483 [ZJOI2009]假期的宿舍题目描述&#xff1a;题解&#xff1a;NC51316 Going Home题目描述&#xff1a;题解&#xff1a;NC107638 poj3041 Asteroids题目描述&#xff1a;题解&#xff1a;NC20472 [ZJOI2007]矩阵游戏题目描述&#xff1a;题解&a…

质数和分解(动态规划)

文章目录题目描述解析记忆化搜索代码无限背包代码thanks for reading&#xff01;题目描述 解析 很好的题 记忆化搜索 我一开始的思路就是记忆化搜索 为了不重复&#xff0c;搜索的时候规定拆出来一个数A后一会不能再拆比A更小的了 这样就不难写了 &#xff08;忽略我n^2的素…

【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权

上篇文章介绍了如何使用Dapper持久化IdentityServer4&#xff08;以下简称ids4&#xff09;的信息&#xff0c;并实现了sqlserver和mysql两种方式存储&#xff0c;本篇将介绍如何使用ids4进行客户端授权。.netcore项目实战交流群&#xff08;637326624&#xff09;&#xff0c;…

内存管理(ybtoj-二叉堆)

文章目录题目描述解析代码题目描述 解析 这题感觉做的不错 不难看出&#xff0c;要维护一个空闲的优先队列&#xff0c;在每次申请时弹出编号最小的 但是对判断当前哪些被访问的内存重新进入空闲状态是一个难题 最简单的办法是存起来每次扫一遍判断 但这样在极端数据时会TLE&…

[翻译]初试C# 8.0

原文地址: https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/初试C# 8.0昨天我们宣布了Visual Studio 2019的第一个预览版&#xff08;使用Visual Studio 2019提高每个开发人员的工作效率&#xff09;和.NET Core 3.0&#xff08;宣布.NET Core 3预览…

上帝造题的七分钟(ybtoj-树状数组)

文章目录题目描述解析代码thanks for reading&#xff01;题目描述 解析 差点活活恶心死 搬砖题 &#xff08;其实细节没有那么多&#xff0c;还是代码能力太差&#xff09; 利用矩阵的二维差分 加上树状数组搞一搞 就完事了&#xff08;我实在不想再写了 &#xff09; 洛谷…

.NET Core微服务之路:让我们对上一个Demo通讯进行修改,完成RPC通讯

最近一段时间有些事情耽搁了更新&#xff0c;抱歉各位了。上一篇我们简单的介绍了DotNetty通信框架&#xff0c;并简单的介绍了基于DotNetty实现了回路&#xff08;Echo&#xff09;通信过程。我们来回忆一下上一个项目的整个流程&#xff1a;当服务端启动后&#xff0c;绑定并…

Visual Studio 2019 首个预览版本抢先看,有啥新功能?

微软在 Connect 2018 大会上发布Visual Studio 2019 第 1 个预览版本。该预览版本中展示了许多变更&#xff0c;从 IDE 的启动行为&#xff0c;到代码重构功能&#xff1b;从搜索功能的更多用法&#xff0c;到更好的大型项目导航。这个预览版本展现了微软希望尽全力帮助开发人员…

模板:网络流(Dinic算法)

文章目录1.网络最大流题目描述解析反悔边分层&#xff08;避免环流&#xff09;时间优化代码2.费用流描述解析代码1.网络最大流 洛谷P3376 题目描述 给出一个网络图&#xff0c;以及其源点和汇点&#xff0c;求出其网络最大流。 解析 网络流的思想就是在原有的基础上不断进…

NC51272 棋盘覆盖

题目&#xff1a; 给出一张nn(n≤100) 的国际象棋棋盘&#xff0c;其中被删除了一些点&#xff0c;问可以使用多少1*2的多米 诺骨牌进行掩盖。 题解&#xff1a; 先进行黑白染色&#xff0c;相邻的两个黑白就是一个骨牌&#xff0c;又因为一个格子不能放多个骨牌&#xff0c;…

微软推出 VS Code 新特性,为 TypeScript 和 JavaScript 用户提供 AI 辅助开发功能

除了开发人员非常喜欢的IntelliSense和代码完成之外&#xff0c;今年早些时候&#xff0c;微软还发布了IntelliCode&#xff0c;提供了一组 AI 辅助开发功能。VS Code 团队现在宣布了一项新的实验性扩展&#xff0c;将 IntelliCode 带给了 TypeScript 和 JavaScript 用户。VS C…

NC107617 poj3020 Antenna Placement

问题&#xff1a; n * m的矩阵&#xff0c;有一些障碍点&#xff0c;用12的骨牌覆盖所有非障碍点 (12骨牌可重叠&#xff0c;骨牌可越界&#xff0c;骨牌可延伸到障碍点) 问最少需要 多少个。 题解&#xff1a; • 尽量用一个骨牌覆盖两个格子&#xff0c;覆盖不了了再重叠使…

货车运输(洛谷P1967)(倍增)

传送门 文章目录题目描述题目解析代码题目描述 题目解析 本题如果告诉你&#xff0c;城市形成了一棵树&#xff0c;是不是就迎刃而解了呢? 本题的关键就是把稠密图转化为一片森林&#xff08;就是可能有很多棵树啦&#xff09; 怎么转化呢? 考虑哪些边是没用的 如果AB已经可…

.NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发

上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架&#xff0c;具体为什么那样设计我也已经在第十篇文章中进行了说明。不过文章发布后很多人都说了这样的分层不是很合理&#xff0c;什么数据库实体应该跟仓储放在一起形成领域对象&#xff0c;什么ViewModel应…

第1节 连通性强连通、割点和桥(一)

文章目录无向图割点、桥、双连通分量Tarjan算法求割点和桥&#xff08;割边&#xff09;代码&#xff1a;边双连通分量 和 点双连通分量代码边双连通分量 和 点双连通分量 的缩点有向图的弱连通与强连通强连通分量Kosaraju算法Tarjan算法代码&#xff1a;无向图割点、桥、双连通…

连通性(相关练习)

文章目录NC20603 [ZJOI2007]最大半连通子图题目&#xff1a;题解&#xff1a;代码&#xff1a;NC50403 嗅探器题目&#xff1a;题解&#xff1a;代码&#xff1a;NC51269 Network of Schools题目&#xff1a;题解&#xff1a;代码&#xff1a;NC106972 Cow Ski Area题目&#x…

ASP.NET Core WebAPI中使用JWT Bearer认证和授权

为什么是 JWT BearerASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer, OAuth, OpenIdConnect 等,Cookie 认证是一种比较常用本地认证方式, 它由浏览器自动保存并在发送请求时自动附加到请求头中, 更适用于 MVC 等纯网页系统的…

网络流专题(最大流与费用流)(一)

流量网络 • 想要将一些水从S运到T&#xff0c;必须经过一些水站&#xff0c;链接水站的是管道&#xff0c;每条管道都有它的最大能容纳的水量&#xff0c;求最多S到T能流多少流量。 基本概念 • 这是一个典型的网络流模型。我们先了解网络流的有关定义和概念。 • 若有向图G(…