mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-07-15 14:04:32 +08:00
feat(wxapi): 新增微信小店群礼物超时自动退售后单相关接口
This commit is contained in:
parent
2c407fc59d
commit
820bf185e3
@ -4,7 +4,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
|
||||
/// <para>表示 EVENT.channels_ec_aftersale_update 事件的数据。</para>
|
||||
/// <para>
|
||||
/// REF: <br/>
|
||||
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/aftersale/ec_callback/channels_ec_aftersale_update.html ]]>
|
||||
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/aftersale/ec_callback/channels_ec_aftersale_update.html ]]> <br>
|
||||
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/aftersale/ec_callback/channels_ec_aftersale_update.html ]]>
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public class ChannelsECAftersaleUpdateEvent : WechatApiEvent
|
||||
@ -22,7 +23,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Events
|
||||
[System.Xml.Serialization.XmlElement("after_sale_order_id")]
|
||||
public long AftersaleOrderId { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置订单 ID。
|
||||
/// </summary>
|
||||
|
@ -0,0 +1,52 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 EVENT.channels_ec_present_aftersale_update 事件的数据。</para>
|
||||
/// <para>
|
||||
/// REF: <br/>
|
||||
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/aftersale/ec_callback/channels_ec_present_aftersale_update.html ]]>
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public class ChannelsECPresentAftersaleUpdateEvent : WechatApiEvent
|
||||
{
|
||||
public static class Types
|
||||
{
|
||||
public class AftersaleOrder
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置售后单 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("after_sale_order_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("after_sale_order_id")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
[System.Xml.Serialization.XmlElement("after_sale_order_id")]
|
||||
public long AftersaleOrderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置订单 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("order_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
[System.Xml.Serialization.XmlElement("order_id")]
|
||||
public long OrderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置售后单状态。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("status")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("status")]
|
||||
[System.Xml.Serialization.XmlElement("status")]
|
||||
public string Status { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置售后单信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("finder_shop_present_aftersale_status_update")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("finder_shop_present_aftersale_status_update")]
|
||||
[System.Xml.Serialization.XmlElement("finder_shop_present_aftersale_status_update")]
|
||||
public Types.AftersaleOrder AftersaleOrder { get; set; } = default!;
|
||||
}
|
||||
}
|
@ -274,6 +274,54 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ECAftersale/Present
|
||||
/// <summary>
|
||||
/// <para>异步调用 [POST] /channels/ec/aftersale/getpresentaftersalelist 接口。</para>
|
||||
/// <para>
|
||||
/// REF: <br/>
|
||||
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/aftersale/getpresentaftersalelist.html ]]>
|
||||
/// </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.ChannelsECAftersaleGetPresentAftersaleListResponse> ExecuteChannelsECAftersaleGetPresentAftersaleListAsync(this WechatApiClient client, Models.ChannelsECAftersaleGetPresentAftersaleListRequest 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, "channels", "ec", "aftersale", "getpresentaftersalelist")
|
||||
.SetQueryParam("access_token", request.AccessToken);
|
||||
|
||||
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECAftersaleGetPresentAftersaleListResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>异步调用 [POST] /channels/ec/aftersale/getpresentaftersaleorder 接口。</para>
|
||||
/// <para>
|
||||
/// REF: <br/>
|
||||
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/aftersale/getpresentaftersaleorder.html ]]>
|
||||
/// </para>
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<Models.ChannelsECAftersaleGetPresentAftersaleOrderResponse> ExecuteChannelsECAftersaleGetPresentAftersaleOrderAsync(this WechatApiClient client, Models.ChannelsECAftersaleGetPresentAftersaleOrderRequest 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, "channels", "ec", "aftersale", "getpresentaftersaleorder")
|
||||
.SetQueryParam("access_token", request.AccessToken);
|
||||
|
||||
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECAftersaleGetPresentAftersaleOrderResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ECAftersale/Reason
|
||||
/// <summary>
|
||||
/// <para>异步调用 [POST] /channels/ec/aftersale/reason/get 接口。</para>
|
||||
|
@ -345,6 +345,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
|
||||
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||
public string OpenId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置买家用户 UnionId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("unionid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("unionid")]
|
||||
public string? UnionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款原因。
|
||||
/// </summary>
|
||||
|
@ -0,0 +1,29 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /channels/ec/aftersale/getpresentaftersalelist 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class ChannelsECAftersaleGetPresentAftersaleListRequest : WechatApiRequest, IInferable<ChannelsECAftersaleGetPresentAftersaleListRequest, ChannelsECAftersaleGetPresentAftersaleListResponse>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置创建时间开始时间戳。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("begin_create_time")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("begin_create_time")]
|
||||
public long StartCreateTimestamp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置创建时间结束时间戳。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("end_create_time")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("end_create_time")]
|
||||
public long EndCreateTimestamp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置翻页标记。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("next_key")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("next_key")]
|
||||
public string? Cursor { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /channels/ec/aftersale/getpresentaftersalelist 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class ChannelsECAftersaleGetPresentAftersaleListResponse : WechatApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置售后单 ID 列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("after_sale_order_id_list")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("after_sale_order_id_list")]
|
||||
public string[] AftersaleOrderIdList { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置翻页标记。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("next_key")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("next_key")]
|
||||
public string? NextCursor { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置是否还有更多。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("has_more")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("has_more")]
|
||||
public bool HasMore { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /channels/ec/aftersale/getpresentaftersaleorder 接口的请求。</para>
|
||||
/// </summary>
|
||||
public class ChannelsECAftersaleGetPresentAftersaleOrderRequest : WechatApiRequest, IInferable<ChannelsECAftersaleGetPresentAftersaleOrderRequest, ChannelsECAftersaleGetPresentAftersaleOrderResponse>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置售后单 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("after_sale_order_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("after_sale_order_id")]
|
||||
public string AftersaleOrderId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// <para>表示 [POST] /channels/ec/aftersale/getpresentaftersaleorder 接口的响应。</para>
|
||||
/// </summary>
|
||||
public class ChannelsECAftersaleGetPresentAftersaleOrderResponse : WechatApiResponse
|
||||
{
|
||||
public static class Types
|
||||
{
|
||||
public class AftersaleOrder
|
||||
{
|
||||
public static class Types
|
||||
{
|
||||
public class Order
|
||||
{
|
||||
public static class Types
|
||||
{
|
||||
public class Product
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置商品 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("product_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public long ProductId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置 SKU ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("sku_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("sku_id")]
|
||||
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||
public long SKUId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品数量。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("count")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("count")]
|
||||
public int Count { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_info")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_info")]
|
||||
public Refund? Refund { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置订单 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("order_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
|
||||
public string OrderId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_info")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_info")]
|
||||
public Refund? Refund { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置商品列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("product_info_list")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("product_info_list")]
|
||||
public Types.Product[] ProductList { get; set; } = default!;
|
||||
}
|
||||
|
||||
public class Refund : ChannelsECAftersaleGetAftersaleOrderResponse.Types.AftersaleOrder.Types.Refund
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置售后单 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("after_sale_order_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("after_sale_order_id")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringReadOnlyConverter))]
|
||||
public string AftersaleOrderId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置礼物订单 ID。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("present_order_id")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("present_order_id")]
|
||||
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalStringReadOnlyConverter))]
|
||||
public string PresentOrderId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置售后单状态。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("status")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("status")]
|
||||
public string Status { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置买家用户 OpenId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("openid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("openid")]
|
||||
public string OpenId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置买家用户 UnionId。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("unionid")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("unionid")]
|
||||
public string? UnionId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置订单信息列表。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("order_info_list")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("order_info_list")]
|
||||
public Types.Order[] OrderList { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置退款信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("refund_info")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("refund_info")]
|
||||
public Types.Refund? Refund { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置更新时间戳。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("update_time")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("update_time")]
|
||||
public long UpdateTimestamp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置创建时间戳。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("create_time")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("create_time")]
|
||||
public long CreateTimestamp { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置售后单信息。
|
||||
/// </summary>
|
||||
[Newtonsoft.Json.JsonProperty("after_sale_order")]
|
||||
[System.Text.Json.Serialization.JsonPropertyName("after_sale_order")]
|
||||
public Types.AftersaleOrder AftersaleOrder { get; set; } = default!;
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"ToUserName": "gh_*",
|
||||
"FromUserName": "OpenID",
|
||||
"CreateTime": 1662480000,
|
||||
"MsgType": "event",
|
||||
"Event": "channels_ec_present_aftersale_update",
|
||||
"finder_shop_present_aftersale_status_update": {
|
||||
"status": "PLATFORM_REFUNDING",
|
||||
"after_sale_order_id": "1234567",
|
||||
"order_id": "12345"
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"begin_create_time": 1658911158,
|
||||
"end_create_time": 1658912158,
|
||||
"next_key": "THE_NEXT_KEY"
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
{
|
||||
"errcode": 0,
|
||||
"errmsg": "ok",
|
||||
"after_sale_order_id_list": [
|
||||
"1934164653012121",
|
||||
"1934161104780121",
|
||||
"1934886755899121",
|
||||
"1934380526967121",
|
||||
"1934588095124121",
|
||||
"1934923837729121",
|
||||
"1934806194319121",
|
||||
"1934790256816121"
|
||||
],
|
||||
"has_more": true,
|
||||
"next_key": "THE_NEXT_KEY_NEW"
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"after_sale_order_id": "6000000000000001"
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
{
|
||||
"errcode": 0,
|
||||
"after_sale_order": {
|
||||
"after_sale_order_id": "6000000000000001",
|
||||
"present_order_id": "4200000000000001",
|
||||
"status": "MERCHANT_REFUND_SUCCESS",
|
||||
"openid": "OPENID",
|
||||
"unionid": "UNIONID",
|
||||
"create_time": 1591319454,
|
||||
"update_time": 1612754444,
|
||||
"refund_info": {
|
||||
"amount": 100
|
||||
},
|
||||
"order_info_list": [
|
||||
{
|
||||
"order_id": "3700000000000001",
|
||||
"refund_info": {
|
||||
"amount": 51
|
||||
},
|
||||
"product_info_list": [
|
||||
{
|
||||
"product_id": "1111",
|
||||
"sku_id": "2222",
|
||||
"count": 1,
|
||||
"refund_info": {
|
||||
"amount": 51
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"order_id": "3700000000000002",
|
||||
"refund_info": {
|
||||
"amount": 49
|
||||
},
|
||||
"product_info_list": [
|
||||
{
|
||||
"product_id": "3333",
|
||||
"sku_id": "4444",
|
||||
"count": 1,
|
||||
"refund_info": {
|
||||
"amount": 49
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user