|
|
@@ -3,22 +3,22 @@
|
|
|
/// <summary>
|
|
|
/// 微信支付服务
|
|
|
/// </summary>
|
|
|
-[ApiDescriptionSettings(Name = "微信支付", Order = 99)]
|
|
|
+[ApiDescriptionSettings(Order = 99)]
|
|
|
public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
{
|
|
|
- private readonly SqlSugarRepository<WechatPay> _wechatPayUserRep;
|
|
|
+ private readonly SqlSugarRepository<WeChatPay> _weChatPayUserRep;
|
|
|
|
|
|
- private readonly WechatPayOptions _wechatPayOptions;
|
|
|
- public readonly WechatTenpayClient WechatTenpayClient;
|
|
|
+ private readonly WeChatPayOptions _weChatPayOptions;
|
|
|
+ public readonly WechatTenpayClient WeChatTenpayClient;
|
|
|
private readonly PayCallBackOptions _payCallBackOptions;
|
|
|
|
|
|
- public WeChatPayService(SqlSugarRepository<WechatPay> wechatPayUserRep,
|
|
|
- IOptions<WechatPayOptions> wechatPayOptions,
|
|
|
+ public WeChatPayService(SqlSugarRepository<WeChatPay> weChatPayUserRep,
|
|
|
+ IOptions<WeChatPayOptions> weChatPayOptions,
|
|
|
IOptions<PayCallBackOptions> payCallBackOptions)
|
|
|
{
|
|
|
- _wechatPayUserRep = wechatPayUserRep;
|
|
|
- _wechatPayOptions = wechatPayOptions.Value;
|
|
|
- WechatTenpayClient = CreateTenpayClient();
|
|
|
+ _weChatPayUserRep = weChatPayUserRep;
|
|
|
+ _weChatPayOptions = weChatPayOptions.Value;
|
|
|
+ WeChatTenpayClient = CreateTenpayClient();
|
|
|
_payCallBackOptions = payCallBackOptions.Value;
|
|
|
}
|
|
|
|
|
|
@@ -30,10 +30,10 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
{
|
|
|
var tenpayClientOptions = new WechatTenpayClientOptions()
|
|
|
{
|
|
|
- MerchantId = _wechatPayOptions.MerchantId,
|
|
|
- MerchantV3Secret = _wechatPayOptions.MerchantV3Secret,
|
|
|
- MerchantCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber,
|
|
|
- MerchantCertificatePrivateKey = CommonUtil.GetRootPathFileText(_wechatPayOptions.MerchantCertificatePrivateKey),
|
|
|
+ MerchantId = _weChatPayOptions.MerchantId,
|
|
|
+ MerchantV3Secret = _weChatPayOptions.MerchantV3Secret,
|
|
|
+ MerchantCertificateSerialNumber = _weChatPayOptions.MerchantCertificateSerialNumber,
|
|
|
+ MerchantCertificatePrivateKey = CommonUtil.GetRootPathFileText(_weChatPayOptions.MerchantCertificatePrivateKey),
|
|
|
PlatformCertificateManager = new InMemoryCertificateManager()
|
|
|
};
|
|
|
return new WechatTenpayClient(tenpayClientOptions);
|
|
|
@@ -45,37 +45,37 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("/weChatPay/genPayPara")]
|
|
|
- public dynamic GenerateParametersForJsapiPay(WechatPayParaInput input)
|
|
|
+ public dynamic GenerateParametersForJsapiPay(WeChatPayParaInput input)
|
|
|
{
|
|
|
- return WechatTenpayClient.GenerateParametersForJsapiPayRequest(_wechatPayOptions.AppId, input.PrepayId);
|
|
|
+ return WeChatTenpayClient.GenerateParametersForJsapiPayRequest(_weChatPayOptions.AppId, input.PrepayId);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 微信支付统一下单获取Id(商户直连)
|
|
|
/// </summary>
|
|
|
[HttpPost("/weChatPay/payTransaction")]
|
|
|
- public async Task<dynamic> CreatePayTransaction([FromBody] WechatPayTransactionInput input)
|
|
|
+ public async Task<dynamic> CreatePayTransaction([FromBody] WeChatPayTransactionInput input)
|
|
|
{
|
|
|
var request = new CreatePayTransactionJsapiRequest()
|
|
|
{
|
|
|
OutTradeNumber = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000), // YitIdHelper.NextId(), // 订单号
|
|
|
- AppId = _wechatPayOptions.AppId,
|
|
|
+ AppId = _weChatPayOptions.AppId,
|
|
|
Description = input.Description,
|
|
|
Attachment = input.Attachment,
|
|
|
GoodsTag = input.GoodsTag,
|
|
|
ExpireTime = DateTimeOffset.Now.AddMinutes(10),
|
|
|
- NotifyUrl = _payCallBackOptions.WechatPayUrl,
|
|
|
+ NotifyUrl = _payCallBackOptions.WeChatPayUrl,
|
|
|
Amount = new CreatePayTransactionJsapiRequest.Types.Amount() { Total = input.Total },
|
|
|
Payer = new CreatePayTransactionJsapiRequest.Types.Payer() { OpenId = input.OpenId }
|
|
|
};
|
|
|
- var response = await WechatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
|
|
|
+ var response = await WeChatTenpayClient.ExecuteCreatePayTransactionJsapiAsync(request);
|
|
|
if (!response.IsSuccessful())
|
|
|
throw Oops.Oh(response.ErrorMessage);
|
|
|
|
|
|
// 保存订单信息
|
|
|
- var wechatPay = new WechatPay()
|
|
|
+ var wechatPay = new WeChatPay()
|
|
|
{
|
|
|
- MerchantId = _wechatPayOptions.MerchantId,
|
|
|
+ MerchantId = _weChatPayOptions.MerchantId,
|
|
|
OutTradeNumber = request.OutTradeNumber,
|
|
|
Description = input.Description,
|
|
|
Attachment = input.Attachment,
|
|
|
@@ -83,7 +83,7 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
Total = input.Total,
|
|
|
OpenId = input.OpenId
|
|
|
};
|
|
|
- await _wechatPayUserRep.InsertAsync(wechatPay);
|
|
|
+ await _weChatPayUserRep.InsertAsync(wechatPay);
|
|
|
|
|
|
return new
|
|
|
{
|
|
|
@@ -96,34 +96,34 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
/// 微信支付统一下单获取Id(服务商模式)
|
|
|
/// </summary>
|
|
|
[HttpPost("/weChatPay/payPartnerTransaction")]
|
|
|
- public async Task<dynamic> CreatePayPartnerTransaction([FromBody] WechatPayTransactionInput input)
|
|
|
+ public async Task<dynamic> CreatePayPartnerTransaction([FromBody] WeChatPayTransactionInput input)
|
|
|
{
|
|
|
var request = new CreatePayPartnerTransactionJsapiRequest()
|
|
|
{
|
|
|
OutTradeNumber = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(100, 1000), // YitIdHelper.NextId(), // 订单号
|
|
|
- AppId = _wechatPayOptions.AppId,
|
|
|
- MerchantId = _wechatPayOptions.MerchantId,
|
|
|
- SubAppId = _wechatPayOptions.AppId,
|
|
|
- SubMerchantId = _wechatPayOptions.MerchantId,
|
|
|
+ AppId = _weChatPayOptions.AppId,
|
|
|
+ MerchantId = _weChatPayOptions.MerchantId,
|
|
|
+ SubAppId = _weChatPayOptions.AppId,
|
|
|
+ SubMerchantId = _weChatPayOptions.MerchantId,
|
|
|
Description = input.Description,
|
|
|
Attachment = input.Attachment,
|
|
|
GoodsTag = input.GoodsTag,
|
|
|
ExpireTime = DateTimeOffset.Now.AddMinutes(10),
|
|
|
- NotifyUrl = _payCallBackOptions.WechatPayUrl,
|
|
|
+ NotifyUrl = _payCallBackOptions.WeChatPayUrl,
|
|
|
Amount = new CreatePayPartnerTransactionJsapiRequest.Types.Amount() { Total = input.Total },
|
|
|
Payer = new CreatePayPartnerTransactionJsapiRequest.Types.Payer() { OpenId = input.OpenId }
|
|
|
};
|
|
|
- var response = await WechatTenpayClient.ExecuteCreatePayPartnerTransactionJsapiAsync(request);
|
|
|
+ var response = await WeChatTenpayClient.ExecuteCreatePayPartnerTransactionJsapiAsync(request);
|
|
|
if (!response.IsSuccessful())
|
|
|
throw Oops.Oh(response.ErrorMessage);
|
|
|
|
|
|
// 保存订单信息
|
|
|
- var wechatPay = new WechatPay()
|
|
|
+ var wechatPay = new WeChatPay()
|
|
|
{
|
|
|
- AppId = _wechatPayOptions.AppId,
|
|
|
- MerchantId = _wechatPayOptions.MerchantId,
|
|
|
- SubAppId = _wechatPayOptions.AppId,
|
|
|
- SubMerchantId = _wechatPayOptions.MerchantId,
|
|
|
+ AppId = _weChatPayOptions.AppId,
|
|
|
+ MerchantId = _weChatPayOptions.MerchantId,
|
|
|
+ SubAppId = _weChatPayOptions.AppId,
|
|
|
+ SubMerchantId = _weChatPayOptions.MerchantId,
|
|
|
OutTradeNumber = request.OutTradeNumber,
|
|
|
Description = input.Description,
|
|
|
Attachment = input.Attachment,
|
|
|
@@ -131,7 +131,7 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
Total = input.Total,
|
|
|
OpenId = input.OpenId
|
|
|
};
|
|
|
- await _wechatPayUserRep.InsertAsync(wechatPay);
|
|
|
+ await _weChatPayUserRep.InsertAsync(wechatPay);
|
|
|
|
|
|
return new
|
|
|
{
|
|
|
@@ -146,9 +146,9 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
/// <param name="tradeId"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("/weChatPay/payInfo")]
|
|
|
- public async Task<WechatPay> GetWeChatPayInfo(string tradeId)
|
|
|
+ public async Task<WeChatPay> GetWeChatPayInfo(string tradeId)
|
|
|
{
|
|
|
- return await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == tradeId);
|
|
|
+ return await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == tradeId);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -157,20 +157,20 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("/notify/weChatPay/payCallBack")]
|
|
|
[AllowAnonymous]
|
|
|
- public async Task<WechatPayOutput> WeChatPayCallBack()
|
|
|
+ public async Task<WeChatPayOutput> WeChatPayCallBack()
|
|
|
{
|
|
|
using var ms = new MemoryStream();
|
|
|
await App.HttpContext.Request.Body.CopyToAsync(ms);
|
|
|
var b = ms.ToArray();
|
|
|
var callbackJson = Encoding.UTF8.GetString(b);
|
|
|
|
|
|
- var callbackModel = WechatTenpayClient.DeserializeEvent(callbackJson);
|
|
|
+ var callbackModel = WeChatTenpayClient.DeserializeEvent(callbackJson);
|
|
|
if ("TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
|
|
|
{
|
|
|
- var callbackResource = WechatTenpayClient.DecryptEventResource<TransactionResource>(callbackModel);
|
|
|
+ var callbackResource = WeChatTenpayClient.DecryptEventResource<TransactionResource>(callbackModel);
|
|
|
|
|
|
// 修改订单支付状态
|
|
|
- var wechatPay = await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
|
|
|
+ var wechatPay = await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
|
|
|
&& u.MerchantId == callbackResource.MerchantId);
|
|
|
if (wechatPay == null) return null;
|
|
|
//wechatPay.OpenId = callbackResource.Payer.OpenId; // 支付者标识
|
|
|
@@ -185,9 +185,9 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
wechatPay.PayerTotal = callbackResource.Amount.PayerTotal; // 用户支付金额
|
|
|
wechatPay.SuccessTime = callbackResource.SuccessTime; // 支付完成时间
|
|
|
|
|
|
- await _wechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
|
|
|
+ await _weChatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
|
|
|
|
|
|
- return new WechatPayOutput()
|
|
|
+ return new WeChatPayOutput()
|
|
|
{
|
|
|
Total = wechatPay.Total,
|
|
|
Attachment = wechatPay.Attachment,
|
|
|
@@ -211,13 +211,13 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
var b = ms.ToArray();
|
|
|
var callbackJson = Encoding.UTF8.GetString(b);
|
|
|
|
|
|
- var callbackModel = WechatTenpayClient.DeserializeEvent(callbackJson);
|
|
|
+ var callbackModel = WeChatTenpayClient.DeserializeEvent(callbackJson);
|
|
|
if ("TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
|
|
|
{
|
|
|
- var callbackResource = WechatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
|
|
|
+ var callbackResource = WeChatTenpayClient.DecryptEventResource<PartnerTransactionResource>(callbackModel);
|
|
|
|
|
|
// 修改订单支付状态
|
|
|
- var wechatPay = await _wechatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
|
|
|
+ var wechatPay = await _weChatPayUserRep.GetFirstAsync(u => u.OutTradeNumber == callbackResource.OutTradeNumber
|
|
|
&& u.MerchantId == callbackResource.MerchantId);
|
|
|
if (wechatPay == null) return;
|
|
|
//wechatPay.OpenId = callbackResource.Payer.OpenId; // 支付者标识
|
|
|
@@ -232,7 +232,7 @@ public class WeChatPayService : IDynamicApiController, ITransient
|
|
|
wechatPay.PayerTotal = callbackResource.Amount.PayerTotal; // 用户支付金额
|
|
|
wechatPay.SuccessTime = callbackResource.SuccessTime; // 支付完成时间
|
|
|
|
|
|
- await _wechatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
|
|
|
+ await _weChatPayUserRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
|
|
|
}
|
|
|
}
|
|
|
}
|