优化后台查询微信支付单支付状态

This commit is contained in:
jianweie
2023-04-26 12:06:59 +08:00
parent 8a12ab7ea5
commit 23781304d8
6 changed files with 117 additions and 43 deletions

View File

@@ -18,6 +18,7 @@ using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using CoreCms.Net.WeChat.Service.HttpClients; using CoreCms.Net.WeChat.Service.HttpClients;
using Essensoft.Paylink.WeChatPay; using Essensoft.Paylink.WeChatPay;
using Essensoft.Paylink.WeChatPay.V2; using Essensoft.Paylink.WeChatPay.V2;
@@ -123,7 +124,7 @@ namespace CoreCms.Net.Services
{ {
var jObj = (JObject)JsonConvert.DeserializeObject(entity.parameters); var jObj = (JObject)JsonConvert.DeserializeObject(entity.parameters);
if (jObj != null && jObj.TryGetValue("trade_type", out var value)) if (jObj != null && jObj.TryGetValue("trade_type", out var value))
tradeType = GetTradeType(value.ObjectToString()); tradeType = PayHelper.GetWeiChatPayTradeType(value.ObjectToString());
} }
@@ -294,7 +295,7 @@ namespace CoreCms.Net.Services
{ {
var jObj = (JObject)JsonConvert.DeserializeObject(paymentInfo.parameters); var jObj = (JObject)JsonConvert.DeserializeObject(paymentInfo.parameters);
if (jObj != null && jObj.TryGetValue("trade_type", out var value)) if (jObj != null && jObj.TryGetValue("trade_type", out var value))
tradeType = GetTradeType(value.ObjectToString()); tradeType = PayHelper.GetWeiChatPayTradeType(value.ObjectToString());
} }
var config = await _weChatPayConfigServices.QueryByClauseAsync(p => var config = await _weChatPayConfigServices.QueryByClauseAsync(p =>
@@ -352,18 +353,5 @@ namespace CoreCms.Net.Services
return jm; return jm;
} }
private static string GetTradeType(string tradeType)
{
if (tradeType != GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.JSAPI_OFFICIAL.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.NATIVE.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.APP.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.MWEB.ToString()
)
return "JSAPI";
if (tradeType == GlobalEnumVars.WeiChatPayTradeType.JSAPI_OFFICIAL.ToString())
return "JSAPI";
return tradeType;
}
} }
} }

View File

@@ -134,7 +134,7 @@
payment_code: code, payment_code: code,
payment_type: this.type, payment_type: this.type,
params: { params: {
//trade_type: 'NATIVE', trade_type: 'JSAPI',
} }
} }
data.ids = (this.type == this.$globalConstVars.paymentType.common || this.type == this.$globalConstVars.paymentType.pinTuan || this.type == this.$globalConstVars.paymentType.group || this.type == this.$globalConstVars.paymentType.seckill || this.type == this.$globalConstVars.paymentType.bargain || this.type == this.$globalConstVars.paymentType.giveaway || this.type == this.$globalConstVars.paymentType.solitaire || this.type == this.$globalConstVars.paymentType.transactionComponent || this.type == this.$globalConstVars.paymentType.serviceOrder) ? this.orderId : this.uid data.ids = (this.type == this.$globalConstVars.paymentType.common || this.type == this.$globalConstVars.paymentType.pinTuan || this.type == this.$globalConstVars.paymentType.group || this.type == this.$globalConstVars.paymentType.seckill || this.type == this.$globalConstVars.paymentType.bargain || this.type == this.$globalConstVars.paymentType.giveaway || this.type == this.$globalConstVars.paymentType.solitaire || this.type == this.$globalConstVars.paymentType.transactionComponent || this.type == this.$globalConstVars.paymentType.serviceOrder) ? this.orderId : this.uid

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
namespace CoreCms.Net.Utility.Helper
{
public static class PayHelper
{
/// <summary>
/// 获取微信支付类型
/// </summary>
/// <param name="tradeType"></param>
/// <returns></returns>
public static string GetWeiChatPayTradeType(string tradeType)
{
if (tradeType != GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.JSAPI_OFFICIAL.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.NATIVE.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.APP.ToString() &&
tradeType != GlobalEnumVars.WeiChatPayTradeType.MWEB.ToString()
)
return GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString();
if (tradeType == GlobalEnumVars.WeiChatPayTradeType.JSAPI_OFFICIAL.ToString())
return GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString();
return tradeType;
}
}
}

