mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-07-16 16:50:43 +08:00
feat(tenpayv2): 升级公共组件
This commit is contained in:
parent
a6763ca683
commit
bf39f8dd83
@ -1,29 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Newtonsoft.Json.Converters
|
||||
{
|
||||
internal class YesOrNoBooleanConverter : JsonConverter<bool>
|
||||
{
|
||||
private readonly JsonConverter<bool?> _converter = new YesOrNoNullableBooleanConverter();
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool ReadJson(JsonReader reader, Type objectType, bool existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
return _converter.ReadJson(reader, objectType, existingValue, hasExistingValue, serializer) ?? default;
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, bool value, JsonSerializer serializer)
|
||||
{
|
||||
_converter.WriteJson(writer, value, serializer);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Newtonsoft.Json.Converters
|
||||
{
|
||||
internal class YesOrNoNullableBooleanConverter : JsonConverter<bool?>
|
||||
{
|
||||
private const string CHAR_YES = "Y";
|
||||
private const string CHAR_NO = "N";
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool? ReadJson(JsonReader reader, Type objectType, bool? existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.Null)
|
||||
{
|
||||
return existingValue;
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.Boolean)
|
||||
{
|
||||
return serializer.Deserialize<bool>(reader);
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.String)
|
||||
{
|
||||
string? value = serializer.Deserialize<string>(reader);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return existingValue;
|
||||
|
||||
if (CHAR_YES.Equals(value))
|
||||
return true;
|
||||
else if (CHAR_NO.Equals(value))
|
||||
return false;
|
||||
}
|
||||
|
||||
throw new JsonReaderException();
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, bool? value, JsonSerializer serializer)
|
||||
{
|
||||
if (value.HasValue)
|
||||
writer.WriteValue(value.Value ? CHAR_YES : CHAR_NO);
|
||||
else
|
||||
writer.WriteNull();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Newtonsoft.Json.Converters
|
||||
{
|
||||
internal class PureDigitalTextDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
|
||||
{
|
||||
private readonly JsonConverter<DateTimeOffset?> _converter = new PureDigitalTextNullableDateTimeOffsetConverter();
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override DateTimeOffset ReadJson(JsonReader reader, Type objectType, DateTimeOffset existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
return _converter.ReadJson(reader, objectType, existingValue, hasExistingValue, serializer) ?? default;
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, DateTimeOffset value, JsonSerializer serializer)
|
||||
{
|
||||
_converter.WriteJson(writer, value, serializer);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Newtonsoft.Json.Converters
|
||||
{
|
||||
internal class PureDigitalTextNullableDateTimeOffsetConverter : JsonConverter<DateTimeOffset?>
|
||||
{
|
||||
internal const string DATETIME_FORMAT = "yyyyMMddHHmmss";
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override DateTimeOffset? ReadJson(JsonReader reader, Type objectType, DateTimeOffset? existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.Null)
|
||||
{
|
||||
return existingValue;
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.String)
|
||||
{
|
||||
string? value = serializer.Deserialize<string>(reader);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return existingValue;
|
||||
|
||||
if (DateTimeOffset.TryParseExact(value, DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTimeOffset result))
|
||||
return result;
|
||||
|
||||
if (DateTimeOffset.TryParse(value, out result))
|
||||
return result;
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.Date)
|
||||
{
|
||||
reader.DateFormatString = DATETIME_FORMAT;
|
||||
return serializer.Deserialize<DateTimeOffset>(reader);
|
||||
}
|
||||
|
||||
throw new JsonReaderException();
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, DateTimeOffset? value, JsonSerializer serializer)
|
||||
{
|
||||
if (value.HasValue)
|
||||
writer.WriteValue(value.Value.ToString(DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo));
|
||||
else
|
||||
writer.WriteNull();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace System.Text.Json.Converters
|
||||
{
|
||||
internal class YesOrNoBooleanConverter : JsonConverter<bool>
|
||||
{
|
||||
private readonly JsonConverter<bool?> _converter = new YesOrNoNullableBooleanConverter();
|
||||
|
||||
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
return _converter.Read(ref reader, typeToConvert, options) ?? default;
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
|
||||
{
|
||||
_converter.Write(writer, value, options);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace System.Text.Json.Converters
|
||||
{
|
||||
internal class YesOrNoNullableBooleanConverter : JsonConverter<bool?>
|
||||
{
|
||||
private const string CHAR_YES = "Y";
|
||||
private const string CHAR_NO = "N";
|
||||
|
||||
public override bool? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.True)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.False)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
string? value = reader.GetString();
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return null;
|
||||
|
||||
if (CHAR_YES.Equals(value))
|
||||
return true;
|
||||
else if (CHAR_NO.Equals(value))
|
||||
return false;
|
||||
}
|
||||
|
||||
throw new JsonException();
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, bool? value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value.HasValue)
|
||||
writer.WriteStringValue(value.Value ? CHAR_YES : CHAR_NO);
|
||||
else
|
||||
writer.WriteNullValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace System.Text.Json.Converters
|
||||
{
|
||||
internal class PureDigitalTextDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
|
||||
{
|
||||
private readonly JsonConverter<DateTimeOffset?> _converter = new PureDigitalTextNullableDateTimeOffsetConverter();
|
||||
|
||||
public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
return _converter.Read(ref reader, typeToConvert, options) ?? default;
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
|
||||
{
|
||||
_converter.Write(writer, value, options);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
using System.Globalization;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace System.Text.Json.Converters
|
||||
{
|
||||
internal class PureDigitalTextNullableDateTimeOffsetConverter : JsonConverter<DateTimeOffset?>
|
||||
{
|
||||
private const string DATETIME_FORMAT = Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter.DATETIME_FORMAT;
|
||||
|
||||
public override DateTimeOffset? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
string? value = reader.GetString();
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return null;
|
||||
|
||||
if (DateTimeOffset.TryParseExact(value, DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTimeOffset result))
|
||||
return result;
|
||||
|
||||
if (DateTimeOffset.TryParse(value, out result))
|
||||
return result;
|
||||
}
|
||||
|
||||
throw new JsonException();
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, DateTimeOffset? value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value.HasValue)
|
||||
writer.WriteStringValue(value.Value.ToString(DATETIME_FORMAT, DateTimeFormatInfo.InvariantInfo));
|
||||
else
|
||||
writer.WriteNullValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
using System;
|
||||
|
||||
namespace Newtonsoft.Json.Converters.Internal
|
||||
{
|
||||
internal sealed partial class YesOrNoBooleanConverter : JsonConverter
|
||||
{
|
||||
private readonly JsonConverter<bool?> _converter = new InternalYesOrNoBooleanConverter();
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return typeof(bool) == objectType ||
|
||||
typeof(bool?) == objectType;
|
||||
}
|
||||
|
||||
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||
{
|
||||
bool? result = _converter.ReadJson(reader, objectType, (bool?)existingValue, (bool?)existingValue is not null, serializer);
|
||||
if (objectType == typeof(bool))
|
||||
return result.GetValueOrDefault();
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
_converter.WriteJson(writer, (bool?)value, serializer);
|
||||
}
|
||||
}
|
||||
|
||||
partial class YesOrNoBooleanConverter
|
||||
{
|
||||
private sealed class InternalYesOrNoBooleanConverter : JsonConverter<bool?>
|
||||
{
|
||||
private const string TRUE_VALUE = "Y";
|
||||
private const string FALSE_VALUE = "N";
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool? ReadJson(JsonReader reader, Type objectType, bool? existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.Null)
|
||||
{
|
||||
return existingValue;
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.Boolean)
|
||||
{
|
||||
return serializer.Deserialize<bool>(reader);
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.String)
|
||||
{
|
||||
string? value = serializer.Deserialize<string>(reader);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return existingValue;
|
||||
|
||||
if (TRUE_VALUE.Equals(value))
|
||||
return true;
|
||||
else if (FALSE_VALUE.Equals(value))
|
||||
return false;
|
||||
|
||||
throw new JsonSerializationException($"Could not parse String '{value}' to Boolean.");
|
||||
}
|
||||
|
||||
throw new JsonSerializationException($"Unexpected token type '{reader.TokenType}' when deserializing. Path '{reader.Path}'.");
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, bool? value, JsonSerializer serializer)
|
||||
{
|
||||
if (value is null)
|
||||
writer.WriteNull();
|
||||
else
|
||||
writer.WriteValue(value.Value ? TRUE_VALUE : FALSE_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@ using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Converters.Common;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
|
||||
namespace Newtonsoft.Json.Converters
|
||||
@ -72,57 +73,67 @@ namespace Newtonsoft.Json.Converters
|
||||
}
|
||||
else if (reader.TokenType == JsonToken.StartObject)
|
||||
{
|
||||
InnerTypedJsonPropertyInfo[] typedJsonProperties = GetTypedJsonProperties(objectType);
|
||||
//if (typedJsonProperties.Count(p => p.PropertyIsNArray) != 1)
|
||||
// throw new JsonSerializationException("The count of `$n` properties must be only one.");
|
||||
|
||||
JObject jObject = JObject.Load(reader);
|
||||
T tObject = new T();
|
||||
T tObject = existingValue as T ?? new T();
|
||||
|
||||
JsonObjectContract jsonContract = (JsonObjectContract)serializer.ContractResolver.ResolveContract(typeof(T));
|
||||
foreach (JProperty jProperty in jObject.Properties())
|
||||
{
|
||||
InnerTypedJsonPropertyInfo? typedJsonPropertyInfo = typedJsonProperties.SingleOrDefault(e => e.PropertyName == jProperty.Name);
|
||||
if (typedJsonPropertyInfo != null)
|
||||
{
|
||||
JsonSerializer tmpSerializer = GetClonedJsonSerializer(serializer, typedJsonPropertyInfo.JsonConverterOnRead);
|
||||
object? propertyValue = jProperty.Value?.ToObject(typedJsonPropertyInfo.PropertyType, tmpSerializer);
|
||||
typedJsonPropertyInfo.PropertyInfo.SetValue(tObject, propertyValue);
|
||||
}
|
||||
else if (TryMatchNArrayIndex(jProperty.Name, out int index))
|
||||
{
|
||||
foreach (var _ in typedJsonProperties.Where(e => e.PropertyIsNArray))
|
||||
{
|
||||
typedJsonPropertyInfo = _;
|
||||
string propertyName = jProperty.Name!;
|
||||
|
||||
Array? propertyValue = typedJsonPropertyInfo.PropertyInfo.GetValue(tObject) as Array;
|
||||
ReflectionUtility.CreateOrExpandArray(ref propertyValue, typedJsonPropertyInfo.PropertyType.GetElementType()!, index + 1);
|
||||
ReflectionUtility.CreateOrExpandArrayElement(propertyValue!, index, (object element) =>
|
||||
if (TryMatchNArrayIndex(propertyName, out int index))
|
||||
{
|
||||
InnerTypedJsonPropertyInfo[] typedJsonProperties = GetTypedJsonProperties(objectType);
|
||||
if (typedJsonProperties.Count(p => p.PropertyIsNArray) != 1)
|
||||
throw new JsonSerializationException("The count of `$n` properties must be only one.");
|
||||
|
||||
foreach (InnerTypedJsonPropertyInfo propertyJsonInfo in typedJsonProperties.Where(e => e.PropertyIsNArray))
|
||||
{
|
||||
Array? propertyValue = propertyJsonInfo.PropertyInfo.GetValue(tObject) as Array;
|
||||
ReflectionHelper.CreateOrExpandArray(ref propertyValue, propertyJsonInfo.PropertyType.GetElementType()!, index + 1);
|
||||
ReflectionHelper.CreateOrExpandArrayElement(propertyValue!, index, (object element) =>
|
||||
{
|
||||
InnerTypedJsonPropertyInfo? insider = GetTypedJsonProperties(element.GetType())
|
||||
InnerTypedJsonPropertyInfo? elementPropertyJsonInfo = GetTypedJsonProperties(element.GetType())
|
||||
.SingleOrDefault(p => string.Equals(p.PropertyName.Replace(PROPERTY_WILDCARD_NARRAY_ELEMENT, index.ToString()), jProperty.Name));
|
||||
if (insider != null)
|
||||
if (elementPropertyJsonInfo is not null)
|
||||
{
|
||||
JsonSerializer tmpSerializer = GetClonedJsonSerializer(serializer, insider.JsonConverterOnRead);
|
||||
object? elementPropertyValue = jProperty.Value?.ToObject(insider.PropertyType, tmpSerializer);
|
||||
insider.PropertyInfo.SetValue(element, elementPropertyValue);
|
||||
JsonSerializer serializerCopy = JsonSerializer.Create(serializer.ExtractSerializerSettings());
|
||||
serializerCopy.Converters.Remove(this);
|
||||
|
||||
if (elementPropertyJsonInfo.JsonConverterOnRead is not null)
|
||||
serializerCopy.Converters.Add(elementPropertyJsonInfo.JsonConverterOnRead);
|
||||
|
||||
object? elementPropertyValue = jProperty.Value?.ToObject(elementPropertyJsonInfo.PropertyType, serializerCopy);
|
||||
elementPropertyJsonInfo.PropertyInfo.SetValue(element, elementPropertyValue);
|
||||
}
|
||||
|
||||
return element;
|
||||
});
|
||||
|
||||
typedJsonPropertyInfo.PropertyInfo.SetValue(tObject, propertyValue);
|
||||
propertyJsonInfo.PropertyInfo.SetValue(tObject, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (serializer.MissingMemberHandling == MissingMemberHandling.Error)
|
||||
else
|
||||
{
|
||||
throw new JsonSerializationException($"Could not find member `{jProperty.Name}` on object of type `{objectType.Name}`.");
|
||||
JsonProperty? jsonContractProperty = jsonContract.Properties[propertyName];
|
||||
if (jsonContractProperty is not null && jsonContractProperty.Writable)
|
||||
{
|
||||
JsonSerializer serializerCopy = JsonSerializer.Create(serializer.ExtractSerializerSettings());
|
||||
serializerCopy.Converters.Remove(this);
|
||||
|
||||
if (jsonContractProperty.Converter is not null)
|
||||
serializerCopy.Converters.Add(jsonContractProperty.Converter);
|
||||
|
||||
object? propertyValue = jProperty.Value.ToObject(jsonContractProperty.PropertyType, serializerCopy);
|
||||
jsonContractProperty.ValueProvider!.SetValue(tObject, propertyValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tObject;
|
||||
}
|
||||
|
||||
throw new JsonSerializationException();
|
||||
throw new JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
@ -136,26 +147,31 @@ namespace Newtonsoft.Json.Converters
|
||||
writer.WriteStartObject();
|
||||
|
||||
JsonObjectContract jsonContract = (JsonObjectContract)serializer.ContractResolver.ResolveContract(value.GetType());
|
||||
foreach (JsonProperty jsonContractProperty in jsonContract.Properties)
|
||||
foreach (JsonProperty jsonContractProperty in jsonContract.Properties.OrderBy(e => e.Order))
|
||||
{
|
||||
if (jsonContractProperty.Ignored)
|
||||
continue;
|
||||
if (!(jsonContractProperty.ShouldSerialize == null || jsonContractProperty.ShouldSerialize(value)))
|
||||
if (!(jsonContractProperty.ShouldSerialize is null || jsonContractProperty.ShouldSerialize(value)))
|
||||
continue;
|
||||
|
||||
string propertyName = jsonContractProperty.PropertyName!;
|
||||
object? propertyValue = jsonContractProperty.ValueProvider?.GetValue(value);
|
||||
if (propertyValue is null)
|
||||
{
|
||||
if (serializer.NullValueHandling == NullValueHandling.Ignore)
|
||||
continue;
|
||||
if (serializer.NullValueHandling == NullValueHandling.Include)
|
||||
{
|
||||
writer.WritePropertyName(propertyName);
|
||||
writer.WriteNull();
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!PROPERTY_NAME_NARRAY.Equals(propertyName))
|
||||
{
|
||||
writer.WritePropertyName(propertyName);
|
||||
|
||||
if (jsonContractProperty.Converter != null && jsonContractProperty.Converter.CanWrite)
|
||||
if (jsonContractProperty.Converter is not null && jsonContractProperty.Converter.CanWrite)
|
||||
{
|
||||
jsonContractProperty.Converter.WriteJson(writer, propertyValue, serializer);
|
||||
}
|
||||
@ -166,14 +182,11 @@ namespace Newtonsoft.Json.Converters
|
||||
}
|
||||
else
|
||||
{
|
||||
if (propertyValue is null)
|
||||
continue;
|
||||
|
||||
JArray jArray = JArray.FromObject(propertyValue);
|
||||
for (int i = 0, len = jArray.Count; i < len; i++)
|
||||
{
|
||||
JToken? jSubToken = jArray[i];
|
||||
if (jSubToken == null)
|
||||
if (jSubToken is null)
|
||||
continue;
|
||||
|
||||
foreach (JProperty jSubProperty in jSubToken)
|
||||
@ -190,12 +203,12 @@ namespace Newtonsoft.Json.Converters
|
||||
|
||||
private static InnerTypedJsonPropertyInfo[] GetTypedJsonProperties(Type type)
|
||||
{
|
||||
if (type == null) throw new ArgumentNullException(nameof(type));
|
||||
if (type is null) throw new ArgumentNullException(nameof(type));
|
||||
|
||||
string mappedKey = type.AssemblyQualifiedName ?? type.GetHashCode().ToString();
|
||||
InnerTypedJsonPropertyInfo[]? mappedValue = (InnerTypedJsonPropertyInfo[]?)_mappedTypeJsonProperties[mappedKey];
|
||||
|
||||
if (mappedValue == null)
|
||||
if (mappedValue is null)
|
||||
{
|
||||
mappedValue = type.GetProperties(BindingFlags.Instance | BindingFlags.Public)
|
||||
.Where(p =>
|
||||
@ -232,22 +245,9 @@ namespace Newtonsoft.Json.Converters
|
||||
return mappedValue;
|
||||
}
|
||||
|
||||
private static JsonSerializer GetClonedJsonSerializer(JsonSerializer serializer, JsonConverter? converter)
|
||||
{
|
||||
JsonSerializer serializerCopy = serializer;
|
||||
|
||||
if (converter != null)
|
||||
{
|
||||
serializerCopy = JsonSerializer.CreateDefault(serializer.ExtractSerializerSettings());
|
||||
serializerCopy.Converters.Add(converter);
|
||||
}
|
||||
|
||||
return serializerCopy;
|
||||
}
|
||||
|
||||
private static bool TryMatchNArrayIndex(string key, out int index)
|
||||
{
|
||||
Regex regex = new Regex(@"(_)(\d+)", RegexOptions.Compiled);
|
||||
Regex regex = new Regex(@"(_)(\d+)$", RegexOptions.Compiled);
|
||||
if (regex.IsMatch(key))
|
||||
{
|
||||
string str = regex.Match(key).Groups[2].Value;
|
@ -0,0 +1,46 @@
|
||||
using System;
|
||||
|
||||
namespace Newtonsoft.Json.Converters.Internal
|
||||
{
|
||||
internal sealed class StringifiedObjectInJsonFormatConverter : JsonConverter
|
||||
{
|
||||
private readonly Common.StringifiedObjectInJsonFormatConverter _fallback = new Common.StringifiedObjectInJsonFormatConverter();
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.String)
|
||||
{
|
||||
// NOTICE:
|
||||
// 此处读取不使用 `serializer.Deserialize<string>(reader)`,会与 FlattenNArrayObjectConverter 冲突。
|
||||
// 仅当模型被 FlattenNArrayObjectConverter 修饰时才使用此转换器;否则仍使用公共组件中提供的自定义转换器。
|
||||
string? value = reader.ReadAsString();
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return existingValue;
|
||||
|
||||
return JsonConvert.DeserializeObject(value!, objectType);
|
||||
}
|
||||
|
||||
return _fallback.ReadJson(reader, objectType, existingValue, serializer);
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
_fallback.WriteJson(writer, value, serializer);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
namespace System.Text.Json.Serialization.Internal
|
||||
{
|
||||
internal sealed partial class YesOrNoBooleanConverter : JsonConverterFactory
|
||||
{
|
||||
public override bool CanConvert(Type typeToConvert)
|
||||
{
|
||||
return typeof(bool) == typeToConvert ||
|
||||
typeof(bool?) == typeToConvert;
|
||||
}
|
||||
|
||||
public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (typeof(bool) == typeToConvert)
|
||||
return new InternalYesOrNoBooleanConverter();
|
||||
if (typeof(bool?) == typeToConvert)
|
||||
return new InternalYesOrNoNullableBooleanConverter();
|
||||
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
partial class YesOrNoBooleanConverter
|
||||
{
|
||||
private sealed class InternalYesOrNoNullableBooleanConverter : JsonConverter<bool?>
|
||||
{
|
||||
private const string TRUE_VALUE = "Y";
|
||||
private const string FALSE_VALUE = "N";
|
||||
|
||||
public override bool? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.True)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.False)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
string? value = reader.GetString();
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return null;
|
||||
|
||||
if (TRUE_VALUE.Equals(value))
|
||||
return true;
|
||||
else if (FALSE_VALUE.Equals(value))
|
||||
return false;
|
||||
|
||||
throw new JsonException($"Could not parse String '{value}' to Boolean.");
|
||||
}
|
||||
|
||||
throw new JsonException($"Unexpected JSON token type '{reader.TokenType}' when reading.");
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, bool? value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value is null)
|
||||
{
|
||||
writer.WriteNullValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteStringValue(value.Value ? TRUE_VALUE : FALSE_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool? ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
string propName = reader.GetString()!;
|
||||
if (string.IsNullOrEmpty(propName))
|
||||
return null;
|
||||
|
||||
if (int.TryParse(propName, out int result))
|
||||
return Convert.ToBoolean(result);
|
||||
|
||||
throw new JsonException($"Could not parse String '{propName}' to Int32.");
|
||||
}
|
||||
|
||||
public override void WriteAsPropertyName(Utf8JsonWriter writer, bool? value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value is null)
|
||||
writer.WritePropertyName(string.Empty);
|
||||
else
|
||||
writer.WritePropertyName(value.Value ? TRUE_VALUE.ToString() : FALSE_VALUE.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class InternalYesOrNoBooleanConverter : JsonConverter<bool>
|
||||
{
|
||||
private readonly JsonConverter<bool?> _converter = new InternalYesOrNoNullableBooleanConverter();
|
||||
|
||||
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
bool? result = _converter.Read(ref reader, typeToConvert, options);
|
||||
return result.GetValueOrDefault();
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
|
||||
{
|
||||
_converter.Write(writer, value, options);
|
||||
}
|
||||
|
||||
public override bool ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
bool? result = _converter.ReadAsPropertyName(ref reader, typeToConvert, options);
|
||||
return result.GetValueOrDefault();
|
||||
}
|
||||
|
||||
public override void WriteAsPropertyName(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
|
||||
{
|
||||
_converter.WriteAsPropertyName(writer, value, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json.Serialization.Common;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace System.Text.Json.Converters
|
||||
@ -68,7 +69,7 @@ namespace System.Text.Json.Converters
|
||||
foreach (JsonProperty jProperty in jElement.EnumerateObject())
|
||||
{
|
||||
InnerTypedJsonPropertyInfo? typedJsonPropertyInfo = typedJsonProperties.SingleOrDefault(e => e.PropertyName == jProperty.Name);
|
||||
if (typedJsonPropertyInfo != null)
|
||||
if (typedJsonPropertyInfo is not null)
|
||||
{
|
||||
JsonSerializerOptions tmpOptions = GetClonedJsonSerializerOptions(options, typedJsonPropertyInfo.JsonConverter);
|
||||
object? propertyValue = jProperty.Value.Deserialize(typedJsonPropertyInfo.PropertyType, tmpOptions);
|
||||
@ -81,12 +82,12 @@ namespace System.Text.Json.Converters
|
||||
typedJsonPropertyInfo = _;
|
||||
|
||||
Array? propertyValue = typedJsonPropertyInfo.PropertyInfo.GetValue(tObject) as Array;
|
||||
ReflectionUtility.CreateOrExpandArray(ref propertyValue, typedJsonPropertyInfo.PropertyType.GetElementType()!, index + 1);
|
||||
ReflectionUtility.CreateOrExpandArrayElement(propertyValue!, index, (object element) =>
|
||||
ReflectionHelper.CreateOrExpandArray(ref propertyValue, typedJsonPropertyInfo.PropertyType.GetElementType()!, index + 1);
|
||||
ReflectionHelper.CreateOrExpandArrayElement(propertyValue!, index, (object element) =>
|
||||
{
|
||||
InnerTypedJsonPropertyInfo? insider = GetTypedJsonProperties(element.GetType())
|
||||
.SingleOrDefault(p => string.Equals(p.PropertyName.Replace(PROPERTY_WILDCARD_NARRAY_ELEMENT, index.ToString()), jProperty.Name));
|
||||
if (insider != null)
|
||||
if (insider is not null)
|
||||
{
|
||||
JsonSerializerOptions tmpOptions = GetClonedJsonSerializerOptions(options, insider.JsonConverter);
|
||||
object? elementPropertyValue = JsonSerializer.Deserialize(jProperty.Value, insider.PropertyType, tmpOptions)!;
|
||||
@ -134,7 +135,7 @@ namespace System.Text.Json.Converters
|
||||
}
|
||||
|
||||
JsonSerializerOptions tmpOptions = GetClonedJsonSerializerOptions(options, typedJsonProperty.JsonConverter);
|
||||
if (typedJsonProperty.JsonConverter != null && ReflectionUtility.CheckTypeIsSubclassOf(typedJsonProperty.JsonConverter.GetType(), typeof(TextualObjectInJsonFormatConverterBase<>)))
|
||||
if (typedJsonProperty.JsonConverter is not null && ReflectionHelper.CheckTypeIsSubclassOf(typedJsonProperty.JsonConverter.GetType(), typeof(StringifiedObjectInJsonFormatConverter)))
|
||||
{
|
||||
// TODO: 优化
|
||||
tmpOptions.Converters.Remove(typedJsonProperty.JsonConverter);
|
||||
@ -176,12 +177,12 @@ namespace System.Text.Json.Converters
|
||||
|
||||
private static InnerTypedJsonPropertyInfo[] GetTypedJsonProperties(Type type)
|
||||
{
|
||||
if (type == null) throw new ArgumentNullException(nameof(type));
|
||||
if (type is null) throw new ArgumentNullException(nameof(type));
|
||||
|
||||
string mappedKey = type.AssemblyQualifiedName ?? type.GetHashCode().ToString();
|
||||
InnerTypedJsonPropertyInfo[]? mappedValue = (InnerTypedJsonPropertyInfo[]?)_mappedTypeJsonProperties[mappedKey];
|
||||
|
||||
if (mappedValue == null)
|
||||
if (mappedValue is null)
|
||||
{
|
||||
mappedValue = type.GetProperties(BindingFlags.Instance | BindingFlags.Public)
|
||||
.Where(p =>
|
||||
@ -214,7 +215,7 @@ namespace System.Text.Json.Converters
|
||||
|
||||
private static JsonConverter? GetTypedJsonConverter(MemberInfo? memberInfo)
|
||||
{
|
||||
if (memberInfo == null)
|
||||
if (memberInfo is null)
|
||||
return null;
|
||||
|
||||
return memberInfo.GetCustomAttributes<JsonConverterAttribute>(inherit: true)
|
||||
@ -232,21 +233,21 @@ namespace System.Text.Json.Converters
|
||||
converter = attr.CreateConverter(propertyInfo.PropertyType);
|
||||
}
|
||||
|
||||
if (converter == null && attr.ConverterType != null)
|
||||
if (converter is null && attr.ConverterType is not null)
|
||||
{
|
||||
converter = (JsonConverter)Activator.CreateInstance(attr.ConverterType)!;
|
||||
}
|
||||
|
||||
return converter;
|
||||
})
|
||||
.FirstOrDefault(converter => converter != null);
|
||||
.FirstOrDefault(converter => converter is not null);
|
||||
}
|
||||
|
||||
private static JsonSerializerOptions GetClonedJsonSerializerOptions(JsonSerializerOptions options, JsonConverter? converter)
|
||||
{
|
||||
JsonSerializerOptions optionsCopy = options;
|
||||
|
||||
if (converter != null)
|
||||
if (converter is not null)
|
||||
{
|
||||
optionsCopy = new JsonSerializerOptions(options);
|
||||
optionsCopy.Converters.Add(converter);
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
{
|
||||
@ -79,9 +79,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -205,9 +205,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -216,6 +216,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
[Newtonsoft.Json.JsonProperty("rate")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("rate")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public double? ExchangeRate { get; set; }
|
||||
public decimal? ExchangeRate { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
{
|
||||
@ -82,18 +82,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
/// 获取或设置操作时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("operate_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("operate_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset OperateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置协议到期时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("contract_expired_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("contract_expired_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ContractExpireTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -59,9 +59,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -163,9 +163,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
127
src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Events/RefundEvent.cs
Normal file
127
src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Events/RefundEvent.cs
Normal file
@ -0,0 +1,127 @@
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示退款结果通知的数据。</para>
|
||||
/// </summary>
|
||||
public class RefundEvent : WechatTenpayEvent
|
||||
{
|
||||
public static new class Types
|
||||
{
|
||||
public class RefundInfo : WechatTenpayEvent.Types.IDecryptedRequestInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置子商户号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_mch_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_mch_id")]
|
||||
public string? SubMerchantId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置子商户 AppId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_appid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
|
||||
public string? SubAppId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商户订单号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("out_trade_no")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
|
||||
public string OutTradeNumber { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置微信支付订单号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("transaction_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
|
||||
public string TransactionId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置out_refund_no。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("out_refund_no")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("out_refund_no")]
|
||||
public string OutRefundNumber { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置微信退款单号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_id")]
|
||||
public string RefundId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款状态。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_status")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_status")]
|
||||
public string RefundStatus { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款资金来源。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_account")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_account")]
|
||||
public string? RefundAccount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款入账账户。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_recv_accout")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_recv_accout")]
|
||||
public string? RefundReceiveAccount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款发起来源。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_request_source")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_request_source")]
|
||||
public string? RefundRequestSource { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置订单金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("total_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("total_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int TotalFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int RefundFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置应结订单金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("settlement_total_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("settlement_total_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int? SettlementTotalFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置应结退款金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("settlement_refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("settlement_refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int? SettlementRefundFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("success_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("success_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示退款结果通知的数据。</para>
|
||||
/// </summary>
|
||||
public class RefundEventRequestInfo : WechatTenpayEvent.Types.IDecryptedRequestInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置子商户号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_mch_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_mch_id")]
|
||||
public string? SubMerchantId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置子商户 AppId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_appid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
|
||||
public string? SubAppId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商户订单号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("out_trade_no")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
|
||||
public string OutTradeNumber { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置微信支付订单号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("transaction_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
|
||||
public string TransactionId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置out_refund_no。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("out_refund_no")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("out_refund_no")]
|
||||
public string OutRefundNumber { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置微信退款单号。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_id")]
|
||||
public string RefundId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款状态。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_status")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_status")]
|
||||
public string RefundStatus { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款资金来源。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_account")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_account")]
|
||||
public string? RefundAccount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款入账账户。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_recv_accout")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_recv_accout")]
|
||||
public string? RefundReceiveAccount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款发起来源。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_request_source")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_request_source")]
|
||||
public string? RefundRequestSource { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置订单金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("total_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("total_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int TotalFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int RefundFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置应结订单金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("settlement_total_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("settlement_total_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int? SettlementTotalFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置应结退款金额(单位:分)。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("settlement_refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("settlement_refund_fee")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public int? SettlementRefundFee { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("success_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("success_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
}
|
||||
}
|
@ -53,9 +53,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Events
|
||||
/// 获取或设置变更事件时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("vehicle_event_createtime")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("vehicle_event_createtime")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset EventTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Exceptions
|
||||
{
|
||||
public class WechatTenpayEventDecryptionException : WechatTenpayException
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayEventDecryptionException()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayEventDecryptionException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayEventDecryptionException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Exceptions
|
||||
{
|
||||
public class WechatTenpayEventVerificationException : WechatTenpayException
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayEventVerificationException()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayEventVerificationException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayEventVerificationException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Exceptions
|
||||
{
|
||||
public class WechatTenpayRequestSignatureException : WechatTenpayException
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayRequestSignatureException()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayRequestSignatureException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayRequestSignatureException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Exceptions
|
||||
{
|
||||
public class WechatTenpayRequestTimeoutException : WechatTenpayException
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayRequestTimeoutException()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayRequestTimeoutException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
internal WechatTenpayRequestTimeoutException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -12,31 +12,31 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
/// <para>反序列化得到 <see cref="WechatTenpayEvent"/> 对象。</para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="callbackXml"></param>
|
||||
/// <param name="webhookXml"></param>
|
||||
/// <returns></returns>
|
||||
public static WechatTenpayEvent DeserializeEvent(this WechatTenpayClient client, string callbackXml)
|
||||
public static WechatTenpayEvent DeserializeEvent(this WechatTenpayClient client, string webhookXml)
|
||||
{
|
||||
if (client == null) throw new ArgumentNullException(nameof(client));
|
||||
if (callbackXml == null) throw new ArgumentNullException(callbackXml);
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (webhookXml is null) throw new ArgumentNullException(webhookXml);
|
||||
|
||||
string callbackJson = Utilities.XmlUtility.ConvertToJson(callbackXml);
|
||||
return client.JsonSerializer.Deserialize<WechatTenpayEvent>(callbackJson);
|
||||
string webhookJson = Utilities.XmlHelper.ConvertToJson(webhookXml);
|
||||
return client.JsonSerializer.Deserialize<WechatTenpayEvent>(webhookJson);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>反序列化得到微信支付回调通知事件模型对象。</para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="callbackXml"></param>
|
||||
/// <param name="webhookXml"></param>
|
||||
/// <returns></returns>
|
||||
public static TEvent DeserializeEvent<TEvent>(this WechatTenpayClient client, string callbackXml)
|
||||
public static TEvent DeserializeEvent<TEvent>(this WechatTenpayClient client, string webhookXml)
|
||||
where TEvent : WechatTenpayEvent, new()
|
||||
{
|
||||
if (client == null) throw new ArgumentNullException(nameof(client));
|
||||
if (callbackXml == null) throw new ArgumentNullException(callbackXml);
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (webhookXml is null) throw new ArgumentNullException(webhookXml);
|
||||
|
||||
string callbackJson = Utilities.XmlUtility.ConvertToJson(callbackXml);
|
||||
return client.JsonSerializer.Deserialize<TEvent>(callbackJson);
|
||||
string webhookJson = Utilities.XmlHelper.ConvertToJson(webhookXml);
|
||||
return client.JsonSerializer.Deserialize<TEvent>(webhookJson);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -44,13 +44,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="callback"></param>
|
||||
/// <param name="webhookEvent"></param>
|
||||
/// <returns></returns>
|
||||
public static T DecryptEventRequestInfo<T>(this WechatTenpayClient client, WechatTenpayEvent callback)
|
||||
public static T DecryptEventRequestInfo<T>(this WechatTenpayClient client, WechatTenpayEvent webhookEvent)
|
||||
where T : WechatTenpayEvent.Types.IDecryptedRequestInfo, new()
|
||||
{
|
||||
if (client == null) throw new ArgumentNullException(nameof(client));
|
||||
if (callback == null) throw new ArgumentNullException(nameof(callback));
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (webhookEvent is null) throw new ArgumentNullException(nameof(webhookEvent));
|
||||
|
||||
string plainJson;
|
||||
|
||||
@ -59,13 +59,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
string key = Utilities.MD5Utility.Hash(client.Credentials.MerchantSecret).ToLower();
|
||||
string plainXml = Utilities.AESUtility.DecryptWithECB(
|
||||
encodingKey: Convert.ToBase64String(Encoding.UTF8.GetBytes(key)),
|
||||
encodingCipherText: callback.EncryptedRequestInfo!
|
||||
encodingCipherText: webhookEvent.EncryptedRequestInfo!
|
||||
);
|
||||
plainJson = Utilities.XmlUtility.ConvertToJson(plainXml);
|
||||
plainJson = Utilities.XmlHelper.ConvertToJson(plainXml);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exceptions.WechatTenpayEventDecryptionException("Failed to decrypt event resource data. Please see the inner exception for more details.", ex);
|
||||
throw new WechatTenpayException("Failed to decrypt event resource data. Please see the inner exception for more details.", ex);
|
||||
}
|
||||
|
||||
return client.JsonSerializer.Deserialize<T>(plainJson);
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
|
||||
@ -13,32 +13,31 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
/// <para>验证回调通知事件签名。</para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="callbackBody">微信回调通知中请求正文。</param>
|
||||
/// <param name="webhookBody">微信回调通知中请求正文。</param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
public static bool VerifyEventSignature(this WechatTenpayClient client, string callbackBody)
|
||||
public static bool VerifyEventSignature(this WechatTenpayClient client, string webhookBody)
|
||||
{
|
||||
return VerifyEventSignature(client, callbackBody, out _);
|
||||
return VerifyEventSignature(client, webhookBody, out _);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>验证回调通知事件签名。</para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="callbackBody">微信回调通知中请求正文。</param>
|
||||
/// <param name="webhookBody">微信回调通知中请求正文。</param>
|
||||
/// <param name="error"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
public static bool VerifyEventSignature(this WechatTenpayClient client, string callbackBody, out Exception? error)
|
||||
public static bool VerifyEventSignature(this WechatTenpayClient client, string webhookBody, out Exception? error)
|
||||
{
|
||||
if (client == null) throw new ArgumentNullException(nameof(client));
|
||||
if (callbackBody == null) throw new ArgumentNullException(nameof(callbackBody));
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
XmlDocument xmlDocument = new XmlDocument();
|
||||
xmlDocument.LoadXml(callbackBody);
|
||||
xmlDocument.LoadXml(webhookBody);
|
||||
|
||||
XmlNode xmlNode = xmlDocument.ChildNodes.OfType<XmlNode>().Single();
|
||||
string? signType = xmlNode["sign_type"]?.InnerText;
|
||||
@ -46,8 +45,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
xmlNode["sign"]?.RemoveAll();
|
||||
|
||||
string xml = xmlDocument.InnerXml;
|
||||
string json = Utilities.XmlUtility.ConvertToJson(xml);
|
||||
string signData = Utilities.JsonUtility.ParseToSortedQueryString(json);
|
||||
string json = Utilities.XmlHelper.ConvertToJson(xml);
|
||||
string signData = Utilities.JsonHelper.ParseToSortedQueryString(json);
|
||||
string actualSign = Utilities.RequestSigner.SignFromSortedQueryString(signData, client.Credentials.MerchantSecret, signType);
|
||||
|
||||
error = null;
|
||||
@ -55,7 +54,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
error = new Exceptions.WechatTenpayEventVerificationException("Verify signature of event failed. Please see the inner exception for more details.", ex);
|
||||
error = new WechatTenpayException("Failed to verify event. Please see the inner exception for more details.", ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "billcommentsp", "batchquerycomment");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "billcommentsp", "batchquerycomment");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.BatchQueryBillCommentResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.BatchQueryBillCommentResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,9 +23,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "unifiedorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "unifiedorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreateDepositUnifiedOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreateDepositUnifiedOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -42,9 +42,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "micropay");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "micropay");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreateDepositMicroPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreateDepositMicroPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -61,9 +61,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "facepay");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "facepay");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreateDepositFacePayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreateDepositFacePayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -80,9 +80,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "orderquery");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "orderquery");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetDepositOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetDepositOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -99,9 +99,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "reverse");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "reverse");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ReverseDepositOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ReverseDepositOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -118,9 +118,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "consume");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "consume");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ConsumeDepositResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ConsumeDepositResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -137,9 +137,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "refund");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "refund");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreateDepositRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreateDepositRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -156,9 +156,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "deposit", "refundquery");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "deposit", "refundquery");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetDepositRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetDepositRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,10 +23,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "risk", "getpublickey")
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "risk", "getpublickey")
|
||||
.WithUrl("https://fraud.mch.weixin.qq.com/risk/getpublickey");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetRiskPublicKeyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetRiskPublicKeyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "fund", "queryautowithdrawbydate");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "fund", "queryautowithdrawbydate");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetFundAutoWithdrawByDateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetFundAutoWithdrawByDateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "mch", "customs", "customdeclareorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "mch", "customs", "customdeclareorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreateMerchantCustomsCustomDeclarationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreateMerchantCustomsCustomDeclarationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -41,9 +41,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "mch", "customs", "customdeclarequery");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "mch", "customs", "customdeclarequery");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.QueryMerchantCustomsCustomDeclarationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.QueryMerchantCustomsCustomDeclarationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -60,9 +60,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "cgi-bin", "mch", "newcustoms", "customdeclareredeclare");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "mch", "newcustoms", "customdeclareredeclare");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.RedeclareMerchantCustomsCustomDeclarationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.RedeclareMerchantCustomsCustomDeclarationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mch", "addInstitutionsub");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mch", "addInstitutionsub");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.AddSubMerchantInstitutionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.AddSubMerchantInstitutionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -41,9 +41,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mch", "queryInstitutionsub");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mch", "queryInstitutionsub");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetSubMerchantInstitutionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetSubMerchantInstitutionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -60,9 +60,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mch", "modifyInstitutionsub");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mch", "modifyInstitutionsub");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ModifySubMerchantInstitutionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ModifySubMerchantInstitutionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,14 +25,14 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.FileName == null)
|
||||
if (request.FileName is null)
|
||||
request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".jpg";
|
||||
|
||||
if (request.FileHash == null)
|
||||
if (request.FileHash is null)
|
||||
request.FileHash = BitConverter.ToString(Utilities.MD5Utility.Hash(request.FileBytes ?? Array.Empty<byte>())).Replace("-", string.Empty).ToLower();
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mch", "uploadmedia");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mch", "uploadmedia");
|
||||
|
||||
string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x");
|
||||
string sign = Utilities.RequestSigner.Sign(new Dictionary<string, string?>() { { "mch_id", client.Credentials.MerchantId }, { "media_hash", request.FileHash } }, client.Credentials.MerchantSecret, Constants.SignTypes.MD5);
|
||||
@ -46,7 +46,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
|
||||
fileContent.Headers.ContentLength = request.FileBytes?.Length;
|
||||
|
||||
return await client.SendRequestAsync<Models.UploadMerchantMediaResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsync<Models.UploadMerchantMediaResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "applyment", "micro", "modifyarchives");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "applyment", "micro", "modifyarchives");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ModifyMicroMerchantArchivesResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ModifyMicroMerchantArchivesResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -41,9 +41,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "applyment", "micro", "modifycontactinfo");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "applyment", "micro", "modifycontactinfo");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ModifyMicroMerchantContactInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ModifyMicroMerchantContactInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,13 +21,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.Timestamp == null)
|
||||
if (request.Timestamp is null)
|
||||
request.Timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds();
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "papay", "preentrustweb");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "papay", "preentrustweb");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePAPPayPreEntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePAPPayPreEntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -43,13 +43,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.Timestamp == null)
|
||||
if (request.Timestamp is null)
|
||||
request.Timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds();
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Get, "papay", "h5entrustweb");
|
||||
.CreateFlurlRequest(request, HttpMethod.Get, "papay", "h5entrustweb");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePAPPayH5EntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePAPPayH5EntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -66,9 +66,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "contractorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "contractorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreateContractOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreateContractOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -85,9 +85,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "pappayapply");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "pappayapply");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ApplyPAPPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ApplyPAPPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -105,9 +105,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "papay", "deletecontract");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "papay", "deletecontract");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.DeletePAPPayContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.DeletePAPPayContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -124,9 +124,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "papay", "querycontract");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "papay", "querycontract");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPAPPayContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPAPPayContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,13 +21,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.Timestamp == null)
|
||||
if (request.Timestamp is null)
|
||||
request.Timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds();
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "papay", "partner", "preentrustweb");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "papay", "partner", "preentrustweb");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePAPPayPartnerPreEntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePAPPayPartnerPreEntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -43,11 +43,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.Timestamp == null)
|
||||
if (request.Timestamp is null)
|
||||
request.Timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds();
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Get, "papay", "partner", "h5entrustweb")
|
||||
.CreateFlurlRequest(request, HttpMethod.Get, "papay", "partner", "h5entrustweb")
|
||||
.SetQueryParam("appid", request.AppId)
|
||||
.SetQueryParam("mch_id", request.MerchantId)
|
||||
.SetQueryParam("sub_appid", request.SubAppId)
|
||||
@ -70,7 +70,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
.SetQueryParam("outerid", request.OuterId)
|
||||
.SetQueryParam("return_appid", request.ReturnAppId);
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePAPPayPartnerH5EntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePAPPayPartnerH5EntrustWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -87,9 +87,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "partner", "pappayapply");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "partner", "pappayapply");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ApplyPAPPayPartnerResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ApplyPAPPayPartnerResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -106,9 +106,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "papay", "partner", "querycontract");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "papay", "partner", "querycontract");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPAPPayPartnerContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPAPPayPartnerContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,9 +36,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "unifiedorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "unifiedorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayUnifiedOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayUnifiedOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -58,9 +58,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "micropay");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "micropay");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayMicroPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayMicroPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -94,9 +94,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "orderquery");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "orderquery");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -114,9 +114,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "pay", "reverse");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "pay", "reverse");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ReversePayOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ReversePayOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -149,9 +149,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "closeorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "closeorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ClosePayOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ClosePayOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -186,9 +186,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "pay", "refund");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "pay", "refund");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -223,9 +223,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "refundquery");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "refundquery");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayRefundResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -242,9 +242,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "pay", "refundv2");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "pay", "refundv2");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayRefundV2Response>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayRefundV2Response>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -261,9 +261,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "refundqueryv2");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "refundqueryv2");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayRefundV2Response>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayRefundV2Response>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
#region Bill
|
||||
@ -300,9 +300,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "downloadbill");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "downloadbill");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.DownloadPayBillResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.DownloadPayBillResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -324,9 +324,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "downloadfundflow");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "downloadfundflow");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.DownloadPayFundFlowResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.DownloadPayFundFlowResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -350,9 +350,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "settlementquery");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "settlementquery");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPaySettlementResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPaySettlementResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -376,9 +376,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "pay", "queryexchagerate");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "pay", "queryexchagerate");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayExchangeRateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayExchangeRateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -39,9 +39,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "payitil", "report");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "payitil", "report");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.SubmitPayITILReportResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.SubmitPayITILReportResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,9 +25,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendredpack");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendredpack");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.SendPayMarketingTransfersRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.SendPayMarketingTransfersRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -45,9 +45,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendgroupredpack");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendgroupredpack");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.SendPayMarketingTransfersGroupRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.SendPayMarketingTransfersGroupRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -65,9 +65,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendminiprogramhb");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendminiprogramhb");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.SendPayMarketingTransfersMiniProgramRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.SendPayMarketingTransfersMiniProgramRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -87,9 +87,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "gethbinfo");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "gethbinfo");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayMarketingTransfersRedPackInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayMarketingTransfersRedPackInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
#region WeWork
|
||||
@ -106,19 +106,19 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.WeWorkSign == null)
|
||||
if (request.WeWorkSign is null)
|
||||
{
|
||||
if (request.MerchantId == null)
|
||||
if (request.MerchantId is null)
|
||||
{
|
||||
request.MerchantId = client.Credentials.MerchantId;
|
||||
}
|
||||
|
||||
if (request.AppId == null)
|
||||
if (request.AppId is null)
|
||||
{
|
||||
request.AppId = client.Credentials.AppId;
|
||||
}
|
||||
|
||||
if (request.NonceString == null)
|
||||
if (request.NonceString is null)
|
||||
{
|
||||
request.NonceString = Guid.NewGuid().ToString("N");
|
||||
}
|
||||
@ -141,9 +141,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
}
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendworkwxredpack");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "sendworkwxredpack");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.SendPayMarketingTransfersWeWorkRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.SendPayMarketingTransfersWeWorkRedPackResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -23,9 +23,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "promotion", "transfers");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "promotion", "transfers");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayMarketingTransfersPromotionTransferResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayMarketingTransfersPromotionTransferResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -42,9 +42,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "gettransferinfo");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "gettransferinfo");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayMarketingTransfersTransferInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayMarketingTransfersTransferInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
#region WeWork
|
||||
@ -61,19 +61,19 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (client is null) throw new ArgumentNullException(nameof(client));
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
if (request.WeWorkSign == null)
|
||||
if (request.WeWorkSign is null)
|
||||
{
|
||||
if (request.MerchantId == null)
|
||||
if (request.MerchantId is null)
|
||||
{
|
||||
request.MerchantId = client.Credentials.MerchantId;
|
||||
}
|
||||
|
||||
if (request.AppId == null)
|
||||
if (request.AppId is null)
|
||||
{
|
||||
request.AppId = client.Credentials.AppId;
|
||||
}
|
||||
|
||||
if (request.NonceString == null)
|
||||
if (request.NonceString is null)
|
||||
{
|
||||
request.NonceString = Guid.NewGuid().ToString("N");
|
||||
}
|
||||
@ -97,9 +97,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
}
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaymkttransfers", "promotion", "paywwsptrans2pocket");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaymkttransfers", "promotion", "paywwsptrans2pocket");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayMarketingTransfersPromotionWeWorkTransferResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayMarketingTransfersPromotionWeWorkTransferResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaysptrans", "pay_bank");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaysptrans", "pay_bank");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.CreatePayServicePartnerTransfersPayToBankResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.CreatePayServicePartnerTransfersPayToBankResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -41,9 +41,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "mmpaysptrans", "query_bank");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "mmpaysptrans", "query_bank");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetPayServicePartnerTransfersPayToBankInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetPayServicePartnerTransfersPayToBankInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "risk", "getviolation");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "risk", "getviolation");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.QueryRiskViolationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.QueryRiskViolationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,9 +25,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mch", "addsubdevconfig");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mch", "addsubdevconfig");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.AddSubMerchantDevelopConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.AddSubMerchantDevelopConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -45,9 +45,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mch", "querysubdevconfig");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mch", "querysubdevconfig");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetSubMerchantDevelopConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetSubMerchantDevelopConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -64,9 +64,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "secapi", "mkt", "addrecommendconf");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "secapi", "mkt", "addrecommendconf");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.AddSubMerchantMarketingRecommendConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.AddSubMerchantMarketingRecommendConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,9 +23,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "tools", "authcodetoopenid");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "tools", "authcodetoopenid");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ToolsAuthCodeToOpenIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ToolsAuthCodeToOpenIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -43,9 +43,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "tools", "shorturl");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "tools", "shorturl");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ToolsShortUrlResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ToolsShortUrlResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "vehicle", "pay", "notification");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "vehicle", "pay", "notification");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.NotifyVehiclePayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.NotifyVehiclePayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -41,9 +41,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "vehicle", "pay", "payapply");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "vehicle", "pay", "payapply");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ApplyVehiclePayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ApplyVehiclePayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -60,9 +60,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "vehicle", "pay", "querystate");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "vehicle", "pay", "querystate");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetVehiclePayStateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetVehiclePayStateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -79,9 +79,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "transit", "queryorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "transit", "queryorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetTransitOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetTransitOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "vehicle", "partnerpay", "notification");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "vehicle", "partnerpay", "notification");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.NotifyVehiclePartnerPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.NotifyVehiclePartnerPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -41,9 +41,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "vehicle", "partnerpay", "payapply");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "vehicle", "partnerpay", "payapply");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.ApplyVehiclePartnerPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.ApplyVehiclePartnerPayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -60,9 +60,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "vehicle", "partnerpay", "querystate");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "vehicle", "partnerpay", "querystate");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetVehiclePartnerPayStateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetVehiclePartnerPayStateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -79,9 +79,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "transit", "partnerpay", "queryorder");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "transit", "partnerpay", "queryorder");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetTransitPartnerOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetTransitPartnerOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,9 +33,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2
|
||||
if (request is null) throw new ArgumentNullException(nameof(request));
|
||||
|
||||
IFlurlRequest flurlReq = client
|
||||
.CreateRequest(request, HttpMethod.Post, "xdc", "apiv2getsignkey", "sign", "getsignkey");
|
||||
.CreateFlurlRequest(request, HttpMethod.Post, "xdc", "apiv2getsignkey", "sign", "getsignkey");
|
||||
|
||||
return await client.SendRequestWithXmlAsync<Models.GetSandboxSignKeyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
return await client.SendFlurlRequestAsXmlAsync<Models.GetSandboxSignKeyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,18 +35,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置开始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("begin_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("begin_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset BeginTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("end_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
{
|
||||
/// <summary>
|
||||
@ -21,7 +23,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
|
||||
public override bool IsSuccessful()
|
||||
{
|
||||
return base.IsSuccessful() && RawBytes?.Length > 0;
|
||||
return base.IsSuccessful() && GetRawBytes().Any();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,25 +18,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -69,9 +50,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置是否押金支付。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("deposit")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("deposit")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool IsDeposit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -148,36 +129,36 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易起始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_start")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_start")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_expire")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_expire")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ExpireTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -18,25 +18,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -69,9 +50,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置是否押金支付。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("deposit")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("deposit")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool IsDeposit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -155,36 +136,36 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易起始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_start")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_start")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_expire")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_expire")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ExpireTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -61,9 +61,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -77,9 +77,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅子商户公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -167,9 +167,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -18,25 +18,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -160,45 +141,45 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易起始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_start")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_start")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_expire")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_expire")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ExpireTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否开放电子发票入口。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("receipt")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("receipt")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsReceiptOpen { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -61,9 +61,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -77,9 +77,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅子商户公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -189,9 +189,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -150,9 +150,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置退款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_success_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_success_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -71,27 +71,27 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置创建时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("create_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("create_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? CreateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("success_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("success_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退票时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? RefundTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -68,9 +68,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置最后更新时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("modify_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("modify_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset ModifyTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -90,9 +90,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置最后更新时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("modify_time_$n")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("modify_time_$n")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset ModifyTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -68,9 +68,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置最后更新时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("modify_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("modify_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset ModifyTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
{
|
||||
@ -7,17 +7,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// </summary>
|
||||
public class AddSubMerchantInstitutionRequest : WechatTenpaySignableRequest
|
||||
{
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyStorePhotoMediaIdListNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<IList<string>>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyStorePhotoMediaIdListSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<IList<string>>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -155,9 +144,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置门店照片 MediaId 列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("store_photos")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyStorePhotoMediaIdListNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("store_photos")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyStorePhotoMediaIdListSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public IList<string>? StorePhotoMediaIdList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
{
|
||||
@ -7,17 +7,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// </summary>
|
||||
public class ModifySubMerchantInstitutionRequest : WechatTenpaySignableRequest
|
||||
{
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyStorePhotoMediaIdListNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<IList<string>>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyStorePhotoMediaIdListSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<IList<string>>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -155,9 +144,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置门店照片 MediaId 列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("store_photos")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyStorePhotoMediaIdListNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("store_photos")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyStorePhotoMediaIdListSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public IList<string>? StorePhotoMediaIdList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -12,17 +12,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -119,9 +108,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -130,18 +130,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易起始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_start")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_start")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_expire")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_expire")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ExpireTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -89,18 +89,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置协议签署时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("contract_signed_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("contract_signed_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset ContractSignTime { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置协议到期时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("contract_expired_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("contract_expired_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset ContractExpireTime { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
@ -121,9 +121,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置协议解约时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("contract_terminated_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("contract_terminated_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ContractTerminateTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -73,9 +73,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置是否返回 App。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("return_app")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("return_app")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? RequireReturnApp { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
{
|
||||
/// <summary>
|
||||
@ -21,7 +23,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
|
||||
public override bool IsSuccessful()
|
||||
{
|
||||
return base.IsSuccessful() && RawBytes?.Length > 0;
|
||||
return base.IsSuccessful() && GetRawBytes().Any();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
{
|
||||
/// <summary>
|
||||
@ -21,7 +23,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
|
||||
public override bool IsSuccessful()
|
||||
{
|
||||
return base.IsSuccessful() && RawBytes?.Length > 0;
|
||||
return base.IsSuccessful() && GetRawBytes().Any();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,25 +18,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置接口版本号。
|
||||
/// </summary>
|
||||
@ -146,54 +127,54 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易起始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_start")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_start")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_expire")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_expire")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ExpireTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否分账。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("profit_sharing")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("profit_sharing")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsProfitSharing { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否开放电子发票入口。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("receipt")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("receipt")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsReceiptOpen { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -40,17 +40,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyPromotionDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPromotionDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -105,9 +94,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -121,9 +110,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅子商户公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -211,18 +200,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置优惠信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("promotion_detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.PromotionDetail? PromotionDetail { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -68,17 +68,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -181,9 +170,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -38,17 +38,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyPromotionDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPromotionDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -156,9 +145,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置优惠信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("promotion_detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.PromotionDetail? PromotionDetail { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -134,25 +134,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置接口版本号。
|
||||
/// </summary>
|
||||
@ -290,54 +271,54 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易起始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_start")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_start")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_expire")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_expire")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ExpireTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否分账。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("profit_sharing")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("profit_sharing")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsProfitSharing { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否开放电子发票入口。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("receipt")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("receipt")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsReceiptOpen { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -53,6 +53,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("rate")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("rate")]
|
||||
public double? ExchangeRate { get; set; } = default!;
|
||||
public decimal? ExchangeRate { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
{
|
||||
@ -60,7 +61,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("coupon_batch_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("coupon_batch_id")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalStringConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))]
|
||||
public string CouponBatchId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
@ -68,7 +69,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("coupon_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("coupon_id")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalStringConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringConverter))]
|
||||
public string CouponId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
@ -233,22 +234,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
internal class ResponseClassSystemTextJsonConverter : System.Text.Json.Converters.FlattenNArrayObjectConverterBase<GetPayOrderResponse>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Detail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPromotionDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPromotionDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -305,9 +290,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -321,9 +306,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅子商户公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sub_is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sub_is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -440,27 +425,31 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Detail? Detail { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置优惠信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("promotion_detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.PromotionDetail? PromotionDetail { get; set; }
|
||||
|
||||
[Newtonsoft.Json.JsonProperty]
|
||||
[Newtonsoft.Json.JsonExtensionData]
|
||||
public IDictionary<string, Newtonsoft.Json.Linq.JToken>? ExtensionData { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -83,9 +83,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置退款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_success_time_$n")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_success_time_$n")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -103,17 +103,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyPromotionDetailNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPromotionDetailSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PromotionDetail>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -226,9 +215,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置优惠信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("promotion_detail")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("promotion_detail")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyPromotionDetailSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.PromotionDetail? PromotionDetail { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -45,9 +45,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置是否需要重调。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("recall")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("recall")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool RequireRecall { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
@ -23,18 +23,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置交易开始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("begin_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("begin_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? BeginTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置交易完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("end_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -53,17 +53,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyTradeListNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<IList<Types.Trade>>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyTradeListSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<IList<Types.Trade>>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -152,18 +141,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置上报交易数据列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("trades")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyTradeListNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("trades")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyTradeListSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public IList<Types.Trade>? TradeList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商户上报时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? ReportTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -40,9 +40,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置领取时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("rcv_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("rcv_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset ReceiveTime { get; set; }
|
||||
}
|
||||
}
|
||||
@ -146,18 +146,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置红包发送时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("send_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("send_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset SendTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置红包退款时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? RefundTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -47,9 +47,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置付款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("payment_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("payment_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -83,18 +83,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置转账时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("transfer_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("transfer_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset TransferTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置付款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("payment_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("payment_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -47,9 +47,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置付款成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("payment_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("payment_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -80,18 +80,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置下单时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("create_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("create_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset CreateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置转账成功时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("pay_succ_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("pay_succ_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? SuccessTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -25,18 +25,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置开始时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("begin_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("begin_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset BeginTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置结束时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("end_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@ -67,24 +67,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置处罚时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("punish_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.BasicDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("punish_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.BasicDateTimeOffsetConverter))]
|
||||
public DateTimeOffset PunishTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyViolationListNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.ViolationList>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyViolationListSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.ViolationList>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <i>(冗余字段,请忽略)</i>
|
||||
/// </summary>
|
||||
@ -103,9 +92,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置违规记录列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("violation_records")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyViolationListNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("violation_records")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyViolationListSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.ViolationList ViolationList { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
@ -45,25 +45,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyAppIdConfigListNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.AppIdConfigList>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyAppIdConfigListSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.AppIdConfigList>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyJsapiPathListNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.JsapiPathList>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyJsapiPathListSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.JsapiPathList>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <i>(冗余字段,请忽略)</i>
|
||||
/// </summary>
|
||||
@ -82,18 +63,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置关联 AppId 列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("appid_config_list")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyAppIdConfigListNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("appid_config_list")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyAppIdConfigListSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.AppIdConfigList AppIdConfigList { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置授权目录列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("jsapi_path_list")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyJsapiPathListNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("jsapi_path_list")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyJsapiPathListSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.JsapiPathList JsapiPathList { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
@ -19,9 +19,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置出场时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("end_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -133,17 +133,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置接口版本号。
|
||||
/// <para>默认值:3.0</para>
|
||||
@ -258,18 +247,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否分账。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("profit_sharing")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("profit_sharing")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsProfitSharing { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -67,9 +67,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置用户是否订阅该公众号标识。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("is_subscribe")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("is_subscribe")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.YesOrNoNullableBooleanConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
|
||||
public bool? IsSubscribed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -186,9 +186,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置支付完成时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("time_end")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("time_end")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextNullableDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset? EndTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -45,17 +45,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class ResponsePropertyPlateNumberInfoNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PlateNumberInfo>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPlateNumberInfoSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PlateNumberInfo>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <inheritdoc/>
|
||||
/// </summary>
|
||||
@ -110,9 +99,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置车牌号信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("plate_number_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyPlateNumberInfoNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("plate_number_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyPlateNumberInfoSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.PlateNumberInfo? PlateNumberInfo { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -19,9 +19,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置入场时间。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("start_time")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.DigitalDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("start_time")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.PureDigitalTextDateTimeOffsetConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.DigitalDateTimeOffsetConverter))]
|
||||
public DateTimeOffset StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -91,17 +91,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Converters
|
||||
{
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置接口版本号。
|
||||
/// <para>默认值:3.0</para>
|
||||
@ -145,9 +134,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public Types.Scene? Scene { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -25,17 +25,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static new class Converters
|
||||
{
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置子商户号。
|
||||
/// </summary>
|
||||
@ -54,9 +43,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public new Types.Scene? Scene { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -25,17 +25,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static new class Converters
|
||||
{
|
||||
internal class ResponsePropertyPlateNumberInfoNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PlateNumberInfo>
|
||||
{
|
||||
}
|
||||
|
||||
internal class ResponsePropertyPlateNumberInfoSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.PlateNumberInfo>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置子商户号。
|
||||
/// </summary>
|
||||
@ -61,9 +50,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置车牌号信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("plate_number_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.ResponsePropertyPlateNumberInfoNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("plate_number_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.ResponsePropertyPlateNumberInfoSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public new Types.PlateNumberInfo? PlateNumberInfo { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -25,17 +25,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
}
|
||||
}
|
||||
|
||||
internal static new class Converters
|
||||
{
|
||||
internal class RequestPropertySceneNewtonsoftJsonConverter : Newtonsoft.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
|
||||
internal class RequestPropertySceneSystemTextJsonConverter : System.Text.Json.Converters.TextualObjectInJsonFormatConverterBase<Types.Scene>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置子商户号。
|
||||
/// </summary>
|
||||
@ -54,9 +43,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models
|
||||
/// 获取或设置场景信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("scene_info")]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Converters.RequestPropertySceneNewtonsoftJsonConverter))]
|
||||
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("scene_info")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.RequestPropertySceneSystemTextJsonConverter))]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.StringifiedObjectInJsonFormatConverter))]
|
||||
public new Types.Scene? Scene { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net461; net471; netstandard2.0; net6.0</TargetFrameworks>
|
||||
<LangVersion>8.0</LangVersion>
|
||||
<LangVersion>10.0</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<NullableReferenceTypes>true</NullableReferenceTypes>
|
||||
</PropertyGroup>
|
||||
@ -14,7 +14,7 @@
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<PackageProjectUrl>https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat</PackageProjectUrl>
|
||||
<PackageTags>Flurl.Http Wechat Weixin MicroMessage Tenpay WechatPay WeixinPay Wxpay 微信 微信支付 微信商户</PackageTags>
|
||||
<Version>2.3.1</Version>
|
||||
<Version>3.0.0-preview.1</Version>
|
||||
<Description>基于 Flurl.Http 的微信支付 API v2 版客户端,支持普通商户、境内服务商、银行服务商、跨境支付模式,仅包含微信支付未提供 v3 版 API 的部分功能,同时支持企业微信中企业支付相关的部分功能。如需微信支付 v3 版 API 客户端,欢迎使用 `SKIT.FlurlHttpClient.Wechat.TenpayV3`。</Description>
|
||||
<Authors>Fu Diwei</Authors>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
@ -41,7 +41,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="SKIT.FlurlHttpClient.Common" Version="2.6.0" />
|
||||
<PackageReference Include="SKIT.FlurlHttpClient.Common" Version="3.0.0-preview.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -36,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Settings
|
||||
|
||||
internal Credentials(WechatTenpayClientOptions options)
|
||||
{
|
||||
if (options == null) throw new ArgumentNullException(nameof(options));
|
||||
if (options is null) throw new ArgumentNullException(nameof(options));
|
||||
|
||||
MerchantId = options.MerchantId;
|
||||
MerchantSecret = options.MerchantSecret;
|
||||
|
@ -1,57 +0,0 @@
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Net.Security;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Settings
|
||||
{
|
||||
public class HttpClientFactory : Flurl.Http.Configuration.DefaultHttpClientFactory
|
||||
{
|
||||
private readonly byte[]? _certBytes;
|
||||
private readonly string? _certPassword;
|
||||
|
||||
public HttpClientFactory(byte[]? certBytes, string? certPassword)
|
||||
{
|
||||
_certBytes = certBytes;
|
||||
_certPassword = certPassword;
|
||||
}
|
||||
|
||||
public override HttpMessageHandler CreateMessageHandler()
|
||||
{
|
||||
#if NETFRAMEWORK
|
||||
WebRequestHandler handler = new WebRequestHandler();
|
||||
handler.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => sslPolicyErrors == SslPolicyErrors.None;
|
||||
#else
|
||||
HttpClientHandler handler = new HttpClientHandler();
|
||||
handler.ServerCertificateCustomValidationCallback = (requestMessage, certificate, chain, sslPolicyErrors) => sslPolicyErrors == SslPolicyErrors.None;
|
||||
#endif
|
||||
|
||||
if (_certBytes != null)
|
||||
{
|
||||
X509Certificate x509;
|
||||
|
||||
#if NET471_OR_GREATER || NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
#else
|
||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
||||
#endif
|
||||
{
|
||||
x509 = (_certPassword == null)
|
||||
? new X509Certificate2(_certBytes)
|
||||
: new X509Certificate2(_certBytes, _certPassword, X509KeyStorageFlags.MachineKeySet);
|
||||
}
|
||||
else
|
||||
{
|
||||
x509 = (_certPassword == null)
|
||||
? new X509Certificate2(_certBytes)
|
||||
: new X509Certificate2(_certBytes, _certPassword);
|
||||
}
|
||||
|
||||
handler.ClientCertificates.Add(x509);
|
||||
}
|
||||
|
||||
return handler;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Net.Security;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Settings
|
||||
{
|
||||
public class WechatpayHttpHandler : DelegatingHandler
|
||||
{
|
||||
public WechatpayHttpHandler(byte[]? certificateBytes, string? certificatePassword)
|
||||
{
|
||||
#if NETCOREAPP2_1_OR_GREATER || NET5_0_OR_GREATER
|
||||
SocketsHttpHandler handler = new SocketsHttpHandler();
|
||||
handler.SslOptions = new SslClientAuthenticationOptions() { RemoteCertificateValidationCallback = static (_, _, _, _) => true };
|
||||
#else
|
||||
HttpClientHandler handler = new HttpClientHandler();
|
||||
handler.ServerCertificateCustomValidationCallback = static (_, _, _, sslPolicyErrors) => sslPolicyErrors == SslPolicyErrors.None;
|
||||
#endif
|
||||
|
||||
if (certificateBytes is not null)
|
||||
{
|
||||
X509Certificate x509;
|
||||
|
||||
#if NET471_OR_GREATER || NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
#else
|
||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
||||
#endif
|
||||
{
|
||||
x509 = (certificatePassword is null)
|
||||
? new X509Certificate2(certificateBytes)
|
||||
: new X509Certificate2(certificateBytes, certificatePassword, X509KeyStorageFlags.MachineKeySet);
|
||||
}
|
||||
else
|
||||
{
|
||||
x509 = (certificatePassword is null)
|
||||
? new X509Certificate2(certificateBytes)
|
||||
: new X509Certificate2(certificateBytes, certificatePassword, X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
|
||||
}
|
||||
|
||||
#if NETCOREAPP2_1_OR_GREATER || NET5_0_OR_GREATER
|
||||
handler.SslOptions.ClientCertificates = new X509CertificateCollection() { x509 };
|
||||
#else
|
||||
handler.ClientCertificates.Add(x509);
|
||||
#endif
|
||||
}
|
||||
|
||||
InnerHandler = handler;
|
||||
}
|
||||
}
|
||||
}
|
@ -17,8 +17,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
/// <returns>解密后的数据字节数组。</returns>
|
||||
public static byte[] DecryptWithECB(byte[] keyBytes, byte[] cipherBytes)
|
||||
{
|
||||
if (keyBytes == null) throw new ArgumentNullException(nameof(keyBytes));
|
||||
if (cipherBytes == null) throw new ArgumentNullException(nameof(cipherBytes));
|
||||
if (keyBytes is null) throw new ArgumentNullException(nameof(keyBytes));
|
||||
if (cipherBytes is null) throw new ArgumentNullException(nameof(cipherBytes));
|
||||
|
||||
using (SymmetricAlgorithm aes = Aes.Create())
|
||||
{
|
||||
@ -39,8 +39,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
/// <returns>解密后的文本数据。</returns>
|
||||
public static string DecryptWithECB(string encodingKey, string encodingCipherText)
|
||||
{
|
||||
if (encodingKey == null) throw new ArgumentNullException(nameof(encodingKey));
|
||||
if (encodingCipherText == null) throw new ArgumentNullException(nameof(encodingCipherText));
|
||||
if (encodingKey is null) throw new ArgumentNullException(nameof(encodingKey));
|
||||
if (encodingCipherText is null) throw new ArgumentNullException(nameof(encodingCipherText));
|
||||
|
||||
byte[] plainBytes = DecryptWithECB(
|
||||
keyBytes: Convert.FromBase64String(encodingKey),
|
||||
|
@ -17,8 +17,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
/// <returns>消息认证码字节数组。</returns>
|
||||
public static byte[] HashWithSHA256(byte[] secretBytes, byte[] msgBytes)
|
||||
{
|
||||
if (secretBytes == null) throw new ArgumentNullException(nameof(secretBytes));
|
||||
if (msgBytes == null) throw new ArgumentNullException(nameof(msgBytes));
|
||||
if (secretBytes is null) throw new ArgumentNullException(nameof(secretBytes));
|
||||
if (msgBytes is null) throw new ArgumentNullException(nameof(msgBytes));
|
||||
|
||||
using HMAC hmac = new HMACSHA256(secretBytes);
|
||||
return hmac.ComputeHash(msgBytes);
|
||||
@ -32,8 +32,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
/// <returns>消息认证码。</returns>
|
||||
public static string HashWithSHA256(string secret, string message)
|
||||
{
|
||||
if (secret == null) throw new ArgumentNullException(nameof(secret));
|
||||
if (message == null) throw new ArgumentNullException(nameof(message));
|
||||
if (secret is null) throw new ArgumentNullException(nameof(secret));
|
||||
if (message is null) throw new ArgumentNullException(nameof(message));
|
||||
|
||||
byte[] secretBytes = Encoding.UTF8.GetBytes(secret);
|
||||
byte[] msgBytes = Encoding.UTF8.GetBytes(message);
|
||||
|
@ -16,7 +16,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
/// <returns>信息摘要字节数组。</returns>
|
||||
public static byte[] Hash(byte[] bytes)
|
||||
{
|
||||
if (bytes == null) throw new ArgumentNullException(nameof(bytes));
|
||||
if (bytes is null) throw new ArgumentNullException(nameof(bytes));
|
||||
|
||||
using MD5 md5 = MD5.Create();
|
||||
return md5.ComputeHash(bytes);
|
||||
@ -29,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
/// <returns>信息摘要。</returns>
|
||||
public static string Hash(string message)
|
||||
{
|
||||
if (message == null) throw new ArgumentNullException(nameof(message));
|
||||
if (message is null) throw new ArgumentNullException(nameof(message));
|
||||
|
||||
byte[] msgBytes = Encoding.UTF8.GetBytes(message);
|
||||
byte[] hashBytes = Hash(msgBytes);
|
||||
|
@ -1,11 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Json.Nodes;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities
|
||||
{
|
||||
internal static class JsonUtility
|
||||
internal static class JsonHelper
|
||||
{
|
||||
internal static string ParseToSortedQueryString(string json)
|
||||
{
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user