feat(wxapi): 新增微信小店订单虚拟号与真实号码相关接口

This commit is contained in:
Fu Diwei
2025-11-27 15:36:28 +08:00
parent 3466c65569
commit 90a61f2493
13 changed files with 241 additions and 0 deletions

View File

@@ -4466,6 +4466,75 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECOrderVirtualTelNumberGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken); return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECOrderVirtualTelNumberGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
} }
/// <summary>
/// <para>异步调用 [POST] /channels/ec/order/virtualnumber/applyagain 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/channels-shop-order/api_applyvirtualnumberagain.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECOrderVirtualNumberApplyAgainResponse> ExecuteChannelsECOrderVirtualNumberApplyAgainAsync(this WechatApiClient client, Models.ChannelsECOrderVirtualNumberApplyAgainRequest 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", "order", "virtualtelnumber", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECOrderVirtualNumberApplyAgainResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/order/virtualnumber/delay 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/channels-shop-order/api_delayvirtualnumber.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECOrderVirtualNumberDelayResponse> ExecuteChannelsECOrderVirtualNumberDelayAsync(this WechatApiClient client, Models.ChannelsECOrderVirtualNumberDelayRequest 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", "order", "virtualtelnumber", "delay")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECOrderVirtualNumberDelayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/order/realnumber/apply 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/channels-shop-order/api_applyrealnumber.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECOrderRealNumberApplyResponse> ExecuteChannelsECOrderRealNumberApplyAsync(this WechatApiClient client, Models.ChannelsECOrderRealNumberApplyRequest 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", "order", "realnumber", "apply")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECOrderRealNumberApplyResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary> /// <summary>
/// <para>异步调用 [POST] /channels/ec/order/freshinspect/submit 接口。</para> /// <para>异步调用 [POST] /channels/ec/order/freshinspect/submit 接口。</para>
/// <para> /// <para>

View File

@@ -0,0 +1,38 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/order/realnumber/apply 接口的请求。</para>
/// </summary>
public class ChannelsECOrderRealNumberApplyRequest : WechatApiRequest, IInferable<ChannelsECOrderRealNumberApplyRequest, ChannelsECOrderRealNumberApplyResponse>
{
/// <summary>
/// 获取或设置订单 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("order_id")]
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
public string OrderId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置申请原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_type")]
[System.Text.Json.Serialization.JsonPropertyName("apply_type")]
public int ApplyType { get; set; }
/// <summary>
/// 获取或设置申请原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_reason")]
[System.Text.Json.Serialization.JsonPropertyName("apply_reason")]
public string ApplyReason { get; set; } = string.Empty;
/// <summary>
/// 获取或设置申请原因图片 MediaId 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("pic_media_ids")]
[System.Text.Json.Serialization.JsonPropertyName("pic_media_ids")]
public IList<string> PictureMediaIdList { get; set; } = new List<string>();
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/order/realnumber/apply 接口的响应。</para>
/// </summary>
public class ChannelsECOrderRealNumberApplyResponse : WechatApiResponse
{
/// <summary>
/// 获取或设置申请 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("task_id")]
[System.Text.Json.Serialization.JsonPropertyName("task_id")]
public string TaskId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/order/virtualnumber/applyagain 接口的请求。</para>
/// </summary>
public class ChannelsECOrderVirtualNumberApplyAgainRequest : WechatApiRequest, IInferable<ChannelsECOrderVirtualNumberApplyAgainRequest, ChannelsECOrderVirtualNumberApplyAgainResponse>
{
/// <summary>
/// 获取或设置订单 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("order_id")]
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
public string OrderId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/order/virtualnumber/applyagain 接口的响应。</para>
/// </summary>
public class ChannelsECOrderVirtualNumberApplyAgainResponse : WechatApiResponse
{
/// <summary>
/// 获取或设置虚拟号码。
/// </summary>
[Newtonsoft.Json.JsonProperty("virtual_number")]
[System.Text.Json.Serialization.JsonPropertyName("virtual_number")]
public string VirtualNumber { get; set; } = default!;
/// <summary>
/// 获取或设置分机号。
/// </summary>
[Newtonsoft.Json.JsonProperty("extension")]
[System.Text.Json.Serialization.JsonPropertyName("extension")]
public string? ExtensionNumber { get; set; }
/// <summary>
/// 获取或设置剩余申请次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_quota")]
[System.Text.Json.Serialization.JsonPropertyName("apply_quota")]
public int ApplyQuota { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/order/virtualnumber/delay 接口的请求。</para>
/// </summary>
public class ChannelsECOrderVirtualNumberDelayRequest : WechatApiRequest, IInferable<ChannelsECOrderVirtualNumberDelayRequest, ChannelsECOrderVirtualNumberDelayResponse>
{
/// <summary>
/// 获取或设置订单 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("order_id")]
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
public string OrderId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置已延期次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("has_delay_times")]
[System.Text.Json.Serialization.JsonPropertyName("has_delay_times")]
public int DelayTimes { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/order/virtualnumber/delay 接口的响应。</para>
/// </summary>
public class ChannelsECOrderVirtualNumberDelayResponse : WechatApiResponse
{
/// <summary>
/// 获取或设置虚拟号码过期时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("expiration")]
[System.Text.Json.Serialization.JsonPropertyName("expiration")]
public long ExpireTimestamp { get; set; }
/// <summary>
/// 获取或设置可延期次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("available_extend_num")]
[System.Text.Json.Serialization.JsonPropertyName("available_extend_num")]
public int AvailableDelayTimes { get; set; }
}
}

View File

@@ -0,0 +1,6 @@
{
"order_id": "37588946422056",
"apply_type": 1,
"apply_reason": "虚拟号打不通了",
"pic_media_ids": [ "avdtruEJVVysLdEIWbAi-tH_nKxww7wXp6-wDHDgWlEtTHHIZ6l98x4XABKROQphxw7i65Azvq0W9Zwf57V6Nw", "avdtruEJVVysLdEIWbAi-tH_nKxww7wXp6-wDHDgWlEtTHHIZ6l98x4XABKRvq0W9Zwf57V6Nw" ]
}

View File

@@ -0,0 +1,5 @@
{
"errcode": 0,
"errmsg": "ok",
"task_id": "245689763"
}

View File

@@ -0,0 +1,7 @@
{
"errcode": 0,
"errmsg": "ok",
"virtual_number": "13040205676",
"extension": "5123",
"apply_quota": 0
}

View File

@@ -0,0 +1,4 @@
{
"order_id": "3730259898842881245",
"has_delay_times": 0
}

View File

@@ -0,0 +1,6 @@
{
"errcode": 0,
"errmsg": "ok",
"expiration": 1755518097,
"available_extend_num": 3
}