feat(tenpayv3): 新增微信支付分商户评估用户分层、下发服务消息等接口

This commit is contained in:
Fu Diwei
2024-07-02 14:47:14 +08:00
parent 4869479583
commit 2594f02da6
30 changed files with 844 additions and 17 deletions

View File

@@ -233,6 +233,10 @@
- 查询单笔退款:`GetRefundDomesticRefundByOutRefundNumber`
- 下发服务费用待处理消息:`SendPayScoreServiceOrderPendingMessage`
- 下发服务预扣费消息:`SendPayScoreServiceOrderPrepaidMessage`
- 微信支付分(免确认模式)
- 创单结单合并:`CreatePayScoreServiceOrderDirectComplete`
@@ -249,6 +253,10 @@
- 解除用户授权关系OpenId`TerminatePayScorePermissionsByOpenId`
- 用户分层
- 评估用户分层:`AssessPayScorePermissionsUserRiskLevel`
- 微信支付分停车
- 创建停车入场:`CreateVehicleParking`
@@ -741,6 +749,10 @@
- 商户申请获取对账单:`GetPayScoreMerchantBill`
- 下发服务费用待处理消息:`SendPayScorePartnerServiceOrderPendingMessage`
- 下发服务预扣费消息:`SendPayScorePartnerServiceOrderPrepaidMessage`
- 微信支付分(免确认预授权模式)
- 商户预授权:`ApplyPayScorePartnerPermissions`
@@ -753,6 +765,10 @@
- 解除用户授权关系OpenId`TerminatePayScorePartnerPermissionsByOpenId`
- 用户分层
- 服务商评估用户分层:`AssessPayScorePartnerPermissionsUserRiskLevel`
- 微信支付分停车
- 查询车牌服务开通信息:`GetVehicleParkingService`

View File

@@ -122,6 +122,28 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.TerminatePayScorePermissionsByOpenIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /payscore/permissions/assess-user-risk-level 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/weixin-pay-score/service-auth/assess-user-risk-level.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.AssessPayScorePermissionsUserRiskLevelResponse> ExecuteAssessPayScorePermissionsUserRiskLevelAsync(this WechatTenpayClient client, Models.AssessPayScorePermissionsUserRiskLevelRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "payscore", "permissions", "assess-user-risk-level");
return await client.SendFlurlRequestAsJsonAsync<Models.AssessPayScorePermissionsUserRiskLevelResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region Plan
@@ -396,6 +418,50 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.SetPayScoreServiceOrderSyncResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /payscore/serviceorder/{out_order_no}/send-pendingmessage 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/weixin-pay-score/service-order/send-order-pending-message.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.SendPayScoreServiceOrderPendingMessageResponse> ExecuteSendPayScoreServiceOrderPendingMessageAsync(this WechatTenpayClient client, Models.SendPayScoreServiceOrderPendingMessageRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "payscore", "serviceorder", request.OutOrderNumber, "send-pendingmessage");
return await client.SendFlurlRequestAsJsonAsync<Models.SendPayScoreServiceOrderPendingMessageResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /payscore/serviceorder/{out_order_no}/send-prepaidmessage 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/weixin-pay-score/service-order/send-order-prepaid-message.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.SendPayScoreServiceOrderPrepaidMessageResponse> ExecuteSendPayScoreServiceOrderPrepaidMessageAsync(this WechatTenpayClient client, Models.SendPayScoreServiceOrderPrepaidMessageRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "payscore", "serviceorder", request.OutOrderNumber, "send-prepaidmessage");
return await client.SendFlurlRequestAsJsonAsync<Models.SendPayScoreServiceOrderPrepaidMessageResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region SignPlan

View File

