feat(wxapi): 新增微信小店小程序会员服务相关接口

This commit is contained in:
Fu Diwei 2025-07-12 11:01:24 +08:00
parent dcde124eb2
commit 827a32ee0b
39 changed files with 726 additions and 417 deletions

View File

@ -1,34 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_close 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/user_join_vip.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipCloseEvent : WechatApiEvent
{
public static class Types
{
public class User
{
/// <summary>
/// 获取或设置注销时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("close_time")]
[System.Text.Json.Serialization.JsonPropertyName("close_time")]
[System.Xml.Serialization.XmlElement("close_time")]
public long CloseTimestamp { get; set; }
}
}
/// <summary>
/// 获取或设置用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_info")]
[System.Text.Json.Serialization.JsonPropertyName("user_info")]
[System.Xml.Serialization.XmlElement("user_info")]
public Types.User User { get; set; } = default!;
}
}

View File

@ -1,43 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_grade_info_update 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/usergrade_update.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipGradeInfoUpgradeEvent : WechatApiEvent
{
public static class Types
{
public class User
{
/// <summary>
/// 获取或设置会员等级。
/// </summary>
[Newtonsoft.Json.JsonProperty("grade")]
[System.Text.Json.Serialization.JsonPropertyName("grade")]
[System.Xml.Serialization.XmlElement("grade")]
public int Grade { get; set; }
/// <summary>
/// 获取或设置经验值。
/// </summary>
[Newtonsoft.Json.JsonProperty("experience_value")]
[System.Text.Json.Serialization.JsonPropertyName("experience_value")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("experience_value")]
public int ExperienceValue { get; set; }
}
}
/// <summary>
/// 获取或设置用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_info")]
[System.Text.Json.Serialization.JsonPropertyName("user_info")]
[System.Xml.Serialization.XmlElement("user_info")]
public Types.User User { get; set; } = default!;
}
}

View File

@ -1,42 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_join 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/user_join_vip.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipJoinEvent : WechatApiEvent
{
public static class Types
{
public class User
{
/// <summary>
/// 获取或设置手机号码。
/// </summary>
[Newtonsoft.Json.JsonProperty("phone_number")]
[System.Text.Json.Serialization.JsonPropertyName("phone_number")]
[System.Xml.Serialization.XmlElement("phone_number")]
public string PhoneNumber { get; set; } = default!;
/// <summary>
/// 获取或设置加入时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("join_time")]
[System.Text.Json.Serialization.JsonPropertyName("join_time")]
[System.Xml.Serialization.XmlElement("join_time")]
public long JoinTimestamp { get; set; }
}
}
/// <summary>
/// 获取或设置用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_info")]
[System.Text.Json.Serialization.JsonPropertyName("user_info")]
[System.Xml.Serialization.XmlElement("user_info")]
public Types.User User { get; set; } = default!;
}
}

View File

@ -1,86 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_score_exchange 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/vip/callback/score/user_score_exchange.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipScoreExchangeEvent : WechatApiEvent
{
public static class Types
{
public class Exchange
{
public static class Types
{
public class Coupon
{
/// <summary>
/// 获取或设置优惠券 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("related_coupon_id")]
[System.Text.Json.Serialization.JsonPropertyName("related_coupon_id")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("related_coupon_id")]
public long CouponId { get; set; }
}
public class Product
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("related_product_id")]
[System.Text.Json.Serialization.JsonPropertyName("related_product_id")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("related_product_id")]
public long CouponId { get; set; }
}
}
/// <summary>
/// 获取或设置兑换类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("score_item_type")]
[System.Text.Json.Serialization.JsonPropertyName("score_item_type")]
[System.Xml.Serialization.XmlElement("score_item_type")]
public int ScoreItemType { get; set; }
/// <summary>
/// 获取或设置兑换积分。
/// </summary>
[Newtonsoft.Json.JsonProperty("pay_score")]
[System.Text.Json.Serialization.JsonPropertyName("pay_score")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("pay_score")]
public int PayScore { get; set; }
/// <summary>
/// 获取或设置兑换的优惠券信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("coupon_info")]
[System.Text.Json.Serialization.JsonPropertyName("coupon_info")]
[System.Xml.Serialization.XmlElement("coupon_info", IsNullable = true)]
public Types.Coupon? Coupon { get; set; }
/// <summary>
/// 获取或设置兑换的商品信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_info")]
[System.Text.Json.Serialization.JsonPropertyName("product_info")]
[System.Xml.Serialization.XmlElement("product_info", IsNullable = true)]
public Types.Product? Product { get; set; }
}
}
/// <summary>
/// 获取或设置兑换信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("exchange_info")]
[System.Text.Json.Serialization.JsonPropertyName("exchange_info")]
[System.Xml.Serialization.XmlElement("exchange_info")]
public Types.Exchange Exchange { get; set; } = default!;
}
}

