feat(tenpayv2): 升级公共组件

This commit is contained in:
Fu Diwei 2024-01-30 23:01:06 +08:00 committed by RHQYZ
parent a6763ca683
commit bf39f8dd83
121 changed files with 1350 additions and 1691 deletions

View File

@ -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);
}
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}

View File

@ -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();
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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>

View 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; }
}
}
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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)
{
}
}
}

View File

@ -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)
{
}
}
}

View File

@ -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)
{
}
}
}

View File

@ -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)
{
}
}
}

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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
}

View File

@ -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);
}
}
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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>

View File

@ -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();
}
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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; }
}
}

View File

@ -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>

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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!;
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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!;
}
}

View File

@ -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!;
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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>

View File

@ -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;

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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),

View File

@ -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);

View File

@ -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);

View File

@ -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