@@ -131,6 +131,28 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.TerminatePayScorePartnerPermissionsByOpenIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /payscore/partner/permissions/assess-user-risk-level 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/partner/apis/partner-weixin-pay-score/partner-service-auth/assess-partner-user-risk-level.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.AssessPayScorePartnerPermissionsUserRiskLevelResponse> ExecuteAssessPayScorePartnerPermissionsUserRiskLevelAsync(this WechatTenpayClient client, Models.AssessPayScorePartnerPermissionsUserRiskLevelRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "payscore", "partner", "permissions", "assess-user-risk-level");
return await client.SendFlurlRequestAsJsonAsync<Models.AssessPayScorePartnerPermissionsUserRiskLevelResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region Plan
@@ -384,6 +406,50 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.SetPayScorePartnerServiceOrderSyncResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /payscore/partner/serviceorder/{out_order_no}/send-pendingmessage 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/partner/apis/partner-weixin-pay-score/partner-service-order/send-partner-order-pending-message.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.SendPayScorePartnerServiceOrderPendingMessageResponse> ExecuteSendPayScorePartnerServiceOrderPendingMessageAsync(this WechatTenpayClient client, Models.SendPayScorePartnerServiceOrderPendingMessageRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "payscore", "partner", "serviceorder", request.OutOrderNumber, "send-pendingmessage");
return await client.SendFlurlRequestAsJsonAsync<Models.SendPayScorePartnerServiceOrderPendingMessageResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /payscore/partner/serviceorder/{out_order_no}/send-prepaidmessage 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/partner/apis/partner-weixin-pay-score/partner-service-order/send-partner-order-prepaid-message.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.SendPayScorePartnerServiceOrderPrepaidMessageResponse> ExecuteSendPayScorePartnerServiceOrderPrepaidMessageAsync(this WechatTenpayClient client, Models.SendPayScorePartnerServiceOrderPrepaidMessageRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "payscore", "partner", "serviceorder", request.OutOrderNumber, "send-prepaidmessage");
return await client.SendFlurlRequestAsJsonAsync<Models.SendPayScorePartnerServiceOrderPrepaidMessageResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region ServiceQuota

View File

