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

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.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using CoreCms.Net.WeChat.Service.HttpClients;
using Essensoft.Paylink.WeChatPay;
using Essensoft.Paylink.WeChatPay.V2;
@@ -123,7 +124,7 @@ namespace CoreCms.Net.Services
{
var jObj = (JObject)JsonConvert.DeserializeObject(entity.parameters);
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);
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 =>
@@ -352,18 +353,5 @@ namespace CoreCms.Net.Services
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_type: this.type,
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

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.Mvc;
using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using NPOI.HSSF.UserModel;
using SqlSugar;
using CoreCms.Net.Services;
namespace CoreCms.Net.Web.Admin.Controllers
{
@@ -49,7 +52,8 @@ namespace CoreCms.Net.Web.Admin.Controllers
private readonly ICoreCmsBillPaymentsServices _coreCmsBillPaymentsServices;
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IWeChatPayClient _client;
private readonly IOptions<WeChatPayOptions> _optionsAccessor;
private readonly IWeChatPayConfigServices _weChatPayConfigServices;
/// <summary>
@@ -58,14 +62,14 @@ namespace CoreCms.Net.Web.Admin.Controllers
/// <param name="webHostEnvironment"></param>
/// <param name="coreCmsBillPaymentsServices"></param>
/// <param name="client"></param>
/// <param name="optionsAccessor"></param>
/// <param name="weChatPayConfigServices"></param>
public CoreCmsBillPaymentsController(IWebHostEnvironment webHostEnvironment
, ICoreCmsBillPaymentsServices coreCmsBillPaymentsServices, IWeChatPayClient client, IOptions<WeChatPayOptions> optionsAccessor)
, ICoreCmsBillPaymentsServices coreCmsBillPaymentsServices, IWeChatPayClient client, IWeChatPayConfigServices weChatPayConfigServices)
{
_webHostEnvironment = webHostEnvironment;
_coreCmsBillPaymentsServices = coreCmsBillPaymentsServices;
_client = client;
_optionsAccessor = optionsAccessor;
_weChatPayConfigServices = weChatPayConfigServices;
}
#region ============================================================
@@ -508,9 +512,9 @@ namespace CoreCms.Net.Web.Admin.Controllers
jm.msg = "不存在此信息";
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;
}
@@ -521,32 +525,79 @@ namespace CoreCms.Net.Web.Admin.Controllers
}
var request = new WeChatPayOrderQueryRequest
if (model.paymentCode == GlobalEnumVars.PaymentsTypes.wechatpay.ToString())
{
//微信订单号
//TransactionId = model.TransactionId,
//商户订单号
OutTradeNo = model.paymentId
};
var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
var tradeType = GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString();
if (!string.IsNullOrEmpty(model.parameters))
{
var jObj = (JObject)JsonConvert.DeserializeObject(model.parameters);
if (jObj != null && jObj.TryGetValue("trade_type", out var 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
{
jm.code = 1;
jm.msg = response.TradeStateDesc;
jm.msg = "错误类型的支付方式";
}
return jm;
}

View File

@@ -1300,14 +1300,14 @@
支付单表
</summary>
</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>
<param name="webHostEnvironment"></param>
<param name="coreCmsBillPaymentsServices"></param>
<param name="client"></param>
<param name="optionsAccessor"></param>
<param name="weChatPayConfigServices"></param>
</member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.GetPageList">
<summary>

View File

@@ -69,7 +69,7 @@
</script>
<script type="text/html" id="LAY-app-CoreCmsBillPayments-tableBox-bar">
<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>
{{# } }}
</script>
@@ -224,6 +224,7 @@
//执行刷新操作
function doRefresh(obj) {
coreHelper.Post("Api/CoreCmsBillPayments/doRefresh", { id: obj.data.paymentId }, function (e) {
table.reloadData('LAY-app-CoreCmsBillPayments-tableBox');
layer.msg(e.msg);
});
}