diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs index 0c072c12..a88ee3a3 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs @@ -79,6 +79,292 @@ namespace SKIT.FlurlHttpClient.Wechat.Api return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + #region Analysis + /// + /// 异步调用 [POST] /wxa/business/performance/boot 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/analysis.getPerformanceData.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaBusinessPerformanceBootAsync(this WechatApiClient client, Models.WxaBusinessPerformanceBootRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "business", "performance", "boot") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region Charge + /// + /// 异步调用 [GET] /wxa/charge/usage/get 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/charge/api/charge_get_usage_detail.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaChargeUsageGetAsync(this WechatApiClient client, Models.WxaChargeUsageGetRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "charge", "usage", "get") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("spuId", request.SPUId) + .SetQueryParam("offset", request.Offset) + .SetQueryParam("limit", request.Limit); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /wxa/charge/usage/get_recent_average 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/charge/api/charge_get_usage_detail.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaChargeUsageGetRecentAverageAsync(this WechatApiClient client, Models.WxaChargeUsageGetRecentAverageRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "charge", "usage", "get_recent_average") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("spuId", request.SPUId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region HardwareDevice + /// + /// 异步调用 [POST] /wxa/getsnticket 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/hardware-device/hardwareDevice.getSnTicket.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetSnTicketAsync(this WechatApiClient client, Models.WxaGetSnTicketRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "getsnticket") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region LockStep + /// + /// 异步调用 [POST] /wxa/createwxagameroom 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.createGameRoom.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaCreateWxaGameRoomAsync(this WechatApiClient client, Models.WxaCreateWxaGameRoomRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "createwxagameroom") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /wxa/getwxagameframe 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.createGameRoom.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetWxaGameFrameAsync(this WechatApiClient client, Models.WxaGetWxaGameFrameRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "getwxagameframe") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("access_info", request.AccessInformation) + .SetQueryParam("begin_frame_id", request.BeginFrameId) + .SetQueryParam("end_frame_id", request.EndFrameId); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /wxa/getwxagameidentityinfo 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.getGameIdentityInfo.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetWxaGameIdentityInfoAsync(this WechatApiClient client, Models.WxaGetWxaGameIdentityInfoRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "getwxagameidentityinfo") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("access_info", request.AccessInformation); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /wxa/getwxagameroominfo 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.getGameRoomInfo.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetWxaGameRoomInfoAsync(this WechatApiClient client, Models.WxaGetWxaGameRoomInfoRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "getwxagameroominfo") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("access_info", request.AccessInformation); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region NearybyPOI + /// + /// 异步调用 [POST] /wxa/addnearbypoi 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.add.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaAddNearbyPOIAsync(this WechatApiClient client, Models.WxaAddNearbyPOIRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "addnearbypoi") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/delnearbypoi 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.delete.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaDeleteNearbyPOIAsync(this WechatApiClient client, Models.WxaDeleteNearbyPOIRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "delnearbypoi") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /wxa/getnearbypoilist 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.getList.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetNearbyPOIListAsync(this WechatApiClient client, Models.WxaGetNearbyPOIListRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "getnearbypoilist") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("page", request.Page) + .SetQueryParam("page_rows", request.Limit); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/setnearbypoishowstatus 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.setShowStatus.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaSetNearbyPOIShowStatusAsync(this WechatApiClient client, Models.WxaSetNearbyPOIShowStatusRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "setnearbypoishowstatus") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region Operation + /// + /// 异步调用 [GET] /wxa/getwxadevinfo 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/operation/operation.getDomainInfo.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetWxaDevInfoAsync(this WechatApiClient client, Models.WxaGetWxaDevInfoRequest 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 + .CreateRequest(request, HttpMethod.Get, "wxa", "getwxadevinfo") + .SetQueryParam("access_token", request.AccessToken); + + if (request.Action != null) + flurlReq.SetQueryParam("action", request.Action); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + #region Plugin /// /// 异步调用 [POST] /wxa/plugin?action=apply 接口。 @@ -235,156 +521,92 @@ namespace SKIT.FlurlHttpClient.Wechat.Api } #endregion - #region WxaCode + #region RiskControl /// - /// 异步调用 [POST] /wxa/getwxacode 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/qr-code/wxacode.get.html + /// 异步调用 [POST] /wxa/getuserriskrank 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html /// /// /// /// /// - public static async Task ExecuteWxaGetWxaCodeAsync(this WechatApiClient client, Models.WxaGetWxaCodeRequest request, CancellationToken cancellationToken = default) + public static async Task ExecuteWxaGetUserRiskRankAsync(this WechatApiClient client, Models.WxaGetUserRiskRankRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "getwxacode") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/getwxacodeunlimit 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetWxaCodeUnlimitAsync(this WechatApiClient client, Models.WxaGetWxaCodeUnlimitRequest request, CancellationToken cancellationToken = default) - { - if (client is null) throw new ArgumentNullException(nameof(client)); - if (request is null) throw new ArgumentNullException(nameof(request)); + if (request.AppId == null) + request.AppId = client.Credentials.AppId; IFlurlRequest flurlReq = client - .CreateRequest(request, HttpMethod.Post, "wxa", "getwxacodeunlimit") + .CreateRequest(request, HttpMethod.Post, "wxa", "getuserriskrank") .SetQueryParam("access_token", request.AccessToken); - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion - #region UrlScheme + #region Search /// - /// 异步调用 [POST] /wxa/generatescheme 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-scheme/urlscheme.generate.html + /// 异步调用 [POST] /wxa/imagesearch 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.imageSearch.html /// /// /// /// /// - public static async Task ExecuteWxaGenerateSchemeAsync(this WechatApiClient client, Models.WxaGenerateSchemeRequest request, CancellationToken cancellationToken = default) + public static async Task ExecuteWxaImageSearchAsync(this WechatApiClient client, Models.WxaImageSearchRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "generatescheme") + .CreateRequest(request, HttpMethod.Post, "wxa", "imagesearch") .SetQueryParam("access_token", request.AccessToken); - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + using var httpContent = Utilities.FileHttpContentBuilder.Build(fileName: "image.png", fileBytes: request.ImageFileBytes, fileContentType: "image/png", formDataName: "img"); + return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } /// - /// 异步调用 [POST] /wxa/queryscheme 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-scheme/urlscheme.query.html + /// 异步调用 [POST] /wxa/sitesearch 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.siteSearch.html /// /// /// /// /// - public static async Task ExecuteWxaQuerySchemeAsync(this WechatApiClient client, Models.WxaQuerySchemeRequest request, CancellationToken cancellationToken = default) + public static async Task ExecuteWxaSiteSearchAsync(this WechatApiClient client, Models.WxaSiteSearchRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "queryscheme") + .CreateRequest(request, HttpMethod.Post, "wxa", "sitesearch") .SetQueryParam("access_token", request.AccessToken); - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } /// - /// 异步调用 [POST] /wxa/generatenfcscheme 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generateNFC.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-scheme/urlscheme.generateNFC.html + /// 异步调用 [POST] /wxa/search/wxaapi_submitpages 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.submitPages.html /// /// /// /// /// - public static async Task ExecuteWxaGenerateNFCSchemeAsync(this WechatApiClient client, Models.WxaGenerateNFCSchemeRequest request, CancellationToken cancellationToken = default) + public static async Task ExecuteWxaSearchWxaApiSubmitPagesAsync(this WechatApiClient client, Models.WxaSearchWxaApiSubmitPagesRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "generatenfcscheme") + .CreateRequest(request, HttpMethod.Post, "wxa", "search", "wxaapi_submitpages") .SetQueryParam("access_token", request.AccessToken); - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region UrlLink - /// - /// 异步调用 [POST] /wxa/generate_urllink 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-link/urllink.generate.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGenerateUrlLinkAsync(this WechatApiClient client, Models.WxaGenerateUrlLinkRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "generate_urllink") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/query_urllink 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.query.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-link/urllink.query.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaQueryUrlLinkAsync(this WechatApiClient client, Models.WxaQueryUrlLinkRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "query_urllink") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion @@ -458,384 +680,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Api } #endregion - #region RiskControl - /// - /// 异步调用 [POST] /wxa/getuserriskrank 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetUserRiskRankAsync(this WechatApiClient client, Models.WxaGetUserRiskRankRequest request, CancellationToken cancellationToken = default) - { - if (client is null) throw new ArgumentNullException(nameof(client)); - if (request is null) throw new ArgumentNullException(nameof(request)); - - if (request.AppId == null) - request.AppId = client.Credentials.AppId; - - IFlurlRequest flurlReq = client - .CreateRequest(request, HttpMethod.Post, "wxa", "getuserriskrank") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region Analysis - /// - /// 异步调用 [POST] /wxa/business/performance/boot 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/data-analysis/analysis.getPerformanceData.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaBusinessPerformanceBootAsync(this WechatApiClient client, Models.WxaBusinessPerformanceBootRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "business", "performance", "boot") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region Storage - /// - /// 异步调用 [POST] /wxa/remove_user_storage 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/data/storage.removeUserStorage.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaRemoveUserStorageAsync(this WechatApiClient client, Models.WxaRemoveUserStorageRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "remove_user_storage") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("openid", request.OpenId) - .SetQueryParam("signature", request.Signature) - .SetQueryParam("sig_method", request.SignMethod); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/setuserinteractivedata 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/data/storage.setUserInteractiveData.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaSetUserInteractiveDataAsync(this WechatApiClient client, Models.WxaSetUserInteractiveDataRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "setuserinteractivedata") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("openid", request.OpenId) - .SetQueryParam("signature", request.Signature) - .SetQueryParam("sig_method", request.SignMethod); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/set_user_storage 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/data/storage.setUserStorage.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaSetUserStorageAsync(this WechatApiClient client, Models.WxaSetUserStorageRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "set_user_storage") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("openid", request.OpenId) - .SetQueryParam("signature", request.Signature) - .SetQueryParam("sig_method", request.SignMethod); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region NearybyPOI - /// - /// 异步调用 [POST] /wxa/addnearbypoi 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.add.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaAddNearbyPOIAsync(this WechatApiClient client, Models.WxaAddNearbyPOIRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "addnearbypoi") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/delnearbypoi 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.delete.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaDeleteNearbyPOIAsync(this WechatApiClient client, Models.WxaDeleteNearbyPOIRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "delnearbypoi") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [GET] /wxa/getnearbypoilist 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.getList.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetNearbyPOIListAsync(this WechatApiClient client, Models.WxaGetNearbyPOIListRequest 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 - .CreateRequest(request, HttpMethod.Get, "wxa", "getnearbypoilist") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("page", request.Page) - .SetQueryParam("page_rows", request.Limit); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/setnearbypoishowstatus 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/nearby-poi/nearbyPoi.setShowStatus.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaSetNearbyPOIShowStatusAsync(this WechatApiClient client, Models.WxaSetNearbyPOIShowStatusRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "setnearbypoishowstatus") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region LockStep - /// - /// 异步调用 [POST] /wxa/createwxagameroom 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.createGameRoom.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaCreateWxaGameRoomAsync(this WechatApiClient client, Models.WxaCreateWxaGameRoomRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "createwxagameroom") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [GET] /wxa/getwxagameframe 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.createGameRoom.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetWxaGameFrameAsync(this WechatApiClient client, Models.WxaGetWxaGameFrameRequest 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 - .CreateRequest(request, HttpMethod.Get, "wxa", "getwxagameframe") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("access_info", request.AccessInformation) - .SetQueryParam("begin_frame_id", request.BeginFrameId) - .SetQueryParam("end_frame_id", request.EndFrameId); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [GET] /wxa/getwxagameidentityinfo 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.getGameIdentityInfo.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetWxaGameIdentityInfoAsync(this WechatApiClient client, Models.WxaGetWxaGameIdentityInfoRequest 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 - .CreateRequest(request, HttpMethod.Get, "wxa", "getwxagameidentityinfo") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("access_info", request.AccessInformation); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [GET] /wxa/getwxagameroominfo 接口。 - /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/lock-step/lock-step.getGameRoomInfo.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetWxaGameRoomInfoAsync(this WechatApiClient client, Models.WxaGetWxaGameRoomInfoRequest 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 - .CreateRequest(request, HttpMethod.Get, "wxa", "getwxagameroominfo") - .SetQueryParam("access_token", request.AccessToken) - .SetQueryParam("access_info", request.AccessInformation); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region Operation - /// - /// 异步调用 [GET] /wxa/getwxadevinfo 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/operation/operation.getDomainInfo.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetWxaDevInfoAsync(this WechatApiClient client, Models.WxaGetWxaDevInfoRequest 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 - .CreateRequest(request, HttpMethod.Get, "wxa", "getwxadevinfo") - .SetQueryParam("access_token", request.AccessToken); - - if (request.Action != null) - flurlReq.SetQueryParam("action", request.Action); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - - #region Search - /// - /// 异步调用 [POST] /wxa/imagesearch 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.imageSearch.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaImageSearchAsync(this WechatApiClient client, Models.WxaImageSearchRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "imagesearch") - .SetQueryParam("access_token", request.AccessToken); - - using var httpContent = Utilities.FileHttpContentBuilder.Build(fileName: "image.png", fileBytes: request.ImageFileBytes, fileContentType: "image/png", formDataName: "img"); - return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/sitesearch 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.siteSearch.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaSiteSearchAsync(this WechatApiClient client, Models.WxaSiteSearchRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "sitesearch") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /wxa/search/wxaapi_submitpages 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/search/search.submitPages.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaSearchWxaApiSubmitPagesAsync(this WechatApiClient client, Models.WxaSearchWxaApiSubmitPagesRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "search", "wxaapi_submitpages") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion - #region ServiceMarket /// /// 异步调用 [POST] /wxa/servicemarket 接口。 @@ -981,6 +825,230 @@ namespace SKIT.FlurlHttpClient.Wechat.Api } #endregion + #region Storage + /// + /// 异步调用 [POST] /wxa/remove_user_storage 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/data/storage.removeUserStorage.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaRemoveUserStorageAsync(this WechatApiClient client, Models.WxaRemoveUserStorageRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "remove_user_storage") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("openid", request.OpenId) + .SetQueryParam("signature", request.Signature) + .SetQueryParam("sig_method", request.SignMethod); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/setuserinteractivedata 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/data/storage.setUserInteractiveData.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaSetUserInteractiveDataAsync(this WechatApiClient client, Models.WxaSetUserInteractiveDataRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "setuserinteractivedata") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("openid", request.OpenId) + .SetQueryParam("signature", request.Signature) + .SetQueryParam("sig_method", request.SignMethod); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/set_user_storage 接口。 + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/data/storage.setUserStorage.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaSetUserStorageAsync(this WechatApiClient client, Models.WxaSetUserStorageRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "set_user_storage") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("openid", request.OpenId) + .SetQueryParam("signature", request.Signature) + .SetQueryParam("sig_method", request.SignMethod); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region UrlLink + /// + /// 异步调用 [POST] /wxa/generate_urllink 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-link/urllink.generate.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGenerateUrlLinkAsync(this WechatApiClient client, Models.WxaGenerateUrlLinkRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "generate_urllink") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/query_urllink 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.query.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-link/urllink.query.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaQueryUrlLinkAsync(this WechatApiClient client, Models.WxaQueryUrlLinkRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "query_urllink") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region UrlScheme + /// + /// 异步调用 [POST] /wxa/generatescheme 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-scheme/urlscheme.generate.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGenerateSchemeAsync(this WechatApiClient client, Models.WxaGenerateSchemeRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "generatescheme") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/queryscheme 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.query.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-scheme/urlscheme.query.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaQuerySchemeAsync(this WechatApiClient client, Models.WxaQuerySchemeRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "queryscheme") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/generatenfcscheme 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generateNFC.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/url-scheme/urlscheme.generateNFC.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGenerateNFCSchemeAsync(this WechatApiClient client, Models.WxaGenerateNFCSchemeRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "generatenfcscheme") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + + #region WxaCode + /// + /// 异步调用 [POST] /wxa/getwxacode 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/qr-code/wxacode.get.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetWxaCodeAsync(this WechatApiClient client, Models.WxaGetWxaCodeRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "getwxacode") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /wxa/getwxacodeunlimit 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html + /// REF: https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html + /// + /// + /// + /// + /// + public static async Task ExecuteWxaGetWxaCodeUnlimitAsync(this WechatApiClient client, Models.WxaGetWxaCodeUnlimitRequest 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 + .CreateRequest(request, HttpMethod.Post, "wxa", "getwxacodeunlimit") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion + #region WxaStore /// /// 异步调用 [GET] /wxa/get_merchant_category 接口。 @@ -1222,27 +1290,5 @@ namespace SKIT.FlurlHttpClient.Wechat.Api return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion - - #region HardwareDevice - /// - /// 异步调用 [POST] /wxa/getsnticket 接口。 - /// REF: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/hardware-device/hardwareDevice.getSnTicket.html - /// - /// - /// - /// - /// - public static async Task ExecuteWxaGetSnTicketAsync(this WechatApiClient client, Models.WxaGetSnTicketRequest 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 - .CreateRequest(request, HttpMethod.Post, "wxa", "getsnticket") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRecentAverageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRecentAverageRequest.cs new file mode 100644 index 00000000..0dcf21f7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRecentAverageRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [GET] /wxa/charge/usage/get_recent_average 接口的请求。 + /// + public class WxaChargeUsageGetRecentAverageRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 SPU ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SPUId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRecentAverageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRecentAverageResponse.cs new file mode 100644 index 00000000..404c274c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRecentAverageResponse.cs @@ -0,0 +1,16 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [GET] /wxa/charge/usage/get_recent_average 接口的响应。 + /// + public class WxaChargeUsageGetRecentAverageResponse : WechatApiResponse + { + /// + /// 获取或设置最近月平均用量。 + /// + [Newtonsoft.Json.JsonProperty("averageData")] + [System.Text.Json.Serialization.JsonPropertyName("averageData")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long AverageData { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRequest.cs new file mode 100644 index 00000000..1c508501 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetRequest.cs @@ -0,0 +1,30 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [GET] /wxa/charge/usage/get 接口的请求。 + /// + public class WxaChargeUsageGetRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品 SPU ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string SPUId { get; set; } = string.Empty; + + /// + /// 获取或设置分页起始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int Offset { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// 默认值:20 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int Limit { get; set; } = 20; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetResponse.cs new file mode 100644 index 00000000..a078ed6a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Charge/WxaChargeUsageGetResponse.cs @@ -0,0 +1,131 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [GET] /wxa/charge/usage/get 接口的响应。 + /// + public class WxaChargeUsageGetResponse : WechatApiResponse + { + public static class Types + { + public class Detail + { + /// + /// 获取或设置资源包 ID。 + /// + [Newtonsoft.Json.JsonProperty("pkgId")] + [System.Text.Json.Serialization.JsonPropertyName("pkgId")] + public string PackageId { get; set; } = default!; + + /// + /// 获取或设置额度来源的商品 SPU ID。 + /// + [Newtonsoft.Json.JsonProperty("spuId")] + [System.Text.Json.Serialization.JsonPropertyName("spuId")] + public string SPUId { get; set; } = default!; + + /// + /// 获取或设置额度来源的商品 SKU ID。 + /// + [Newtonsoft.Json.JsonProperty("skuId")] + [System.Text.Json.Serialization.JsonPropertyName("skuId")] + public string? SKUId { get; set; } + + /// + /// 获取或设置资源包状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置额度有效期开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("startTime")] + [System.Text.Json.Serialization.JsonPropertyName("startTime")] + public long StartTimestamp { get; set; } + + /// + /// 获取或设置额度有效期结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("endTime")] + [System.Text.Json.Serialization.JsonPropertyName("endTime")] + public long EndTimestamp { get; set; } + + /// + /// 获取或设置额度容量。 + /// + [Newtonsoft.Json.JsonProperty("all")] + [System.Text.Json.Serialization.JsonPropertyName("all")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long AllQuota { get; set; } + + /// + /// 获取或设置使用额度。 + /// + [Newtonsoft.Json.JsonProperty("used")] + [System.Text.Json.Serialization.JsonPropertyName("used")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long UsedQuota { get; set; } + + /// + /// 获取或设置额度来源。 + /// + [Newtonsoft.Json.JsonProperty("source")] + [System.Text.Json.Serialization.JsonPropertyName("source")] + public int? Source { get; set; } + } + } + + /// + /// 获取或设置资源可用总量。 + /// + [Newtonsoft.Json.JsonProperty("all")] + [System.Text.Json.Serialization.JsonPropertyName("all")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long AllQuota { get; set; } + + /// + /// 获取或设置资源总量。 + /// + [Newtonsoft.Json.JsonProperty("effectiveAll")] + [System.Text.Json.Serialization.JsonPropertyName("effectiveAll")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long EffectiveAllQuota { get; set; } + + /// + /// 获取或设置累计用量。 + /// + [Newtonsoft.Json.JsonProperty("effectiveUse")] + [System.Text.Json.Serialization.JsonPropertyName("effectiveUse")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long EffectiveUsedQuota { get; set; } + + /// + /// 获取或设置订阅开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("startServiceTime")] + [System.Text.Json.Serialization.JsonPropertyName("startServiceTime")] + public long StartServiceTime { get; set; } + + /// + /// 获取或设置订阅结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("endServiceTime")] + [System.Text.Json.Serialization.JsonPropertyName("endServiceTime")] + public long EndServiceTime { get; set; } + + /// + /// 获取或设置用量详情列表。 + /// + [Newtonsoft.Json.JsonProperty("detailList")] + [System.Text.Json.Serialization.JsonPropertyName("detailList")] + public Types.Detail[] DetailList { get; set; } = default!; + + /// + /// 获取或设置用量详情总数量。 + /// + [Newtonsoft.Json.JsonProperty("total")] + [System.Text.Json.Serialization.JsonPropertyName("total")] + public int TotalCount { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/Charge/WxaChargeUsageGetRecentAverageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/Charge/WxaChargeUsageGetRecentAverageResponse.json new file mode 100644 index 00000000..bb7ee88d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/Charge/WxaChargeUsageGetRecentAverageResponse.json @@ -0,0 +1,4 @@ +{ + "errcode": 0, + "averageData": 260000 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/Charge/WxaChargeUsageGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/Charge/WxaChargeUsageGetResponse.json new file mode 100644 index 00000000..1d05c0d2 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/Wxa/Charge/WxaChargeUsageGetResponse.json @@ -0,0 +1,31 @@ +{ + "errcode": 0, + "all": "10", + "effectiveAll": "10", + "effectiveUse": "0", + "startServiceTime": 1669129510, + "endServiceTime": 1709450190, + "total": 2, + "detailList": [ + { + "pkgId": "ZY2823973277692477440", + "startTime": 1677914190, + "endTime": 1709450190, + "used": "0", + "all": "4", + "status": 1, + "spuId": "10000057", + "skuId": "20000059" + }, + { + "pkgId": "ZY2676590816357400576", + "startTime": 1669129510, + "endTime": 1700665510, + "used": "0", + "all": "6", + "status": 1, + "spuId": "10000057", + "skuId": "20000060" + } + ] +}