diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CorpArchitectureAuthEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CorpArchitectureAuthEvent.cs new file mode 100644 index 00000000..20629c07 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CorpArchitectureAuthEvent.cs @@ -0,0 +1,21 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.corp_arch_auth 事件的数据。 + /// REF: https://developer.work.weixin.qq.com/document/path/97378 + /// + public class CorpArchitectureAuthEvent : WechatWorkEvent, WechatWorkEvent.Serialization.IXmlSerializable + { + /// + /// 获取或设置第三方应用的 SuiteId。 + /// + [System.Xml.Serialization.XmlElement("SuiteId")] + public string SuiteId { get; set; } = default!; + + /// + /// 获取或设置授权方的 CorpId。 + /// + [System.Xml.Serialization.XmlElement("AuthCorpId")] + public string AuthorizerCorpId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinIdConvertExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinIdConvertExtensions.cs new file mode 100644 index 00000000..326c8d2a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinIdConvertExtensions.cs @@ -0,0 +1,95 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work +{ + public static class WechatWorkClientExecuteCgibinIdConvertExtensions + { + /// + /// 异步调用 [POST] /cgi-bin/idconvert/unionid_to_external_userid 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/95926 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinIdConvertUnionIdToExternalUserIdAsync(this WechatWorkClient client, Models.CgibinIdConvertUnionIdToExternalUserIdRequest 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, "cgi-bin", "idconvert", "unionid_to_external_userid") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/idconvert/batch/external_userid_to_pending_id 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/95926 + /// REF: https://developer.work.weixin.qq.com/document/path/95900 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinIdConvertBatchExternalUserIdToPendingIdAsync(this WechatWorkClient client, Models.CgibinIdConvertBatchExternalUserIdToPendingIdRequest 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, "cgi-bin", "idconvert", "batch", "external_userid_to_pending_id") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/idconvert/external_tagid 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/95926 + /// REF: https://developer.work.weixin.qq.com/document/path/96169 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinIdConvertExternalTagIdAsync(this WechatWorkClient client, Models.CgibinIdConvertExternalTagIdRequest 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, "cgi-bin", "idconvert", "external_tagid") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/idconvert/open_kfid 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/97064 + /// REF: https://developer.work.weixin.qq.com/document/path/96169 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinIdConvertOpenKfIdAsync(this WechatWorkClient client, Models.CgibinIdConvertOpenKfIdRequest 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, "cgi-bin", "idconvert", "open_kfid") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdRequest.cs new file mode 100644 index 00000000..54abe0fc --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdRequest.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/batch/external_userid_to_pending_id 接口的请求。 + /// + public class CgibinIdConvertBatchExternalUserIdToPendingIdRequest : WechatWorkRequest + { + /// + /// 获取或设置群聊 ID。 + /// + [Newtonsoft.Json.JsonProperty("chat_id")] + [System.Text.Json.Serialization.JsonPropertyName("chat_id")] + public string? ChatId { get; set; } + + /// + /// 获取或设置外部联系人账号列表。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public IList ExternalUserIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdResponse.cs new file mode 100644 index 00000000..c77a111c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdResponse.cs @@ -0,0 +1,35 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/batch/external_userid_to_pending_id 接口的响应。 + /// + public class CgibinIdConvertBatchExternalUserIdToPendingIdResponse : WechatWorkResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置外部联系人账号。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string ExternalUserId { get; set; } = default!; + + /// + /// 获取或设置临时部联系人账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("pending_id")] + [System.Text.Json.Serialization.JsonPropertyName("pending_id")] + public string PendingExternalUserId { get; set; } = default!; + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public Types.Result[] ResultList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertExternalTagIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertExternalTagIdRequest.cs new file mode 100644 index 00000000..d99bc89b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertExternalTagIdRequest.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/external_tagid 接口的请求。 + /// + public class CgibinIdConvertExternalTagIdRequest : WechatWorkRequest + { + /// + /// 获取或设置客户标签 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("external_tagid_list")] + [System.Text.Json.Serialization.JsonPropertyName("external_tagid_list")] + public IList ExternalTagIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertExternalTagIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertExternalTagIdResponse.cs new file mode 100644 index 00000000..fe479f35 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertExternalTagIdResponse.cs @@ -0,0 +1,42 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/external_tagid 接口的响应。 + /// + public class CgibinIdConvertExternalTagIdResponse : WechatWorkResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置客户标签 ID。 + /// + [Newtonsoft.Json.JsonProperty("external_tagid")] + [System.Text.Json.Serialization.JsonPropertyName("external_tagid")] + public string ExternalTagId { get; set; } = default!; + + /// + /// 获取或设置服务商下的客户标签 ID。 + /// + [Newtonsoft.Json.JsonProperty("open_external_tagid")] + [System.Text.Json.Serialization.JsonPropertyName("open_external_tagid")] + public string OpenExternalTagId { get; set; } = default!; + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("items")] + [System.Text.Json.Serialization.JsonPropertyName("items")] + public Types.Result[] ResultList { get; set; } = default!; + + /// + /// 获取或设置无效的客户标签 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("invalid_external_tagid_list")] + [System.Text.Json.Serialization.JsonPropertyName("invalid_external_tagid_list")] + public string[]? InvalidExternalTagIdList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertOpenKfIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertOpenKfIdRequest.cs new file mode 100644 index 00000000..544e216b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertOpenKfIdRequest.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/open_kfid 接口的请求。 + /// + public class CgibinIdConvertOpenKfIdRequest : WechatWorkRequest + { + /// + /// 获取或设置客服账号 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("open_kfid_list")] + [System.Text.Json.Serialization.JsonPropertyName("open_kfid_list")] + public IList OpenKfIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertOpenKfIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertOpenKfIdResponse.cs new file mode 100644 index 00000000..506c5940 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertOpenKfIdResponse.cs @@ -0,0 +1,42 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/open_kfid 接口的响应。 + /// + public class CgibinIdConvertOpenKfIdResponse : WechatWorkResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置客服账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("open_kfid")] + [System.Text.Json.Serialization.JsonPropertyName("open_kfid")] + public string OpenKfId { get; set; } = default!; + + /// + /// 获取或设置服务商下的客服账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("new_open_kfid")] + [System.Text.Json.Serialization.JsonPropertyName("new_open_kfid")] + public string NewOpenKfId { get; set; } = default!; + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("items")] + [System.Text.Json.Serialization.JsonPropertyName("items")] + public Types.Result[] ResultList { get; set; } = default!; + + /// + /// 获取或设置无效的客服账号 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("invalid_open_kfid_list")] + [System.Text.Json.Serialization.JsonPropertyName("invalid_open_kfid_list")] + public string[]? InvalidOpenKfIdList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdRequest.cs new file mode 100644 index 00000000..1f13e833 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/unionid_to_external_userid 接口的请求。 + /// + public class CgibinIdConvertUnionIdToExternalUserIdRequest : WechatWorkRequest + { + /// + /// 获取或设置用户的微信 UnionId。 + /// + [Newtonsoft.Json.JsonProperty("unionid")] + [System.Text.Json.Serialization.JsonPropertyName("unionid")] + public string? UnionId { get; set; } + + /// + /// 获取或设置用户的微信 OpenId。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string? OpenId { get; set; } + + /// + /// 获取或设置主体类型。 + /// + [Newtonsoft.Json.JsonProperty("subject_type")] + [System.Text.Json.Serialization.JsonPropertyName("subject_type")] + public int SubjectType { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdResponse.cs new file mode 100644 index 00000000..006f0cc6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/idconvert/unionid_to_external_userid 接口的响应。 + /// + public class CgibinIdConvertUnionIdToExternalUserIdResponse : WechatWorkResponse + { + /// + /// 获取或设置外部联系人账号。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string? ExternalUserId { get; set; } + + /// + /// 获取或设置临时部联系人账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("pending_id")] + [System.Text.Json.Serialization.JsonPropertyName("pending_id")] + public string? PendingExternalUserId { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/CorpArchitectureAuthEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/CorpArchitectureAuthEvent.xml new file mode 100644 index 00000000..8e5d3e83 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/CorpArchitectureAuthEvent.xml @@ -0,0 +1,6 @@ + + + + + 1403610513 + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdRequest.json new file mode 100644 index 00000000..f004740c --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdRequest.json @@ -0,0 +1,4 @@ +{ + "chat_id": "xxxxxx", + "external_userid": ["oAAAAAAA", "oBBBBB"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdResponse.json new file mode 100644 index 00000000..55ed2fae --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertBatchExternalUserIdToPendingIdResponse.json @@ -0,0 +1,14 @@ +{ + "errcode": 0, + "errmsg": "ok", + "result": [ + { + "external_userid": "oAAAAAAA", + "pending_id": "pAAAAA" + }, + { + "external_userid": "oBBBBB", + "pending_id": "pBBBBB" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertExternalTagIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertExternalTagIdRequest.json new file mode 100644 index 00000000..b5b8d164 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertExternalTagIdRequest.json @@ -0,0 +1,3 @@ +{ + "external_tagid_list": ["TAG_ID1", "TAG_ID2", "TAG_ID3", "TAG_ID4"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertExternalTagIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertExternalTagIdResponse.json new file mode 100644 index 00000000..9bb2bb76 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertExternalTagIdResponse.json @@ -0,0 +1,15 @@ +{ + "errcode": 0, + "errmsg": "ok", + "items": [ + { + "external_tagid": "TAG_ID1", + "open_external_tagid": "OPEN_TAG_ID1" + }, + { + "external_tagid": "TAG_ID2", + "open_external_tagid": "OPEN_TAG_ID2" + } + ], + "invalid_external_tagid_list": ["TAG_ID3", "TAG_ID4"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertOpenKfIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertOpenKfIdRequest.json new file mode 100644 index 00000000..764b00cc --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertOpenKfIdRequest.json @@ -0,0 +1,3 @@ +{ + "open_kfid_list": ["KFID1", "KFID2", "KFID3", "KFID4"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertOpenKfIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertOpenKfIdResponse.json new file mode 100644 index 00000000..8e01fa9d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertOpenKfIdResponse.json @@ -0,0 +1,15 @@ +{ + "errcode": 0, + "errmsg": "ok", + "items": [ + { + "open_kfid": "KFID1", + "new_open_kfid": "NEW_KFID1" + }, + { + "open_kfid": "KFID2", + "new_open_kfid": "NEW_KFID2" + } + ], + "invalid_open_kfid_list": ["KFID3", "KFID4"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdRequest.json new file mode 100644 index 00000000..29b9c22d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdRequest.json @@ -0,0 +1,5 @@ +{ + "unionid": "oAAAAAAA", + "openid": "oBBBB", + "subject_type": 1 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdResponse.json new file mode 100644 index 00000000..041f5adb --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinIdConvert/CgibinIdConvertUnionIdToExternalUserIdResponse.json @@ -0,0 +1,6 @@ +{ + "errcode": 0, + "errmsg": "ok", + "external_userid": "ooAAAAAAAAAAA", + "pending_id": "ooBBBBBB" +}