View File

@@ -31,8 +31,11 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using NPOI.HSSF.UserModel; using NPOI.HSSF.UserModel;
using SqlSugar; using SqlSugar;
using CoreCms.Net.Services;
namespace CoreCms.Net.Web.Admin.Controllers namespace CoreCms.Net.Web.Admin.Controllers
{ {
@@ -49,7 +52,8 @@ namespace CoreCms.Net.Web.Admin.Controllers
private readonly ICoreCmsBillPaymentsServices _coreCmsBillPaymentsServices; private readonly ICoreCmsBillPaymentsServices _coreCmsBillPaymentsServices;
private readonly IWebHostEnvironment _webHostEnvironment; private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IWeChatPayClient _client; private readonly IWeChatPayClient _client;
private readonly IOptions<WeChatPayOptions> _optionsAccessor;
private readonly IWeChatPayConfigServices _weChatPayConfigServices;
/// <summary> /// <summary>
@@ -58,14 +62,14 @@ namespace CoreCms.Net.Web.Admin.Controllers
/// <param name="webHostEnvironment"></param> /// <param name="webHostEnvironment"></param>
/// <param name="coreCmsBillPaymentsServices"></param> /// <param name="coreCmsBillPaymentsServices"></param>
/// <param name="client"></param> /// <param name="client"></param>
/// <param name="optionsAccessor"></param> /// <param name="weChatPayConfigServices"></param>
public CoreCmsBillPaymentsController(IWebHostEnvironment webHostEnvironment public CoreCmsBillPaymentsController(IWebHostEnvironment webHostEnvironment
, ICoreCmsBillPaymentsServices coreCmsBillPaymentsServices, IWeChatPayClient client, IOptions<WeChatPayOptions> optionsAccessor) , ICoreCmsBillPaymentsServices coreCmsBillPaymentsServices, IWeChatPayClient client, IWeChatPayConfigServices weChatPayConfigServices)
{ {
_webHostEnvironment = webHostEnvironment; _webHostEnvironment = webHostEnvironment;
_coreCmsBillPaymentsServices = coreCmsBillPaymentsServices; _coreCmsBillPaymentsServices = coreCmsBillPaymentsServices;
_client = client; _client = client;
_optionsAccessor = optionsAccessor; _weChatPayConfigServices = weChatPayConfigServices;
} }
#region ============================================================ #region ============================================================
@@ -508,9 +512,9 @@ namespace CoreCms.Net.Web.Admin.Controllers
jm.msg = "不存在此信息"; jm.msg = "不存在此信息";
return jm; return jm;
} }
if (model.paymentCode != GlobalEnumVars.PaymentsTypes.wechatpay.ToString()) if (model.paymentCode != GlobalEnumVars.PaymentsTypes.wechatpay.ToString() && model.paymentCode != GlobalEnumVars.PaymentsTypes.alipay.ToString())
{ {
jm.msg = "此更新暂时仅支持微信支付查询"; jm.msg = "此更新暂时仅支持微信支付及支付宝支付查询";
return jm; return jm;
} }
@@ -521,32 +525,79 @@ namespace CoreCms.Net.Web.Admin.Controllers
} }
var request = new WeChatPayOrderQueryRequest if (model.paymentCode == GlobalEnumVars.PaymentsTypes.wechatpay.ToString())
{ {
//微信订单号 var tradeType = GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString();
//TransactionId = model.TransactionId, if (!string.IsNullOrEmpty(model.parameters))
//商户订单号 {
OutTradeNo = model.paymentId var jObj = (JObject)JsonConvert.DeserializeObject(model.parameters);
}; if (jObj != null && jObj.TryGetValue("trade_type", out var value))
var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); tradeType = PayHelper.GetWeiChatPayTradeType(value.ObjectToString());
}
if (response is { ReturnCode: WeChatPayCode.Success, ResultCode: WeChatPayCode.Success, TradeState: WeChatPayCode.Success }) var config = await _weChatPayConfigServices.QueryByClauseAsync(p => p.isDefault == true && p.isEnable == true && p.appType == tradeType);
if (config == null)
{
jm.msg = "未获取到你的支付配置信息";
return jm;
}
//构建linkPay请求配置实体
var payOptions = new WeChatPayOptions
{
AppId = config.appId,
MchId = config.mchId,
APIKey = config.apiKey,
APIv3Key = config.apiV3Key,
Certificate = config.certificate,
RsaPublicKey = config.rsaPublicKey,
SubAppId = config.subAppId,
SubMchId = config.subMchId
};
var request = new WeChatPayOrderQueryRequest
{
//微信订单号
//TransactionId = model.TransactionId,
//商户订单号
OutTradeNo = model.paymentId
};
var response = await _client.ExecuteAsync(request, payOptions);
if (response is { ReturnCode: WeChatPayCode.Success, ResultCode: WeChatPayCode.Success, TradeState: WeChatPayCode.Success })
{
var money = Math.Round((decimal)response.TotalFee / 100, 2);
await _coreCmsBillPaymentsServices.ToUpdate(response.OutTradeNo,
(int)GlobalEnumVars.BillPaymentsStatus.Payed,
GlobalEnumVars.PaymentsTypes.wechatpay.ToString(), money, response.ResultCode,
response.TransactionId);
jm.code = 0;
jm.msg = "刷新成功";
jm.data = response;
}
else
{
jm.code = 1;
jm.data = response;
jm.msg = response.TradeState == "NOTPAY" ? response.TradeStateDesc : response.ErrCodeDes;
}
}
else if (model.paymentCode == GlobalEnumVars.PaymentsTypes.alipay.ToString())
{ {
var money = Math.Round((decimal)response.TotalFee / 100, 2);
await _coreCmsBillPaymentsServices.ToUpdate(response.OutTradeNo,
(int)GlobalEnumVars.BillPaymentsStatus.Payed,
GlobalEnumVars.PaymentsTypes.wechatpay.ToString(), money, response.ResultCode,
response.TransactionId);
jm.code = 0;
jm.msg = "刷新成功";
jm.data = response;
} }
else else
{ {
jm.code = 1; jm.msg = "错误类型的支付方式";
jm.msg = response.TradeStateDesc;
} }
return jm; return jm;
} }