@@ -0,0 +1,99 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/permissions/assess-user-risk-level 接口的请求。</para>
/// </summary>
public class AssessPayScorePermissionsUserRiskLevelRequest : WechatTenpayRequest
{
public static class Types
{
public class ShoppingInfo
{
public static class Types
{
public class Goods
{
/// <summary>
/// 获取或设置商品名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商品图片链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("picture")]
[System.Text.Json.Serialization.JsonPropertyName("picture")]
public string PictureUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商品单价(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int Amount { get; set; }
/// <summary>
/// 获取或设置商品数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("count")]
[System.Text.Json.Serialization.JsonPropertyName("count")]
public int Count { get; set; }
/// <summary>
/// 获取或设置商品品类 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("category_id")]
[System.Text.Json.Serialization.JsonPropertyName("category_id")]
public IList<string>? CategoryIdList { get; set; }
}
}
/// <summary>
/// 获取或设置商品列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("goods")]
[System.Text.Json.Serialization.JsonPropertyName("goods")]
public IList<Types.Goods>? GoodsList { get; set; }
}
}
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置服务 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("service_id")]
[System.Text.Json.Serialization.JsonPropertyName("service_id")]
public string ServiceId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置授权协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("authorization_code")]
[System.Text.Json.Serialization.JsonPropertyName("authorization_code")]
public string? AuthorizationCode { get; set; }
/// <summary>
/// 获取或设置先用后付商品信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("shopping_info")]
[System.Text.Json.Serialization.JsonPropertyName("shopping_info")]
public Types.ShoppingInfo? ShoppingInfo { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/permissions/assess-user-risk-level 接口的响应。</para>
/// </summary>
public class AssessPayScorePermissionsUserRiskLevelResponse : GetPayScorePermissionsByAuthorizationCodeResponse
{
/// <summary>
/// 获取或设置渠道商商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("channel_id")]
[System.Text.Json.Serialization.JsonPropertyName("channel_id")]
public string? ChannelId { get; set; }
/// <summary>
/// 获取或设置用户标签。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_label")]
[System.Text.Json.Serialization.JsonPropertyName("user_label")]
public string? UserLabel { get; set; }
/// <summary>
/// 获取或设置用户分层。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_risk_level")]
[System.Text.Json.Serialization.JsonPropertyName("user_risk_level")]
public int? UserRiskLevel { get; set; }
/// <summary>
/// 获取或设置分层版本。
/// </summary>
[Newtonsoft.Json.JsonProperty("risk_level_version")]
[System.Text.Json.Serialization.JsonPropertyName("risk_level_version")]
public int? RiskLevelVersion { get; set; }
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
@@ -40,7 +40,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("authorization_code")]
[System.Text.Json.Serialization.JsonPropertyName("authorization_code")]
public string AuthorizationCode { get; set; } = default!;
public string? AuthorizationCode { get; set; }
/// <summary>
/// 获取或设置授权状态。
@@ -73,5 +73,19 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
[System.Text.Json.Serialization.JsonPropertyName("authorization_success_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset? AuthorizationSuccessTime { get; set; }
/// <summary>
/// 获取或设置用户分层。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_risk_level")]
[System.Text.Json.Serialization.JsonPropertyName("user_risk_level")]
public int? UserRiskLevel { get; set; }
/// <summary>
/// 获取或设置分层版本。
/// </summary>
[Newtonsoft.Json.JsonProperty("risk_level_version")]
[System.Text.Json.Serialization.JsonPropertyName("risk_level_version")]
public int? RiskLevelVersion { get; set; }
}
}

View File

@@ -0,0 +1,63 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/serviceorder/{out_order_no}/send-pendingmessage 接口的请求。</para>
/// </summary>
public class SendPayScoreServiceOrderPendingMessageRequest : WechatTenpayRequest
{
public static class Types
{
public class Payment : CreatePayScoreServiceOrderRequest.Types.Payment
{
}
public class Discount : CreatePayScoreServiceOrderRequest.Types.Discount
{
}
}
/// <summary>
/// 获取或设置商户服务订单号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutOrderNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置服务 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("service_id")]
[System.Text.Json.Serialization.JsonPropertyName("service_id")]
public string ServiceId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置付费项目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_payments")]
[System.Text.Json.Serialization.JsonPropertyName("post_payments")]
public IList<Types.Payment> PostPaymentList { get; set; } = new List<Types.Payment>();
/// <summary>
/// 获取或设置商户优惠列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_discounts")]
[System.Text.Json.Serialization.JsonPropertyName("post_discounts")]
public IList<Types.Discount>? PostDiscountList { get; set; }
/// <summary>
/// 获取或设置总金额。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置预计扣费时间字符串格式yyyyMMddHH
/// </summary>
[Newtonsoft.Json.JsonProperty("prepaid_time")]
[System.Text.Json.Serialization.JsonPropertyName("prepaid_time")]
public string? PrepaidTimeString { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/serviceorder/{out_order_no}/send-pendingmessage 接口的响应。</para>
/// </summary>
public class SendPayScoreServiceOrderPendingMessageResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,63 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/serviceorder/{out_order_no}/send-prepaidmessage 接口的请求。</para>
/// </summary>
public class SendPayScoreServiceOrderPrepaidMessageRequest : WechatTenpayRequest
{
public static class Types
{
public class Payment : CreatePayScoreServiceOrderRequest.Types.Payment
{
}
public class Discount : CreatePayScoreServiceOrderRequest.Types.Discount
{
}
}
/// <summary>
/// 获取或设置商户服务订单号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutOrderNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置服务 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("service_id")]
[System.Text.Json.Serialization.JsonPropertyName("service_id")]
public string ServiceId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置付费项目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_payments")]
[System.Text.Json.Serialization.JsonPropertyName("post_payments")]
public IList<Types.Payment> PostPaymentList { get; set; } = new List<Types.Payment>();
/// <summary>
/// 获取或设置商户优惠列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_discounts")]
[System.Text.Json.Serialization.JsonPropertyName("post_discounts")]
public IList<Types.Discount>? PostDiscountList { get; set; }
/// <summary>
/// 获取或设置总金额。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置预计扣费时间字符串格式yyyyMMddHH
/// </summary>
[Newtonsoft.Json.JsonProperty("prepaid_time")]
[System.Text.Json.Serialization.JsonPropertyName("prepaid_time")]
public string? PrepaidTimeString { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/serviceorder/{out_order_no}/send-prepaidmessage 接口的响应。</para>
/// </summary>
public class SendPayScoreServiceOrderPrepaidMessageResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/partner/permissions/assess-user-risk-level 接口的请求。</para>
/// </summary>
public class AssessPayScorePartnerPermissionsUserRiskLevelRequest : AssessPayScorePermissionsUserRiskLevelRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置子商户 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_appid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
public string? SubAppId { get; set; }
/// <summary>
/// 获取或设置用户在子商户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_openid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
public string? SubOpenId { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/partner/permissions/assess-user-risk-level 接口的响应。</para>
/// </summary>
public class AssessPayScorePartnerPermissionsUserRiskLevelResponse : AssessPayScorePermissionsUserRiskLevelResponse
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置子商户 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_appid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
public string? SubAppId { get; set; }
/// <summary>
/// 获取或设置用户在子商户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_openid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
public string? SubOpenId { get; set; }
}
}

View File

@@ -1,4 +1,4 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /payscore/partner/permissions/authorization-code/{authorization_code} 接口的响应。</para>

View File

@@ -0,0 +1,70 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/partner/serviceorder/{out_order_no}/send-pendingmessage 接口的请求。</para>
/// </summary>
public class SendPayScorePartnerServiceOrderPendingMessageRequest : WechatTenpayRequest
{
public static class Types
{
public class Payment : CreatePayScorePartnerServiceOrderRequest.Types.Payment
{
}
public class Discount : CreatePayScorePartnerServiceOrderRequest.Types.Discount
{
}
}
/// <summary>
/// 获取或设置子商户商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户服务订单号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutOrderNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置服务 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("service_id")]
[System.Text.Json.Serialization.JsonPropertyName("service_id")]
public string ServiceId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置付费项目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_payments")]
[System.Text.Json.Serialization.JsonPropertyName("post_payments")]
public IList<Types.Payment> PostPaymentList { get; set; } = new List<Types.Payment>();
/// <summary>
/// 获取或设置商户优惠列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_discounts")]
[System.Text.Json.Serialization.JsonPropertyName("post_discounts")]
public IList<Types.Discount>? PostDiscountList { get; set; }
/// <summary>
/// 获取或设置总金额。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置预计扣费时间字符串格式yyyyMMddHH
/// </summary>
[Newtonsoft.Json.JsonProperty("prepaid_time")]
[System.Text.Json.Serialization.JsonPropertyName("prepaid_time")]
public string? PrepaidTimeString { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/partner/serviceorder/{out_order_no}/send-pendingmessage 接口的响应。</para>
/// </summary>
public class SendPayScorePartnerServiceOrderPendingMessageResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,70 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/partner/serviceorder/{out_order_no}/send-prepaidmessage 接口的请求。</para>
/// </summary>
public class SendPayScorePartnerServiceOrderPrepaidMessageRequest : WechatTenpayRequest
{
public static class Types
{
public class Payment : CreatePayScorePartnerServiceOrderRequest.Types.Payment
{
}
public class Discount : CreatePayScorePartnerServiceOrderRequest.Types.Discount
{
}
}
/// <summary>
/// 获取或设置子商户商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户服务订单号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutOrderNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置服务 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("service_id")]
[System.Text.Json.Serialization.JsonPropertyName("service_id")]
public string ServiceId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置付费项目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_payments")]
[System.Text.Json.Serialization.JsonPropertyName("post_payments")]
public IList<Types.Payment> PostPaymentList { get; set; } = new List<Types.Payment>();
/// <summary>
/// 获取或设置商户优惠列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("post_discounts")]
[System.Text.Json.Serialization.JsonPropertyName("post_discounts")]
public IList<Types.Discount>? PostDiscountList { get; set; }
/// <summary>
/// 获取或设置总金额。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置预计扣费时间字符串格式yyyyMMddHH
/// </summary>
[Newtonsoft.Json.JsonProperty("prepaid_time")]
[System.Text.Json.Serialization.JsonPropertyName("prepaid_time")]
public string? PrepaidTimeString { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /payscore/partner/serviceorder/{out_order_no}/send-prepaidmessage 接口的响应。</para>
/// </summary>
public class SendPayScorePartnerServiceOrderPrepaidMessageResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,19 @@
{
"service_id": "500001",
"appid": "wxd678efh567hg6787",
"authorization_code": "1234323JKHDFE1243252",
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"shopping_info": {
"goods": [
{
"name": "森海塞尔 MOMENTUM 4 无线耳机大馒头4 头戴式蓝牙音乐耳机自适应降噪",
"picture": "http://mmbiz.qpic.cn/mmbiz_png/ldTw9dg46zkjOrzyTkbQAvQkysliaiblZhdthZWewgQMyqLZwStaNEsJrYmjwh2MlK7G4wibAFOEuISQKplSnxMWA/640?wx_fmt=png&wxfrom=200",
"amount": 550,
"count": 1,
"category_id": [
"6032"
]
}
]
}
}

View File

@@ -0,0 +1,15 @@
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"mchid": "1230000109",
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"authorization_code": "1275342195190894594",
"authorization_state": "UNAVAILABLE",
"notify_url": "https://www.weixin.com",
"cancel_authorization_time": "2015-05-20T13:29:35+08:00",
"authorization_success_time": "2015-05-20T13:29:35+08:00",
"user_label": "A",
"channel_id": "1230000109",
"user_risk_level": 1,
"risk_level_version": 1
}

View File

@@ -1,4 +1,4 @@
{
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"mchid": "1230000109",
@@ -7,5 +7,7 @@
"authorization_state": "UNAVAILABLE",
"notify_url": "https://www.weixin.com",
"cancel_authorization_time": "2015-05-20T13:29:35.120+08:00",
"authorization_success_time": "2015-05-20T13:29:35.120+08:00"
"authorization_success_time": "2015-05-20T13:29:35.120+08:00",
"user_risk_level": 1,
"risk_level_version": 1
}

View File

@@ -1,4 +1,4 @@
{
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"mchid": "1230000109",
@@ -7,5 +7,7 @@
"authorization_state": "UNAVAILABLE",
"notify_url": "https://www.weixin.com",
"cancel_authorization_time": "2015-05-20T13:29:35.120+08:00",
"authorization_success_time": "2015-05-20T13:29:35.120+08:00"
"authorization_success_time": "2015-05-20T13:29:35.120+08:00",
"user_risk_level": 1,
"risk_level_version": 1
}

View File

@@ -0,0 +1,21 @@
{
"service_id": "2002000000000558128851361561536",
"post_payments": [
{
"name": "就餐费用",
"amount": 40000,
"description": "就餐人均100元",
"count": 4
}
],
"post_discounts": [
{
"name": "满20减1元",
"description": "不与其他优惠叠加",
"amount": 100,
"count": 2
}
],
"total_amount": 50000,
"prepaid_time": "20231218"
}

View File

@@ -0,0 +1,21 @@
{
"service_id": "2002000000000558128851361561536",
"post_payments": [
{
"name": "就餐费用",
"amount": 40000,
"description": "就餐人均100元",
"count": 4
}
],
"post_discounts": [
{
"name": "满20减1元",
"description": "不与其他优惠叠加",
"amount": 100,
"count": 2
}
],
"total_amount": 50000,
"prepaid_time": "20231218"
}

View File

@@ -0,0 +1,21 @@
{
"service_id": "500001",
"appid": "wxd678efh567hg6787",
"sub_appid": "wxd678efh567hg6787",
"authorization_code": "1234323JKHDFE1243252",
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"shopping_info": {
"goods": [
{
"name": "森海塞尔 MOMENTUM 4 无线耳机大馒头4 头戴式蓝牙音乐耳机自适应降噪",
"picture": "http://mmbiz.qpic.cn/mmbiz_png/ldTw9dg46zkjOrzyTkbQAvQkysliaiblZhdthZWewgQMyqLZwStaNEsJrYmjwh2MlK7G4wibAFOEuISQKplSnxMWA/640?wx_fmt=png&wxfrom=200",
"amount": 550,
"count": 1,
"category_id": [
"6032"
]
}
]
}
}

View File

@@ -0,0 +1,18 @@
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"mchid": "1230000109",
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"authorization_code": "1275342195190894594",
"authorization_state": "UNAVAILABLE",
"notify_url": "https://www.weixin.com",
"cancel_authorization_time": "2015-05-20T13:29:35+08:00",
"authorization_success_time": "2015-05-20T13:29:35+08:00",
"sub_mchid": "1230000109",
"sub_appid": "wxd678efh567hg6787",
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"user_label": "A",
"channel_id": "1230000109",
"user_risk_level": 1,
"risk_level_version": 1
}

View File

@@ -1,13 +1,16 @@
{
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"mchid": "1230000109",
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"authorization_code": "1275342195190894594",
"authorization_state": "UNAVAILABLE",
"notify_url": "https://www.weixin.com",
"cancel_authorization_time": "2015-05-20T13:29:35.120+08:00",
"authorization_success_time": "2015-05-20T13:29:35.120+08:00",
"cancel_authorization_time": "2015-05-20T13:29:35+08:00",
"authorization_success_time": "2015-05-20T13:29:35+08:00",
"sub_mchid": "1230000109",
"sub_appid": "wxd678efh567hg6787",
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"user_risk_level": 1,
"risk_level_version": 1
}

View File

@@ -1,4 +1,4 @@
{
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"mchid": "1230000109",
@@ -8,5 +8,7 @@
"authorization_success_time": "2015-05-20T13:29:35.120+08:00",
"sub_mchid": "1230000109",
"sub_appid": "wxd678efh567hg6787",
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"user_risk_level": 1,
"risk_level_version": 1
}

View File

@@ -1,4 +1,4 @@
{
{
"service_id": "2002000000000558128851361561536",
"appid": "wxd678efh567hg6787",
"sub_mchid": "1900000109",
@@ -8,8 +8,8 @@
"post_payments": [
{
"name": "就餐费用",
"description": "就餐人均100元",
"amount": 40000,
"description": "就餐人均100元",
"count": 4
}
],
@@ -17,6 +17,7 @@
{
"name": "满20减1元",
"description": "不与其他优惠叠加",
"amount": 100,
"count": 2
}
],
@@ -27,14 +28,15 @@
},
"time_range": {
"start_time": "20091225091010",
"start_time_remark": "开始租借时间",
"end_time": "20091225121010",
"end_time_remark": "租借结束时间"
"start_time_remark": "备注1",
"end_time_remark": "备注2"
},
"location": {
"start_location": "嗨客时尚主题展餐厅",
"end_location": "嗨客时尚主题展餐厅"
},
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"need_user_confirm": false,
"notify_url": "https://api.test.com",

View File

@@ -0,0 +1,22 @@
{
"service_id": "2002000000000558128851361561536",
"sub_mchid": "1900000109",
"post_payments": [
{
"name": "就餐费用",
"amount": 40000,
"description": "就餐人均100元",
"count": 4
}
],
"post_discounts": [
{
"name": "满20减1元",
"description": "不与其他优惠叠加",
"amount": 100,
"count": 2
}
],
"total_amount": 50000,
"prepaid_time": "20231218"
}

View File

@@ -0,0 +1,22 @@
{
"service_id": "2002000000000558128851361561536",
"sub_mchid": "1900000109",
"post_payments": [
{
"name": "就餐费用",
"amount": 40000,
"description": "就餐人均100元",
"count": 4
}
],
"post_discounts": [
{
"name": "满20减1元",
"description": "不与其他优惠叠加",
"amount": 100,
"count": 2
}
],
"total_amount": 50000,
"prepaid_time": "20231218"
}