From d5ec56c6dd3c84b9a889af585385f3ecfee72074 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 31 三月 2025 16:19:32 +0800
Subject: [PATCH] fix: LifePayUserMesssageByPhone
---
LifePayment/LifePayment.Domain/Ali/AliPayApi.cs | 290 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 288 insertions(+), 2 deletions(-)
diff --git a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
index 4174021..b3f7f32 100644
--- a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
+++ b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
@@ -5,7 +5,12 @@
using LifePayment.Domain.Shared;
using Microsoft.Extensions.Options;
using Nest;
+using Spire.Pdf;
+using System;
+using System.Collections;
+using System.Collections.Generic;
using System.Threading.Tasks;
+using Tea;
namespace LifePayment.Domain
{
@@ -13,10 +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)
+ 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;
+ this._kernel = new Client(context);
}
public async Task<AlipayTradePrecreateResponse> GetAliPayQRCode(GetPayQrCodeInput input)
@@ -29,17 +38,294 @@
return response;
}
+ /// <summary>
+ /// 鏌ヨ鏀粯瀹濇敮浠樿鍗曚俊鎭�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
public async Task<AlipayTradeQueryResponse> OrderInQuiry(OrderInQuiryInput input)
{
AlipayTradeQueryResponse response = Factory.Payment.Common().Query(input.OutTradeNo);
return response;
}
+ /// <summary>
+ /// 鏌ヨ鏀粯瀹濋��娆捐鍗曚俊鎭�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input)
+ {
+ AlipayTradeFastpayRefundQueryResponse response = await QueryTradeRefund(input.OutTradeNo, input.OutTradeNo);
+ return response;
+ }
+
public async Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input)
{
- AlipayTradeRefundResponse response = Factory.Payment.Common().Refund(input.OutTradeNo,input.RefundAmount);
+ AlipayTradeRefundResponse response = await TradeRefund(input.OutTradeNo, input.OutRefundNo, input.RefundAmount);
return response;
}
+ private async Task<AlipayTradeRefundResponse> TradeRefund(string outTradeNo, string outRefundNo, string refundAmount)
+ {
+ 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.refund" },
+ {
+ "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()
+ }
+ };
+ Dictionary<string, object> bizParams = new Dictionary<string, object>
+ {
+ { "out_trade_no", outTradeNo },
+ { "out_request_no", outRefundNo },
+ { "refund_amount", refundAmount }
+ };
+ 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.refund");
+ if (_kernel.IsCertMode())
+ {
+ if (_kernel.Verify(respMap, _kernel.ExtractAlipayPublicKey(_kernel.GetAlipayCertSN(respMap))))
+ {
+ return TeaModel.ToObject<AlipayTradeRefundResponse>(_kernel.ToRespModel(respMap));
+ }
+ }
+ else if (_kernel.Verify(respMap, _kernel.GetConfig("alipayPublicKey")))
+ {
+ return TeaModel.ToObject<AlipayTradeRefundResponse>(_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);
+ }
+
+ 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