From 370dd3fe88a22de378a326a0054b2becd2a953a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E7=8F=82=E6=BA=90?= <623417969@qq.com>
Date: Mon, 29 Mar 2021 16:59:11 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E3=80=81=E7=94=A8=E6=88=B7=E6=A0=87=E7=AD=BE=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Apis/User/Dtos/CreateTagApiResult.cs | 25 ++++++++
.../Apis/User/Dtos/CreateTagInput.cs | 19 ++++++
.../Apis/User/Dtos/GetTagsApiResult.cs | 23 +++++++
.../Apis/User/Dtos/GetUserApiResult.cs | 25 ++++++++
.../Apis/User/Dtos/UpdateRemarkInput.cs | 19 ++++++
.../Apis/User/Dtos/UserInfoApiResult.cs | 61 +++++++++++++++++++
.../Apis/User/ITagsApi.cs | 27 ++++++++
.../Apis/User/IUserApi.cs | 36 +++++++++++
.../Extentions.cs | 3 +
.../ApiTests/TagsApiTest.cs | 39 ++++++++++++
.../ApiTests/UserApiTest.cs | 43 +++++++++++++
11 files changed, 320 insertions(+)
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserApiResult.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateRemarkInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UserInfoApiResult.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs
create mode 100644 tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs
create mode 100644 tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs
new file mode 100644
index 0000000..29c9062
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs
@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class CreateTagApiResult : ApiResultBase
+ {
+ [JsonProperty("tag")]
+ public CreateTagResultModel Tag { get; set; }
+ }
+
+ public class CreateTagResultModel
+ {
+ ///
+ /// 标签id,由微信分配
+ ///
+ [JsonProperty("id")]
+ public int Id { get; set; }
+
+ ///
+ /// 标签名,UTF8编码
+ ///
+ [JsonProperty("name")]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagInput.cs
new file mode 100644
index 0000000..6fb4154
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagInput.cs
@@ -0,0 +1,19 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class CreateTagInput
+ {
+ [JsonProperty("tag")]
+ public CreateTagModel Tag { get; set; }
+ }
+
+ public class CreateTagModel
+ {
+ ///
+ /// 标签名(30个字符以内)
+ ///
+ [JsonProperty("name")]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs
new file mode 100644
index 0000000..84b79e6
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs
@@ -0,0 +1,23 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class GetTagsApiResult : ApiResultBase
+ {
+ [JsonProperty("tags")]
+ public IEnumerable Tags { get; set; }
+ }
+
+ public class GetTagModel
+ {
+ [JsonProperty("id")]
+ public int Id { get; set; }
+
+ [JsonProperty("name")]
+ public string Name { get; set; }
+
+ [JsonProperty("count")]
+ public int Count { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserApiResult.cs
new file mode 100644
index 0000000..fbcd80c
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserApiResult.cs
@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class GetUserApiResult : ApiResultBase
+ {
+ [JsonProperty("total")]
+ public int Total { get; set; }
+
+ [JsonProperty("count")]
+ public int Count { get; set; }
+
+ [JsonProperty("data")]
+ public DataModel Data { get; set; }
+
+ [JsonProperty("next_openid")]
+ public string NextOpenId { get; set; }
+
+ public class DataModel
+ {
+ [JsonProperty("openid")]
+ public string[] OpenIds { get; set; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateRemarkInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateRemarkInput.cs
new file mode 100644
index 0000000..26d077b
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateRemarkInput.cs
@@ -0,0 +1,19 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class UpdateRemarkInput
+ {
+ ///
+ /// 用户标识
+ ///
+ [JsonProperty("openid")]
+ public string OpenId { get; set; }
+
+ ///
+ /// 新的备注名,长度必须小于30字符
+ ///
+ [JsonProperty("remark")]
+ public string Remark { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UserInfoApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UserInfoApiResult.cs
new file mode 100644
index 0000000..ffc8adc
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UserInfoApiResult.cs
@@ -0,0 +1,61 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ ///
+ /// https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId
+ ///
+ public class UserInfoApiResult : ApiResultBase
+ {
+ [JsonProperty("subscribe")]
+ public int Subscribe { get; set; }
+
+ [JsonProperty("openid")]
+ public string OpenId { get; set; }
+
+ [JsonProperty("nickname")]
+ public string Nickname { get; set; }
+
+ [JsonProperty("sex")]
+ public int Sex { get; set; }
+
+ [JsonProperty("language")]
+ public string Language { get; set; }
+
+ [JsonProperty("city")]
+ public string City { get; set; }
+
+ [JsonProperty("province")]
+ public string Province { get; set; }
+
+ [JsonProperty("country")]
+ public string Country { get; set; }
+
+ [JsonProperty("headimgurl")]
+ public string Headimgurl { get; set; }
+
+ [JsonProperty("subscribe_time")]
+ public int SubscribeTime { get; set; }
+
+ [JsonProperty("unionid")]
+ public string UnionId { get; set; }
+
+ [JsonProperty("remark")]
+ public string Remark { get; set; }
+
+ [JsonProperty("groupid")]
+ public int GroupId { get; set; }
+
+ [JsonProperty("tagid_list")]
+ public int[] TagIdList { get; set; }
+
+ [JsonProperty("subscribe_scene")]
+ public string SubscribeScene { get; set; }
+
+ [JsonProperty("qr_scene")]
+ public int QrScene { get; set; }
+
+ [JsonProperty("qr_scene_str")]
+ public string QrSceneStr { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs
new file mode 100644
index 0000000..be31421
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs
@@ -0,0 +1,27 @@
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos;
+using System.Threading.Tasks;
+using WebApiClientCore.Attributes;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User
+{
+ ///
+ /// 用户标签管理
+ ///
+ [HttpHost("https://api.weixin.qq.com/cgi-bin/tags/")]
+ public interface ITagsApi : IWxApiWithAccessTokenFilter
+ {
+ ///
+ /// 创建标签
+ ///
+ ///
+ [HttpPost("create")]
+ Task CreateAsync([JsonNetContent(CharSet = "utf-8")] CreateTagInput input);
+
+ ///
+ /// 获取公众号已创建的标签
+ ///
+ ///
+ [HttpGet("get")]
+ Task GetAsync();
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs
new file mode 100644
index 0000000..d6df8e4
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs
@@ -0,0 +1,36 @@
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos;
+using Newtonsoft.Json;
+using System.Threading.Tasks;
+using WebApiClientCore.Attributes;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User
+{
+ ///
+ /// 用户管理
+ ///
+ [HttpHost("https://api.weixin.qq.com/cgi-bin/user/")]
+ public interface IUserApi : IWxApiWithAccessTokenFilter
+ {
+ ///
+ /// 获取用户基本信息(UnionID机制)
+ ///
+ ///
+ [HttpGet("info")]
+ Task InfoAsync(string openId, string lang = "zh_CN");
+
+ ///
+ /// 设置用户备注名
+ ///
+ ///
+ [HttpPost("info/updateremark")]
+ Task UpdateRemarkAsync([JsonNetContent(CharSet = "utf-8")] UpdateRemarkInput input);
+
+ ///
+ /// 获取用户列表
+ ///
+ /// 第一个拉取的OPENID,不填默认从头开始拉取
+ ///
+ [HttpGet("get")]
+ Task GetAsync([JsonProperty("next_openid")] string nextOpenId = null);
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Extentions.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Extentions.cs
index acf64ad..0c8ead0 100644
--- a/src/Magicodes.Wx.PublicAccount.Sdk/Extentions.cs
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Extentions.cs
@@ -5,6 +5,7 @@ using Magicodes.Wx.PublicAccount.Sdk.Apis.Menu;
using Magicodes.Wx.PublicAccount.Sdk.Apis.Message;
using Magicodes.Wx.PublicAccount.Sdk.Apis.Sns;
using Magicodes.Wx.PublicAccount.Sdk.Apis.Token;
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -34,6 +35,8 @@ namespace Magicodes.Wx.PublicAccount.Sdk
services.AddSingleton();
services.AddHttpApi();
services.AddHttpApi();
+ services.AddHttpApi();
+ services.AddHttpApi();
return services;
}
diff --git a/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs
new file mode 100644
index 0000000..070a535
--- /dev/null
+++ b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs
@@ -0,0 +1,39 @@
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User;
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos;
+using System.Threading.Tasks;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Test.ApiTests
+{
+ public class TagsApiTest : TestBase, IClassFixture
+ {
+ private readonly ITagsApi tagsApi;
+
+ public TagsApiTest(TestWebApplicationFactory webApplicationFactory, ITestOutputHelper output) : base(
+ webApplicationFactory, output)
+ {
+ tagsApi = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task CreateAsync_Test()
+ {
+ var result = await tagsApi.CreateAsync(new CreateTagInput
+ {
+ Tag = new CreateTagModel
+ {
+ Name = "Magicodes good"
+ }
+ });
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task GetAsync_Test()
+ {
+ var result = await tagsApi.GetAsync();
+ result.EnsureSuccess();
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs
new file mode 100644
index 0000000..8426ec6
--- /dev/null
+++ b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs
@@ -0,0 +1,43 @@
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User;
+using Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos;
+using System.Threading.Tasks;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Test.ApiTests
+{
+ public class UserApiTest : TestBase, IClassFixture
+ {
+ private readonly IUserApi userApi;
+
+ public UserApiTest(TestWebApplicationFactory webApplicationFactory, ITestOutputHelper output) : base(webApplicationFactory, output)
+ {
+ userApi = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task InfoAsync_Test()
+ {
+ var result = await userApi.InfoAsync("007");
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task UpdateRemarkAsync_Test()
+ {
+ var result = await userApi.UpdateRemarkAsync(new UpdateRemarkInput
+ {
+ OpenId = "oDF3iY9ffA-hqb2vVvbr7qxf6A0Q",
+ Remark = "Magicodes"
+ });
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task GetAsync_Test()
+ {
+ var result = await userApi.GetAsync();
+ result.EnsureSuccess();
+ }
+ }
+}
\ No newline at end of file
--
Gitee
From 7df76b3ac6629a0e01cd696e21c25f9d6f7b1b79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E7=8F=82=E6=BA=90?= <623417969@qq.com>
Date: Mon, 29 Mar 2021 17:54:55 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E6=A0=87=E7=AD=BE=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Apis/User/Dtos/BatchTaggingInput.cs | 16 +++++
.../Apis/User/Dtos/BatchUnTaggingInput.cs | 6 ++
.../Apis/User/Dtos/CreateTagApiResult.cs | 4 +-
.../Apis/User/Dtos/DeleteTagInput.cs | 16 +++++
.../Apis/User/Dtos/GetIdListApiResult.cs | 13 ++++
.../Apis/User/Dtos/GetIdListInput.cs | 10 ++++
.../Apis/User/Dtos/GetTagsApiResult.cs | 4 +-
.../Apis/User/Dtos/GetUserByTagInput.cs | 16 +++++
.../Apis/User/Dtos/UpdateTagInput.cs | 19 ++++++
.../Apis/User/ITagsApi.cs | 43 +++++++++++++-
.../Apis/User/IUserApi.cs | 7 +++
.../ApiTests/TagsApiTest.cs | 59 +++++++++++++++++++
.../ApiTests/UserApiTest.cs | 11 ++++
13 files changed, 218 insertions(+), 6 deletions(-)
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchTaggingInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchUnTaggingInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/DeleteTagInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListApiResult.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserByTagInput.cs
create mode 100644 src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateTagInput.cs
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchTaggingInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchTaggingInput.cs
new file mode 100644
index 0000000..5950f05
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchTaggingInput.cs
@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class BatchTaggingInput
+ {
+ ///
+ /// 粉丝列表
+ ///
+ [JsonProperty("openid_list")]
+ public string[] OpenIdList { get; set; }
+
+ [JsonProperty("tagid")]
+ public int TagId { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchUnTaggingInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchUnTaggingInput.cs
new file mode 100644
index 0000000..793578f
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/BatchUnTaggingInput.cs
@@ -0,0 +1,6 @@
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class BatchUnTaggingInput : BatchTaggingInput
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs
index 29c9062..493ca1a 100644
--- a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/CreateTagApiResult.cs
@@ -5,10 +5,10 @@ namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
public class CreateTagApiResult : ApiResultBase
{
[JsonProperty("tag")]
- public CreateTagResultModel Tag { get; set; }
+ public CreateTagResultInfo Tag { get; set; }
}
- public class CreateTagResultModel
+ public class CreateTagResultInfo
{
///
/// 标签id,由微信分配
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/DeleteTagInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/DeleteTagInput.cs
new file mode 100644
index 0000000..6c45b2f
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/DeleteTagInput.cs
@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class DeleteTagInput
+ {
+ [JsonProperty("tag")]
+ public DeleteTagInfo Tag { get; set; }
+ }
+
+ public class DeleteTagInfo
+ {
+ [JsonProperty("id")]
+ public int Id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListApiResult.cs
new file mode 100644
index 0000000..6010e74
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListApiResult.cs
@@ -0,0 +1,13 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class GetIdListApiResult : ApiResultBase
+ {
+ ///
+ /// 被置上的标签列表
+ ///
+ [JsonProperty("tagid_list")]
+ public int[] TagIdList { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListInput.cs
new file mode 100644
index 0000000..c6e0524
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetIdListInput.cs
@@ -0,0 +1,10 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class GetIdListInput
+ {
+ [JsonProperty("openid")]
+ public string OpenId { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs
index 84b79e6..5afff80 100644
--- a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetTagsApiResult.cs
@@ -6,10 +6,10 @@ namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
public class GetTagsApiResult : ApiResultBase
{
[JsonProperty("tags")]
- public IEnumerable Tags { get; set; }
+ public IEnumerable Tags { get; set; }
}
- public class GetTagModel
+ public class GetTagInfo
{
[JsonProperty("id")]
public int Id { get; set; }
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserByTagInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserByTagInput.cs
new file mode 100644
index 0000000..b0a2469
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/GetUserByTagInput.cs
@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class GetUserByTagInput
+ {
+ [JsonProperty("tagid")]
+ public int TagId { get; set; }
+
+ ///
+ /// 第一个拉取的OPENID,不填默认从头开始拉取
+ ///
+ [JsonProperty("next_openid")]
+ public string NextOpenId { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateTagInput.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateTagInput.cs
new file mode 100644
index 0000000..10f35ef
--- /dev/null
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/Dtos/UpdateTagInput.cs
@@ -0,0 +1,19 @@
+using Newtonsoft.Json;
+
+namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User.Dtos
+{
+ public class UpdateTagInput
+ {
+ [JsonProperty("tag")]
+ public UpdateTagInfo Tag { get; set; }
+ }
+
+ public class UpdateTagInfo
+ {
+ [JsonProperty("id")]
+ public int Id { get; set; }
+
+ [JsonProperty("name")]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs
index be31421..846d60c 100644
--- a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/ITagsApi.cs
@@ -11,17 +11,56 @@ namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User
public interface ITagsApi : IWxApiWithAccessTokenFilter
{
///
- /// 创建标签
+ /// 1.创建标签
///
///
[HttpPost("create")]
Task CreateAsync([JsonNetContent(CharSet = "utf-8")] CreateTagInput input);
///
- /// 获取公众号已创建的标签
+ /// 2.获取公众号已创建的标签
///
///
[HttpGet("get")]
Task GetAsync();
+
+ ///
+ /// 3.编辑标签
+ ///
+ ///
+ [HttpPost("update")]
+ Task UpdateAsync([JsonNetContent(CharSet = "utf-8")] UpdateTagInput input);
+
+ ///
+ /// 4.删除标签
+ ///
+ ///
+ ///
+ [HttpPost("delete")]
+ Task DeleteAsync([JsonNetContent(CharSet = "utf-8")] DeleteTagInput input);
+
+ ///
+ /// 批量为用户打标签
+ ///
+ ///
+ ///
+ [HttpPost("members/batchtagging")]
+ Task BatchTaggingAsync([JsonNetContent(CharSet = "utf-8")] BatchTaggingInput input);
+
+ ///
+ /// 批量为用户取消标签
+ ///
+ ///
+ ///
+ [HttpPost("members/batchuntagging")]
+ Task BatchUnTaggingAsync([JsonNetContent(CharSet = "utf-8")] BatchUnTaggingInput input);
+
+ ///
+ /// 获取用户身上的标签列表
+ ///
+ ///
+ ///
+ [HttpPost("getidlist")]
+ Task GetIdListAsync([JsonNetContent(CharSet = "utf-8")] GetIdListInput input);
}
}
\ No newline at end of file
diff --git a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs
index d6df8e4..f1cfab5 100644
--- a/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs
+++ b/src/Magicodes.Wx.PublicAccount.Sdk/Apis/User/IUserApi.cs
@@ -32,5 +32,12 @@ namespace Magicodes.Wx.PublicAccount.Sdk.Apis.User
///
[HttpGet("get")]
Task GetAsync([JsonProperty("next_openid")] string nextOpenId = null);
+
+ ///
+ /// 获取标签下粉丝列表
+ ///
+ ///
+ [HttpPost("tag/get")]
+ Task GetUserByTagAsync([JsonProperty("next_openid")] GetUserByTagInput input);
}
}
\ No newline at end of file
diff --git a/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs
index 070a535..45fa9f3 100644
--- a/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs
+++ b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/TagsApiTest.cs
@@ -35,5 +35,64 @@ namespace Magicodes.Wx.PublicAccount.Sdk.Test.ApiTests
var result = await tagsApi.GetAsync();
result.EnsureSuccess();
}
+
+ [Fact]
+ public async Task UpdateAsync_Test()
+ {
+ var result = await tagsApi.UpdateAsync(new UpdateTagInput
+ {
+ Tag = new UpdateTagInfo
+ {
+ Id = 103,
+ Name = "Magicodes good 1"
+ }
+ });
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task DeleteAsync_Test()
+ {
+ var result = await tagsApi.DeleteAsync(new DeleteTagInput
+ {
+ Tag = new DeleteTagInfo
+ {
+ Id = 103
+ }
+ });
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task BatchTaggingAsync_Test()
+ {
+ var result = await tagsApi.BatchTaggingAsync(new BatchTaggingInput
+ {
+ OpenIdList = new[] { "o6l4Nv5rjCXOCkbaCDOAmH1Eoxl4" },
+ TagId = 102
+ });
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task BatchUnTaggingAsync_Test()
+ {
+ var result = await tagsApi.BatchUnTaggingAsync(new BatchUnTaggingInput
+ {
+ OpenIdList = new[] { "o6l4Nv5rjCXOCkbaCDOAmH1Eoxl4" },
+ TagId = 102
+ });
+ result.EnsureSuccess();
+ }
+
+ [Fact]
+ public async Task GetIdListAsync_Test()
+ {
+ var result = await tagsApi.GetIdListAsync(new GetIdListInput
+ {
+ OpenId = "o6l4Nv5rjCXOCkbaCDOAmH1Eoxl4"
+ });
+ result.EnsureSuccess();
+ }
}
}
\ No newline at end of file
diff --git a/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs
index 8426ec6..3791859 100644
--- a/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs
+++ b/tests/Magicodes.Wx.PublicAccount.Sdk.Test/ApiTests/UserApiTest.cs
@@ -39,5 +39,16 @@ namespace Magicodes.Wx.PublicAccount.Sdk.Test.ApiTests
var result = await userApi.GetAsync();
result.EnsureSuccess();
}
+
+ [Fact]
+ public async Task GetUserByTagAsync_Test()
+ {
+ var result = await userApi.GetUserByTagAsync(new GetUserByTagInput
+ {
+ TagId = 103,
+ NextOpenId = string.Empty
+ });
+ result.EnsureSuccess();
+ }
}
}
\ No newline at end of file
--
Gitee