隐藏

基于.Net Core开发的支付SDK,简化支付功能开发

发布:2023/6/13 10:26:07作者:管理员 来源:本站 浏览次数:386

在我们做项目中,不管是电商系统、外卖系统、还是上门维修系统等等,都需要支付功能,这就需要我们与第三方支付平台进行对接,但是第三方平台文档,往往都存在很多小细节问题,基本都需要靠调试来完成支付功能,特别是第三平台升级后,我们又需要进行调整,极其浪费时间。


所以,今天给大家推荐一个基于.Net Core开发的支付SDK,让我们可以快速集成支付功能。

项目简介


这是基于.NetCore 开发的支付SDK,支持微信支付、支付宝支付平台,作者一直在迭代升级,支持最新版本.Net Core 7。

技术架构


1、跨平台:这是基于.NetCore开发的系统,可以部署在Docker,Windows,Linux,Mac;

项目结构


图片


src文件夹为支付宝、微信SDK源码,samples文件夹为示例源码。

SDK功能


1、支持:支付宝、微信支付平台,封装了的所有API,简化操作。


2、微信:支持V2、V3版本。


3、示例代码:包含二维码/条码/声波支付、网页支付、H5支付、APP支付,以及退款流程、订单查等功能的示例。

使用示例


支付宝网页支付,前端源码


<form asp-controller="Alipay" asp-action="PagePay" target="_blank">

   <div asp-validation-summary="All" class="text-danger"></div>

   <div class="form-group">

       <label asp-for="OutTradeNo"></label>

       <input type="text" class="form-control" asp-for="OutTradeNo" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")" />

   </div>

   <div class="form-group">

       <label asp-for="Subject"></label>

       <input type="text" class="form-control" asp-for="Subject" value="电脑网站支付测试" />

   </div>

   <div class="form-group">

       <label asp-for="ProductCode"></label>

       <input type="text" class="form-control" asp-for="ProductCode" value="FAST_INSTANT_TRADE_PAY" />

   </div>

   <div class="form-group">

       <label asp-for="Body"></label>

       <input type="text" class="form-control" asp-for="Body" value="电脑网站支付描述信息" />

   </div>

   <div class="form-group">

       <label asp-for="TotalAmount"></label>

       <input type="text" class="form-control" asp-for="TotalAmount" value="0.01" />

   </div>

   <div class="form-group">

       <label asp-for="ReturnUrl"></label>

       <input type="text" class="form-control" asp-for="ReturnUrl" value="http://domain.com/alipay/return/pagepay" />

   </div>

   <div class="form-group">

       <label asp-for="NotifyUrl"></label>

       <input type="text" class="form-control" asp-for="NotifyUrl" value="http://domain.com/alipay/notify/pagepay" />

   </div>

   <button type="submit" class="btn btn-primary">提交请求</button>

</form>


 


后端源码


处理前端请求的参数,并提交至支付宝。


/// <summary>

/// 电脑网站支付

/// </summary>

/// <param name="viewModel"></param>

[HttpPost]

public async Task<IActionResult> PagePay(AlipayTradePagePayViewModel viewModel)

{

   var model = new AlipayTradePagePayModel

   {

       Body = viewModel.Body,

       Subject = viewModel.Subject,

       TotalAmount = viewModel.TotalAmount,

       OutTradeNo = viewModel.OutTradeNo,

       ProductCode = viewModel.ProductCode

   };

   var req = new AlipayTradePagePayRequest();

   req.SetBizModel(model);

   req.SetNotifyUrl(viewModel.NotifyUrl);

   req.SetReturnUrl(viewModel.ReturnUrl);


   var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value);

   return Content(response.Body, "text/html", Encoding.UTF8);

}


 


支付成功异步回调


/// <summary>

/// 电脑网站支付异步通知

/// </summary>

[Route("pagepay")]

[HttpPost]

public async Task<IActionResult> PagePay()

{

   try

   {

       var notify = await _client.CertificateExecuteAsync<AlipayTradePagePayNotify>(Request, _optionsAccessor.Value);

       switch (notify.TradeStatus)

       {

           case AlipayTradeStatus.Success: // 支付成功

               _logger.LogInformation("电脑网站支付异步通知-交易支付成功 => OutTradeNo: " + notify.OutTradeNo);

               return AlipayNotifyResult.Success;

           case AlipayTradeStatus.Closed: // 交易关闭

               _logger.LogInformation("电脑网站支付异步通知-未付款交易超时关闭,或支付完成后全额退款 => OutTradeNo: " + notify.OutTradeNo);

               return AlipayNotifyResult.Success;

           case AlipayTradeStatus.Finished: // 交易完结

               _logger.LogInformation("电脑网站支付异步通知-交易结束,不可退款 => OutTradeNo: " + notify.OutTradeNo);

               return AlipayNotifyResult.Success;

           default:

               return AlipayNotifyResult.Failure;

       }

   }

   catch (AlipayException ex)

   {

       _logger.LogWarning("出现异常: " + ex.Message);

       return AlipayNotifyResult.Failure;

   }}


 


项目地址


   Github:


   https://github.com/essensoft/paylink


   Gitee:


   https://gitee.com/essensoft/paylink