View File

@ -1,60 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_score_update 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/vip/callback/score/user_score_update.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipScoreUpdateEvent : WechatApiEvent
{
public static class Types
{
public class User
{
/// <summary>
/// 获取或设置会员等级。
/// </summary>
[Newtonsoft.Json.JsonProperty("grade")]
[System.Text.Json.Serialization.JsonPropertyName("grade")]
[System.Xml.Serialization.XmlElement("grade")]
public int Grade { get; set; }
/// <summary>
/// 获取或设置当前积分。
/// </summary>
[Newtonsoft.Json.JsonProperty("score")]
[System.Text.Json.Serialization.JsonPropertyName("score")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("score")]
public int Score { get; set; }
/// <summary>
/// 获取或设置本次改动积分。
/// </summary>
[Newtonsoft.Json.JsonProperty("delta_score")]
[System.Text.Json.Serialization.JsonPropertyName("delta_score")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("delta_score")]
public int DeltaScore { get; set; }
/// <summary>
/// 获取或设置流水类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("flow_type")]
[System.Text.Json.Serialization.JsonPropertyName("flow_type")]
[System.Xml.Serialization.XmlElement("flow_type")]
public int FlowType { get; set; }
}
}
/// <summary>
/// 获取或设置用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_info")]
[System.Text.Json.Serialization.JsonPropertyName("user_info")]
[System.Xml.Serialization.XmlElement("user_info")]
public Types.User User { get; set; } = default!;
}
}

View File