View File

@@ -1300,14 +1300,14 @@
支付单表 支付单表
</summary> </summary>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.#ctor(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,CoreCms.Net.IServices.ICoreCmsBillPaymentsServices,Essensoft.Paylink.WeChatPay.V2.IWeChatPayClient,Microsoft.Extensions.Options.IOptions{Essensoft.Paylink.WeChatPay.WeChatPayOptions})"> <member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.#ctor(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,CoreCms.Net.IServices.ICoreCmsBillPaymentsServices,Essensoft.Paylink.WeChatPay.V2.IWeChatPayClient,CoreCms.Net.IServices.IWeChatPayConfigServices)">
<summary> <summary>
构造函数 构造函数
</summary> </summary>
<param name="webHostEnvironment"></param> <param name="webHostEnvironment"></param>
<param name="coreCmsBillPaymentsServices"></param> <param name="coreCmsBillPaymentsServices"></param>
<param name="client"></param> <param name="client"></param>
<param name="optionsAccessor"></param> <param name="weChatPayConfigServices"></param>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.GetPageList"> <member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.GetPageList">
<summary> <summary>

View File

@@ -69,7 +69,7 @@
</script> </script>
<script type="text/html" id="LAY-app-CoreCmsBillPayments-tableBox-bar"> <script type="text/html" id="LAY-app-CoreCmsBillPayments-tableBox-bar">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a> <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
{{# if(d.paymentCode == 'wechatpay' && d.status !=2){ }} {{# if((d.paymentCode == 'wechatpay' || d.paymentCode == 'alipay') && d.status !=2){ }}
<a class="layui-btn layui-btn-xs" lay-event="doRefresh">刷新</a> <a class="layui-btn layui-btn-xs" lay-event="doRefresh">刷新</a>
{{# } }} {{# } }}
</script> </script>
@@ -224,6 +224,7 @@
//执行刷新操作 //执行刷新操作
function doRefresh(obj) { function doRefresh(obj) {
coreHelper.Post("Api/CoreCmsBillPayments/doRefresh", { id: obj.data.paymentId }, function (e) { coreHelper.Post("Api/CoreCmsBillPayments/doRefresh", { id: obj.data.paymentId }, function (e) {
table.reloadData('LAY-app-CoreCmsBillPayments-tableBox');
layer.msg(e.msg); layer.msg(e.msg);
}); });
} }