From dbf044662b9a75e5b42f8f76c65faaf89c95bb21 Mon Sep 17 00:00:00 2001 From: zhengyuxuan <zhengyuxuan1995> Date: 星期三, 02 四月 2025 19:36:48 +0800 Subject: [PATCH] fix:bug修复 --- LifePayment/LifePayment.Domain/Ali/AliPayApi.cs | 143 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 138 insertions(+), 5 deletions(-) diff --git a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs index 1a5ec58..e989244 100644 --- a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs +++ b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs @@ -5,6 +5,7 @@ using LifePayment.Domain.Shared; using Microsoft.Extensions.Options; using Nest; +using Spire.Pdf; using System; using System.Collections; using System.Collections.Generic; @@ -17,12 +18,14 @@ { private readonly Config _options; + public const string SDKVERSION = "alipay-easysdk-net-2.0.0"; protected Alipay.EasySDK.Kernel.Client _kernel; public AliPayApi( - IOptionsMonitor<Config> optionsMonitor, Client kernel) + IOptionsMonitor<Config> optionsMonitor, string optionsName = null) { + Alipay.EasySDK.Kernel.Context context = new Alipay.EasySDK.Kernel.Context(optionsName.IsNullOrEmpty() ? optionsMonitor.CurrentValue : optionsMonitor.Get(optionsName), SDKVERSION); _options = optionsMonitor.CurrentValue; - _kernel = kernel; + this._kernel = new Client(context); } public async Task<AlipayTradePrecreateResponse> GetAliPayQRCode(GetPayQrCodeInput input) @@ -46,7 +49,6 @@ return response; } - /// <summary> /// 鏌ヨ鏀粯瀹濋��娆捐鍗曚俊鎭� /// </summary> @@ -54,13 +56,13 @@ /// <returns></returns> public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input) { - AlipayTradeFastpayRefundQueryResponse response = await Factory.Payment.Common().QueryRefundAsync(input.OutTradeNo, input.OutTradeNo); + AlipayTradeFastpayRefundQueryResponse response = await QueryTradeRefund(input.OutTradeNo, input.OutRefundNo); return response; } public async Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input) { - AlipayTradeRefundResponse response = await TradeRefund(input.OutTradeNo,input.OutRefundNo, input.RefundAmount); + AlipayTradeRefundResponse response = await TradeRefund(input.OutTradeNo, input.OutRefundNo, input.RefundAmount); return response; } @@ -194,5 +196,136 @@ throw new TeaUnretryableException(_lastRequest, innerException); } + private async Task<AlipayTradeFastpayRefundQueryResponse> QueryTradeRefund(string outTradeNo, string outRequestNo) + { + Dictionary<string, object> runtime_ = new Dictionary<string, object> + { + { + "ignoreSSL", + _kernel.GetConfig("ignoreSSL") + }, + { + "httpProxy", + _kernel.GetConfig("httpProxy") + }, + { "connectTimeout", 15000 }, + { "readTimeout", 15000 }, + { + "retry", + new Dictionary<string, int?> { { "maxAttempts", 0 } } + } + }; + TeaRequest _lastRequest = null; + Exception innerException = null; + long _now = DateTime.Now.Millisecond; + int _retryTimes = 0; + while (TeaCore.AllowRetry((IDictionary)runtime_["retry"], _retryTimes, _now)) + { + if (_retryTimes > 0) + { + int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes); + if (backoffTime > 0) + { + TeaCore.Sleep(backoffTime); + } + } + + _retryTimes++; + try + { + TeaRequest teaRequest = new TeaRequest(); + Dictionary<string, string> dictionary = new Dictionary<string, string> + { + { "method", "alipay.trade.fastpay.refund.query" }, + { + "app_id", + _kernel.GetConfig("appId") + }, + { + "timestamp", + _kernel.GetTimestamp() + }, + { "format", "json" }, + { "version", "1.0" }, + { + "alipay_sdk", + _kernel.GetSdkVersion() + }, + { "charset", "UTF-8" }, + { + "sign_type", + _kernel.GetConfig("signType") + }, + { + "app_cert_sn", + _kernel.GetMerchantCertSN() + }, + { + "alipay_root_cert_sn", + _kernel.GetAlipayRootCertSN() + } + }; + var queryOptions = new string[] { "gmt_refund_pay" }; + Dictionary<string, object> bizParams = new Dictionary<string, object> + { + { "out_trade_no", outTradeNo }, + { "out_request_no", outRequestNo }, + { "query_options", queryOptions } + }; + Dictionary<string, string> dictionary2 = new Dictionary<string, string>(); + teaRequest.Protocol = _kernel.GetConfig("protocol"); + teaRequest.Method = "POST"; + teaRequest.Pathname = "/gateway.do"; + teaRequest.Headers = new Dictionary<string, string> + { + { + "host", + _kernel.GetConfig("gatewayHost") + }, + { "content-type", "application/x-www-form-urlencoded;charset=utf-8" } + }; + teaRequest.Query = _kernel.SortMap(TeaConverter.merge<string>(new object[3] + { + new Dictionary<string, string> { + { + "sign", + _kernel.Sign(dictionary, bizParams, dictionary2, _kernel.GetConfig("merchantPrivateKey")) + } }, + dictionary, + dictionary2 + })); + teaRequest.Body = TeaCore.BytesReadable(_kernel.ToUrlEncodedRequestBody(bizParams)); + _lastRequest = teaRequest; + TeaResponse response = await TeaCore.DoActionAsync(teaRequest, runtime_); + Dictionary<string, object> respMap = await _kernel.ReadAsJsonAsync(response, "alipay.trade.fastpay.refund.query"); + if (_kernel.IsCertMode()) + { + if (_kernel.Verify(respMap, _kernel.ExtractAlipayPublicKey(_kernel.GetAlipayCertSN(respMap)))) + { + return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(_kernel.ToRespModel(respMap)); + } + } + else if (_kernel.Verify(respMap, _kernel.GetConfig("alipayPublicKey"))) + { + return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(_kernel.ToRespModel(respMap)); + } + + throw new TeaException(new Dictionary<string, string> { { "message", "楠岀澶辫触锛岃妫�鏌ユ敮浠樺疂鍏挜璁剧疆鏄惁姝g‘銆�" } }); + } + catch (Exception ex) + { + if (TeaCore.IsRetryable(ex)) + { + innerException = ex; + continue; + } + + throw ex; + } + } + + throw new TeaUnretryableException(_lastRequest, innerException); + } + } } \ No newline at end of file -- Gitblit v1.9.1