@ -1,82 +0,0 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_task_award 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/channels/API/vip/callback/member/user_finish_task.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipTaskAwardEvent : WechatApiEvent
{
public static class Types
{
public class Task
{
public static class Types
{
public class AwardInfo
{
/// <summary>
/// 获取或设置奖励类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("award_type")]
[System.Text.Json.Serialization.JsonPropertyName("award_type")]
[System.Xml.Serialization.XmlElement("award_type")]
public int AwardType { get; set; }
/// <summary>
/// 获取或设置奖励的优惠券 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("coupon_id")]
[System.Text.Json.Serialization.JsonPropertyName("coupon_id")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("coupon_id", IsNullable = true)]
public long? CouponId { get; set; }
/// <summary>
/// 获取或设置奖励的积分。
/// </summary>
[Newtonsoft.Json.JsonProperty("gain_score")]
[System.Text.Json.Serialization.JsonPropertyName("gain_score")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
[System.Xml.Serialization.XmlElement("gain_score", IsNullable = true)]
public int? GainScore { get; set; }
}
}
/// <summary>
/// 获取或设置任务 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("task_id")]
[System.Text.Json.Serialization.JsonPropertyName("task_id")]
[System.Xml.Serialization.XmlElement("task_id")]
public long TaskId { get; set; }
/// <summary>
/// 获取或设置任务名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("task_name")]
[System.Text.Json.Serialization.JsonPropertyName("task_name")]
[System.Xml.Serialization.XmlElement("task_name")]
public string TaskName { get; set; } = default!;
/// <summary>
/// 获取或设置奖励信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("award_info")]
[System.Text.Json.Serialization.JsonPropertyName("award_info")]
[System.Xml.Serialization.XmlElement("award_info")]
public Types.AwardInfo AwardInfo { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置任务信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("task_info")]
[System.Text.Json.Serialization.JsonPropertyName("task_info")]
[System.Xml.Serialization.XmlElement("task_info")]
public Types.Task Task { get; set; } = default!;
}
}

View File

@ -0,0 +1,58 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_user_auto_add 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/channels_ec_vip_user_auto_add.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipUserAutoAddEvent : WechatApiEvent
{
public static class Types
{
public class EventData
{
/// <summary>
/// 获取或设置小店 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("shop_appid")]
[System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
[System.Xml.Serialization.XmlElement("shop_appid")]
public string ShopAppId { get; set; } = default!;
/// <summary>
/// 获取或设置用户会员身份。
/// </summary>
[Newtonsoft.Json.JsonProperty("identity")]
[System.Text.Json.Serialization.JsonPropertyName("identity")]
[System.Xml.Serialization.XmlElement("identity")]
public string Identity { get; set; } = default!;
/// <summary>
/// 获取或设置用户会员 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("outer_userid")]
[System.Text.Json.Serialization.JsonPropertyName("outer_userid")]
[System.Xml.Serialization.XmlElement("outer_userid", IsNullable = true)]
public string? OutUserId { get; set; }
/// <summary>
/// 获取或设置关联成功时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("add_time")]
[System.Text.Json.Serialization.JsonPropertyName("add_time")]
[System.Xml.Serialization.XmlElement("add_time")]
public long AddTimestamp { get; set; }
}
}
/// <summary>
/// 获取或设置事件信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("info")]
[System.Text.Json.Serialization.JsonPropertyName("info")]
[System.Xml.Serialization.XmlElement("info")]
public Types.EventData EventData { get; set; } = default!;
}
}

View File

@ -0,0 +1,34 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Events
{
/// <summary>
/// <para>表示 EVENT.channels_ec_vip_user_info_get 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/channels_ec_vip_user_info_get.html ]]>
/// </para>
/// </summary>
public class ChannelsECVipUserInfoGetEvent : WechatApiEvent
{
public static class Types
{
public class EventData
{
/// <summary>
/// 获取或设置小店 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("shop_appid")]
[System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
[System.Xml.Serialization.XmlElement("shop_appid")]
public string ShopAppId { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置事件信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("info")]
[System.Text.Json.Serialization.JsonPropertyName("info")]
[System.Xml.Serialization.XmlElement("info")]
public Types.EventData EventData { get; set; } = default!;
}
}

View File

@ -7084,6 +7084,169 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
#endregion #endregion
#endregion #endregion
#region ECVip
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/v3/wxa/info/get 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/shop/get_wxa_bind_info.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipWxaInfoGetV3Response> ExecuteChannelsECVipWxaInfoGetV3Async(this WechatApiClient client, Models.ChannelsECVipWxaInfoGetV3Request 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", "vip", "v3", "wxa", "info", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipWxaInfoGetV3Response>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/user/info/add 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/add_vip_member.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipUserInfoAddResponse> ExecuteChannelsECVipUserInfoAddAsync(this WechatApiClient client, Models.ChannelsECVipUserInfoAddRequest 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", "vip", "user", "info", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipUserInfoAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/user/info/update 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/update_vip_member.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipUserInfoUpdateResponse> ExecuteChannelsECVipUserInfoUpdateAsync(this WechatApiClient client, Models.ChannelsECVipUserInfoUpdateRequest 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", "vip", "user", "info", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipUserInfoUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/user/info/get 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/get_vip_member.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipUserInfoGetResponse> ExecuteChannelsECVipUserInfoGetAsync(this WechatApiClient client, Models.ChannelsECVipUserInfoGetRequest 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", "vip", "user", "info", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipUserInfoGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/user/list/get 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/get_vip_member_list.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipUserListGetResponse> ExecuteChannelsECVipUserListGetAsync(this WechatApiClient client, Models.ChannelsECVipUserListGetRequest 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", "vip", "user", "list", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipUserListGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/user/info/delete 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/delete_vip_member.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipUserInfoDeleteResponse> ExecuteChannelsECVipUserInfoDeleteAsync(this WechatApiClient client, Models.ChannelsECVipUserInfoDeleteRequest 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", "vip", "user", "info", "delete")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipUserInfoDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/vip/shop/list/get 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/shop/API/wxamember/wxa/get_bind_shop_list.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECVipShopListGetResponse> ExecuteChannelsECVipShopListGetAsync(this WechatApiClient client, Models.ChannelsECVipShopListGetRequest 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", "vip", "shop", "list", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECVipShopListGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region ECVoucher #region ECVoucher
#region ECVoucher/Bill #region ECVoucher/Bill
/// <summary> /// <summary>

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/shop/list/get 接口的请求。</para>
/// </summary>
public class ChannelsECVipShopListGetRequest : WechatApiRequest, IInferable<ChannelsECVipShopListGetRequest, ChannelsECVipShopListGetResponse>
{
}
}

View File

@ -0,0 +1,28 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/shop/list/get 接口的响应。</para>
/// </summary>
public class ChannelsECVipShopListGetResponse : WechatApiResponse
{
public static class Types
{
public class ShopInfo
{
/// <summary>
/// 获取或设置小店 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("shop_appid")]
[System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
public string ShopAppId { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置已关联的小店列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("list")]
[System.Text.Json.Serialization.JsonPropertyName("list")]
public Types.ShopInfo[] ShopList { get; set; } = default!;
}
}

View File

@ -0,0 +1,49 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/add 接口的请求。</para>
/// </summary>
public class ChannelsECVipUserInfoAddRequest : WechatApiRequest, IInferable<ChannelsECVipUserInfoAddRequest, ChannelsECVipUserInfoAddResponse>
{
public static class Types
{
public class UserInfo
{
/// <summary>
/// 获取或设置用户会员身份。
/// </summary>
[Newtonsoft.Json.JsonProperty("identity")]
[System.Text.Json.Serialization.JsonPropertyName("identity")]
public string Identity { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户会员 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("outer_userid")]
[System.Text.Json.Serialization.JsonPropertyName("outer_userid")]
public string? OutUserId { get; set; }
}
}
/// <summary>
/// 获取或设置用户操作的会话 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("session_id")]
[System.Text.Json.Serialization.JsonPropertyName("session_id")]
public string SessionId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置小程序用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("wxa_openid")]
[System.Text.Json.Serialization.JsonPropertyName("wxa_openid")]
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置小程序用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("info")]
[System.Text.Json.Serialization.JsonPropertyName("info")]
public Types.UserInfo UserInfo { get; set; } = new Types.UserInfo();
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/add 接口的响应。</para>
/// </summary>
public class ChannelsECVipUserInfoAddResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/delete 接口的请求。</para>
/// </summary>
public class ChannelsECVipUserInfoDeleteRequest : WechatApiRequest, IInferable<ChannelsECVipUserInfoDeleteRequest, ChannelsECVipUserInfoDeleteResponse>
{
/// <summary>
/// 获取或设置小程序用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("wxa_openid")]
[System.Text.Json.Serialization.JsonPropertyName("wxa_openid")]
public string OpenId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/delete 接口的响应。</para>
/// </summary>
public class ChannelsECVipUserInfoDeleteResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/get 接口的请求。</para>
/// </summary>
public class ChannelsECVipUserInfoGetRequest : WechatApiRequest, IInferable<ChannelsECVipUserInfoGetRequest, ChannelsECVipUserInfoGetResponse>
{
/// <summary>
/// 获取或设置小程序用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("wxa_openid")]
[System.Text.Json.Serialization.JsonPropertyName("wxa_openid")]
public string OpenId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,42 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/get 接口的响应。</para>
/// </summary>
public class ChannelsECVipUserInfoGetResponse : WechatApiResponse
{
public static class Types
{
public class UserInfo
{
/// <summary>
/// 获取或设置用户会员身份。
/// </summary>
[Newtonsoft.Json.JsonProperty("identity")]
[System.Text.Json.Serialization.JsonPropertyName("identity")]
public string Identity { get; set; } = default!;
/// <summary>
/// 获取或设置用户会员 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("outer_userid")]
[System.Text.Json.Serialization.JsonPropertyName("outer_userid")]
public string? OutUserId { get; set; }
/// <summary>
/// 获取或设置已关联的小店 AppId 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("related_shop_appid")]
[System.Text.Json.Serialization.JsonPropertyName("related_shop_appid")]
public string[] RelatedShopAppIdList { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置小程序用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("info")]
[System.Text.Json.Serialization.JsonPropertyName("info")]
public Types.UserInfo UserInfo { get; set; } = default!;
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/update 接口的请求。</para>
/// </summary>
public class ChannelsECVipUserInfoUpdateRequest : WechatApiRequest, IInferable<ChannelsECVipUserInfoUpdateRequest, ChannelsECVipUserInfoUpdateResponse>
{
public static class Types
{
public class UserInfo : ChannelsECVipUserInfoAddRequest.Types.UserInfo
{
}
}
/// <summary>
/// 获取或设置小程序用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("wxa_openid")]
[System.Text.Json.Serialization.JsonPropertyName("wxa_openid")]
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置小程序用户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("info")]
[System.Text.Json.Serialization.JsonPropertyName("info")]
public Types.UserInfo UserInfo { get; set; } = new Types.UserInfo();
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/info/update 接口的响应。</para>
/// </summary>
public class ChannelsECVipUserInfoUpdateResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,23 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/list/get 接口的请求。</para>
/// </summary>
public class ChannelsECVipUserListGetRequest : WechatApiRequest, IInferable<ChannelsECVipUserListGetRequest, ChannelsECVipUserListGetResponse>
{
/// <summary>
/// 获取或设置分页起始位置。
/// </summary>
[Newtonsoft.Json.JsonProperty("offset")]
[System.Text.Json.Serialization.JsonPropertyName("offset")]
public int Offset { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// <para>默认值10</para>
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int Limit { get; set; } = 10;
}
}

View File

@ -0,0 +1,49 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/user/list/get 接口的响应。</para>
/// </summary>
public class ChannelsECVipUserListGetResponse : WechatApiResponse
{
public static class Types
{
public class UserInfo
{
/// <summary>
/// 获取或设置小程序用户的 OpenId。
/// </summary>
[Newtonsoft.Json.JsonProperty("wxa_openid")]
[System.Text.Json.Serialization.JsonPropertyName("wxa_openid")]
public string OpenId { get; set; } = default!;
/// <summary>
/// 获取或设置用户会员身份。
/// </summary>
[Newtonsoft.Json.JsonProperty("identity")]
[System.Text.Json.Serialization.JsonPropertyName("identity")]
public string Identity { get; set; } = default!;
/// <summary>
/// 获取或设置用户会员 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("outer_userid")]
[System.Text.Json.Serialization.JsonPropertyName("outer_userid")]
public string? OutUserId { get; set; }
/// <summary>
/// 获取或设置已关联的小店 AppId 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("related_shop_appid")]
[System.Text.Json.Serialization.JsonPropertyName("related_shop_appid")]
public string[] RelatedShopAppIdList { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置小程序用户列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("list")]
[System.Text.Json.Serialization.JsonPropertyName("list")]
public Types.UserInfo[] UserList { get; set; } = default!;
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/v3/wxa/info/get 接口的请求。</para>
/// </summary>
public class ChannelsECVipWxaInfoGetV3Request : WechatApiRequest, IInferable<ChannelsECVipWxaInfoGetV3Request, ChannelsECVipWxaInfoGetV3Response>
{
}
}

View File

@ -0,0 +1,86 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/vip/v3/wxa/info/get 接口的响应。</para>
/// </summary>
public class ChannelsECVipWxaInfoGetV3Response : WechatApiResponse
{
public static class Types
{
public class MiniProgramInfo
{
public static class Types
{
public class PathInfo
{
/// <summary>
/// 获取或设置会员注册页面路径。
/// </summary>
[Newtonsoft.Json.JsonProperty("register_path")]
[System.Text.Json.Serialization.JsonPropertyName("register_path")]
public string RegisterPathPath { get; set; } = default!;
/// <summary>
/// 获取或设置会员权益页面路径。
/// </summary>
[Newtonsoft.Json.JsonProperty("rights_path")]
[System.Text.Json.Serialization.JsonPropertyName("rights_path")]
public string RightsPagePath { get; set; } = default!;
}
public class DisplayInfo
{
/// <summary>
/// 获取或设置下单页权益展示开关。
/// </summary>
[Newtonsoft.Json.JsonProperty("order_page_display")]
[System.Text.Json.Serialization.JsonPropertyName("order_page_display")]
public int OrderPageDisplayMode { get; set; }
}
}
/// <summary>
/// 获取或设置页面路径信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("paths")]
[System.Text.Json.Serialization.JsonPropertyName("paths")]
public Types.PathInfo PathInfo { get; set; } = default!;
/// <summary>
/// 获取或设置测试白名单用户 OpenId 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("whitelist_openids")]
[System.Text.Json.Serialization.JsonPropertyName("whitelist_openids")]
public string[] WhiteListOpenIdList { get; set; } = default!;
/// <summary>
/// 获取或设置展示信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("display_info")]
[System.Text.Json.Serialization.JsonPropertyName("display_info")]
public Types.DisplayInfo DisplayInfo { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置小程序 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("wxa_appid")]
[System.Text.Json.Serialization.JsonPropertyName("wxa_appid")]
public string MiniProgramAppId { get; set; } = default!;
/// <summary>
/// 获取或设置小程序信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("info")]
[System.Text.Json.Serialization.JsonPropertyName("info")]
public Types.MiniProgramInfo MiniProgramInfo { get; set; } = default!;
/// <summary>
/// 获取或设置状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("state")]
[System.Text.Json.Serialization.JsonPropertyName("state")]
public int State { get; set; }
}
}

View File

@ -1,11 +0,0 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "channels_ec_vip_grade_info_update",
"user_info": {
"grade": 2,
"experience_value": 100
}
}

View File

@ -1,11 +0,0 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "channels_ec_vip_join",
"user_info": {
"join_time": 1662480000,
"phone_number": "123456789"
}
}

View File

@ -1,17 +0,0 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "channels_ec_vip_score_exchange",
"exchange_info": {
"pay_score": 100,
"score_item_type": 1,
"coupon_info": {
"related_coupon_id": 1234
},
"product_info": {
"related_product_id": 1234
}
}
}

View File

@ -1,12 +0,0 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "channels_ec_vip_score_update",
"user_info": {
"score": 100,
"delta_score": -10,
"flow_type": 3
}
}

View File

@ -1,16 +0,0 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "channels_ec_vip_task_award",
"task_info": {
"task_id": 123,
"task_name": "任务名称",
"award_info": {
"award_type": 1,
"coupon_id": 1234,
"gain_score": 100
}
}
}

View File

@ -0,0 +1,13 @@
{
"ToUserName": "gh_*",
"FromUserName": "OPENID",
"CreateTime": 1662480000,
"MsgType": "event",
"Event": "channels_ec_vip_user_auto_add",
"info": {
"shop_appid": "xxxxxxxxx",
"outer_userid": "xxxxxxxx",
"identity": "V1",
"add_time": 1666673734
}
}

View File

@ -3,8 +3,8 @@
"FromUserName": "OPENID", "FromUserName": "OPENID",
"CreateTime": 1662480000, "CreateTime": 1662480000,
"MsgType": "event", "MsgType": "event",
"Event": "channels_ec_vip_close", "Event": "channels_ec_vip_user_info_get",
"user_info": { "info": {
"close_time": 1662480000 "shop_appid": "shop_appid"
} }
} }

View File

@ -0,0 +1,9 @@
{
"errcode": 0,
"errmsg": "ok",
"list": [
{
"shop_appid": "shop_appid"
}
]
}

View File

@ -0,0 +1,8 @@
{
"session_id": "session_id",
"wxa_openid": "wxa_openid",
"info": {
"identity": "Lv.1",
"outer_userid": "outer_userid"
}
}

View File

@ -0,0 +1,9 @@
{
"errcode": 0,
"errmsg": "ok",
"info": {
"identity": "Lv.1",
"outer_userid": "outer_userid",
"related_shop_appid": [ "appid1", "appid2" ]
}
}

View File

@ -0,0 +1,7 @@
{
"wxa_openid": "wxa_openid",
"info": {
"identity": "Lv.1",
"outer_userid": "outer_userid"
}
}

View File

@ -0,0 +1,12 @@
{
"errcode": 0,
"errmsg": "ok",
"list": [
{
"wxa_openid": "wxa_openid",
"identity": "Lv.1",
"outer_userid": "outer_userid",
"related_shop_appid": [ "shop_appid1", "shop_appid2" ]
}
]
}

View File

@ -0,0 +1,19 @@
{
"errcode": 0,
"errmsg": "ok",
"wxa_appid": "wxxxxxxxxxxxxxxxxx",
"info": {
"paths": {
"register_path": "main/register/path",
"rights_path": "main/rights/path"
},
"whitelist_openids": [
"openid_1",
"openid_2"
],
"display_info": {
"order_page_display": 0
}
},
"state": 0
}