【升级】升级paylink支付组件。

【优化】优化商家付款到零钱组件。
This commit is contained in:
jianweie code
2023-02-12 02:43:46 +08:00
parent 3a3e7d48d5
commit 60a5b61b02
6 changed files with 43 additions and 48 deletions

View File

@@ -5,8 +5,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Essensoft.Paylink.Alipay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.Alipay" Version="4.1.0" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.1.0" />
<PackageReference Include="InitQ" Version="1.0.0.14" /> <PackageReference Include="InitQ" Version="1.0.0.14" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.20.1" /> <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.20.1" />
</ItemGroup> </ItemGroup>

View File

@@ -6,7 +6,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="DotLiquid" Version="2.2.656" /> <PackageReference Include="DotLiquid" Version="2.2.656" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.1.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -6,8 +6,8 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" /> <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="Essensoft.Paylink.Alipay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.Alipay" Version="4.1.0" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.1.0" />
<PackageReference Include="Flurl.Http" Version="3.2.4" /> <PackageReference Include="Flurl.Http" Version="3.2.4" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" />

View File

@@ -29,16 +29,16 @@ using CoreCms.Net.WeChat.Service.HttpClients;
using Essensoft.Paylink.WeChatPay; using Essensoft.Paylink.WeChatPay;
using Essensoft.Paylink.WeChatPay.V2; using Essensoft.Paylink.WeChatPay.V2;
using Essensoft.Paylink.WeChatPay.V2.Request; using Essensoft.Paylink.WeChatPay.V2.Request;
using Essensoft.Paylink.WeChatPay.V3.Domain;
using Essensoft.Paylink.WeChatPay.V3.Request;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json; using Newtonsoft.Json;
using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings;
using SKIT.FlurlHttpClient.Wechat.TenpayV3;
using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models;
using SqlSugar; using SqlSugar;
using Yitter.IdGenerator; using Yitter.IdGenerator;
using Microsoft.AspNetCore.Hosting;
namespace CoreCms.Net.Services namespace CoreCms.Net.Services
@@ -55,13 +55,15 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsUserBalanceServices _userBalanceServices; private readonly ICoreCmsUserBalanceServices _userBalanceServices;
private readonly ICoreCmsUserWeChatInfoServices _weChatInfoServices; private readonly ICoreCmsUserWeChatInfoServices _weChatInfoServices;
private readonly IOptions<WeChatPayOptions> _optionsAccessor; private readonly IOptions<WeChatPayOptions> _optionsAccessor;
private readonly IWeChatPayClient _client; private readonly IWeChatPayClient _v2Client;
private readonly Essensoft.Paylink.WeChatPay.V3.IWeChatPayClient _v3Client;
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IWebHostEnvironment _webHostEnvironment;
public CoreCmsUserTocashServices(IUnitOfWork unitOfWork, ICoreCmsUserTocashRepository dal, public CoreCmsUserTocashServices(IUnitOfWork unitOfWork, ICoreCmsUserTocashRepository dal,
IServiceProvider serviceProvider, ICoreCmsUserServices userServices, ICoreCmsUserBalanceServices userBalanceServices, ICoreCmsUserWeChatInfoServices weChatInfoServices, IOptions<WeChatPayOptions> optionsAccessor, IWeChatPayClient client, IHttpContextAccessor httpContextAccessor) IServiceProvider serviceProvider, ICoreCmsUserServices userServices, ICoreCmsUserBalanceServices userBalanceServices, ICoreCmsUserWeChatInfoServices weChatInfoServices, IOptions<WeChatPayOptions> optionsAccessor, IWeChatPayClient v2Client, IHttpContextAccessor httpContextAccessor, IWebHostEnvironment webHostEnvironment, Essensoft.Paylink.WeChatPay.V3.IWeChatPayClient v3Client)
{ {
this._dal = dal; this._dal = dal;
base.BaseDal = dal; base.BaseDal = dal;
@@ -71,8 +73,10 @@ namespace CoreCms.Net.Services
_userBalanceServices = userBalanceServices; _userBalanceServices = userBalanceServices;
_weChatInfoServices = weChatInfoServices; _weChatInfoServices = weChatInfoServices;
_optionsAccessor = optionsAccessor; _optionsAccessor = optionsAccessor;
_client = client; _v2Client = v2Client;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_webHostEnvironment = webHostEnvironment;
_v3Client = v3Client;
} }
/// <summary> /// <summary>
@@ -301,7 +305,7 @@ namespace CoreCms.Net.Services
Desc = "余额提现零钱", Desc = "余额提现零钱",
SpBillCreateIp = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1" SpBillCreateIp = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1"
}; };
var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); var response = await _v2Client.ExecuteAsync(request, _optionsAccessor.Value);
if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success) if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
{ {
status = (int)GlobalEnumVars.UserTocashStatus.; status = (int)GlobalEnumVars.UserTocashStatus.;
@@ -359,7 +363,7 @@ namespace CoreCms.Net.Services
Amount = amount, Amount = amount,
Desc = "余额提现银行卡", Desc = "余额提现银行卡",
}; };
var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); var response = await _v2Client.ExecuteAsync(request, _optionsAccessor.Value);
if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success) if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
{ {
status = (int)GlobalEnumVars.UserTocashStatus.; status = (int)GlobalEnumVars.UserTocashStatus.;
@@ -396,41 +400,32 @@ namespace CoreCms.Net.Services
//按分计算 //按分计算
var amount = Convert.ToInt16((info.money - info.withdrawals) * 100); var amount = Convert.ToInt16((info.money - info.withdrawals) * 100);
var palpay = _optionsAccessor.Value; var model = new WeChatPayTransferBatchesBodyModel
var manager = new InMemoryCertificateManager();
var options = new WechatTenpayClientOptions()
{ {
MerchantId = palpay.MchId, AppId = _optionsAccessor.Value.AppId,
MerchantV3Secret = palpay.APIv3Key, BatchName = info.id + "用户提现处理",
MerchantCertificateSerialNumber = "微信商户证书序列号", BatchRemark = info.id + "用户提现处理",
MerchantCertificatePrivateKey = "-----BEGIN PRIVATE KEY-----微信商户证书私钥,即 `apiclient_key.pem` 文件内容-----END PRIVATE KEY-----", TotalAmount = amount,
PlatformCertificateManager = manager // 证书管理器的具体用法请参阅下文的高级技巧与加密、验签有关的章节 TotalNum = 1,
OutBatchNo = "ut" + info.createTime.ToString("yyyyMMddHHmmss"),
TransferDetailList = new List<TransferDetail>()
{
new()
{
OutDetailNo = "ut" + info.id,
TransferAmount = amount,
TransferRemark = "用户提现处理",
OpenId = weChatUserInfo.openid,
UserName = info.accountName
}
}
}; };
var client = new WechatTenpayClient(options);
var request = new CreateTransferBatchRequest(); var request = new WeChatPayTransferBatchesRequest();
request.AppId = palpay.AppId; request.SetBodyModel(model);
request.OutBatchNumber = "ut" + info.createTime.ToString("yyyyMMddHHmmss");
request.BatchName = info.id + "用户提现处理";
request.BatchRemark = info.id + "用户提现处理";
request.TotalAmount = amount;
request.TotalNumber = 1;
request.TransferDetailList = new List<CreateTransferBatchRequest.Types.TransferDetail>();
//转账明细列表
var t = new CreateTransferBatchRequest.Types.TransferDetail
{
OutDetailNumber = "ut" + info.id,
TransferAmount = amount,
TransferRemark = "用户提现处理",
OpenId = weChatUserInfo.openid,
UserName = info.accountName
};
request.TransferDetailList.Add(t);
var response = await client.ExecuteCreateTransferBatchAsync(request); var response = await _v3Client.ExecuteAsync(request, _optionsAccessor.Value);
if (response.IsError == false)
if (response.IsSuccessful())
{ {
status = (int)GlobalEnumVars.UserTocashStatus.; status = (int)GlobalEnumVars.UserTocashStatus.;
var message = JsonConvert.SerializeObject(response); var message = JsonConvert.SerializeObject(response);

View File

@@ -51,8 +51,8 @@
<PackageReference Include="EasyCaching.CSRedis" Version="1.7.0" /> <PackageReference Include="EasyCaching.CSRedis" Version="1.7.0" />
<PackageReference Include="EasyCaching.InMemory" Version="1.7.0" /> <PackageReference Include="EasyCaching.InMemory" Version="1.7.0" />
<PackageReference Include="EasyCaching.Serialization.Json" Version="1.7.0" /> <PackageReference Include="EasyCaching.Serialization.Json" Version="1.7.0" />
<PackageReference Include="Essensoft.Paylink.Alipay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.Alipay" Version="4.1.0" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.1.0" />
<PackageReference Include="IdentityModel" Version="6.0.0" /> <PackageReference Include="IdentityModel" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.ConcurrencyLimiter" Version="7.0.0" /> <PackageReference Include="Microsoft.AspNetCore.ConcurrencyLimiter" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />

View File

@@ -55,8 +55,8 @@
<PackageReference Include="EasyCaching.CSRedis" Version="1.7.0" /> <PackageReference Include="EasyCaching.CSRedis" Version="1.7.0" />
<PackageReference Include="EasyCaching.InMemory" Version="1.7.0" /> <PackageReference Include="EasyCaching.InMemory" Version="1.7.0" />
<PackageReference Include="EasyCaching.Serialization.Json" Version="1.7.0" /> <PackageReference Include="EasyCaching.Serialization.Json" Version="1.7.0" />
<PackageReference Include="Essensoft.Paylink.Alipay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.Alipay" Version="4.1.0" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.14" /> <PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.1.0" />
<PackageReference Include="Hangfire" Version="1.7.31" /> <PackageReference Include="Hangfire" Version="1.7.31" />
<PackageReference Include="Hangfire.AspNetCore" Version="1.7.31" /> <PackageReference Include="Hangfire.AspNetCore" Version="1.7.31" />
<PackageReference Include="Hangfire.Core" Version="1.7.31" /> <PackageReference Include="Hangfire.Core" Version="1.7.31" />