>  기사  >  백엔드 개발  >  C# WeChat 포털 및 애플리케이션 개발 (5) 사용자 그룹 정보 관리

C# WeChat 포털 및 애플리케이션 개발 (5) 사용자 그룹 정보 관리

黄舟
黄舟원래의
2017-06-18 10:29:291375검색

이 글에서는 주로 WeChat 포털 및 애플리케이션의 C# 개발 다섯 번째 글, 사용자 그룹 정보 관리에 대해 자세히 소개하고 있으며 관심 있는 친구들은 참고할 수 있습니다.

지난 달에 C#을 개발했습니다. WeChat 포털 및 애플리케이션을 작성했으며 시간 제약으로 인해 한동안 이 블로그 시리즈를 계속 작성하지 않았습니다. 이 측면에 대한 연구를 중단한 것이 아니라 계속 탐색해 왔습니다. 이 분야에 기술을 더 잘 적용하려면 기반 기술 개발에 집중해야 합니다. 이 기사에서는 이전 기사의 소개에 이어 주로 그룹 관리의 개발 및 적용을 소개합니다. 이 기사와 이전 기사의 내용은 사용자 정보와 그룹 정보 관리의 완전한 조합 역할을 합니다.

1. 사용자 그룹 관리 콘텐츠

사용자 그룹의 도입은 주로 팔로어 목록 관리 및 다른 그룹에 메시지 보내기 작업을 용이하게 하기 위한 것입니다 하나의 공개 계정은 최대 500개의 그룹 생성을 지원합니다. .

사용자 그룹 관리에는 다음 측면이 포함됩니다.

1 그룹 만들기
2 모든 그룹 쿼리
3 사용자가 속한 그룹 쿼리
4 그룹 이름 수정
5 모바일 사용자 그룹

WeChat의 그룹 생성 정의는 다음과 같습니다. 다음과 같이 표시됩니다.

http 요청 방법: POST(https 프로토콜을 사용하세요)
https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN
POST 데이터 형식: json
POST 데이터 예: {"group":{"name":"test"}}

일반적으로 반환되는 결과는 다음과 같습니다.


{
  "group": {
    "id": 107, 
    "name": "test"
  }
}

다른 인터페이스도 비슷한 방식으로 일부 매개변수를 URL에 게시하여 반환된 Json 데이터를 가져옵니다.

이전 에세이에서 정의한 GroupJson의 엔터티 클래스 정보는 다음과 같습니다.


  /// <summary>
  /// 分组信息
  /// </summary>
  public class GroupJson : BaseJsonResult
  {
    /// <summary>
    /// 分组id,由微信分配
    /// </summary>
    public int id { get; set; }

    /// <summary>
    /// 分组名字,UTF8编码
    /// </summary>
    public string name { get; set; }
  }

위의 인터페이스 정의를 바탕으로 여러 인터페이스를 정의하고 이를 User Management의 API 인터페이스로 요약했습니다.


    /// <summary>
    /// 查询所有分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <returns></returns>
    List<GroupJson> GetGroupList(string accessToken);
            
    /// <summary>
    /// 创建分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="name">分组名称</param>
    /// <returns></returns>
    GroupJson CreateGroup(string accessToken, string name);
            
    /// <summary>
    /// 查询用户所在分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="openid">用户的OpenID</param>
    /// <returns></returns>
    int GetUserGroupId(string accessToken, string openid);
    
    /// <summary>
    /// 修改分组名
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="id">分组id,由微信分配</param>
    /// <param name="name">分组名字(30个字符以内)</param>
    /// <returns></returns>
    CommonResult UpdateGroupName(string accessToken, int id, string name);
            
    /// <summary>
    /// 移动用户分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="openid">用户的OpenID</param>
    /// <param name="to_groupid">分组id</param>
    /// <returns></returns>
    CommonResult MoveUserToGroup(string accessToken, string openid, int to_groupid);

2. 사용자 그룹 관리 인터페이스 구현

2.1 사용자 그룹 생성

사용자 그룹을 생성하는 POST 데이터 작업을 구현하는 방법을 분석하기 위해 사용자를 생성하는 구체적인 프로세스를 단계별로 이해해 보겠습니다. 단계.

먼저 아래와 같이 언급해야 할 여러 속성을 포함하는 동적으로 정의된 엔터티 클래스 정보를 생성해야 합니다.


string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/create?access_token={0}", accessToken);
var data = new
 {
  group = new
 {
  name = name
  }
 };
string postData = data.ToJson();

그 중 객체를 적합한 Json 데이터 작업으로 변환하여 확장 메서드 ToJson에 넣습니다. 이는 주로 동적으로 정의된 엔터티 클래스를 Json 콘텐츠로 변환하는 것을 용이하게 하기 위한 것이며, 주로 일련 번호를 호출합니다. Json.NET의 작동 .


/// <summary>
/// 把对象为json字符串
/// </summary>
/// <param name="obj">待序列号对象</param>
/// <returns></returns>
public static string ToJson(this object obj)
 {
  return JsonConvert.SerializeObject(obj, Formatting.Indented);
 }

Post 데이터를 준비한 후, 데이터를 얻고 적절한 형식으로 변환하기 위한 연산 코드를 자세히 살펴보겠습니다.


GroupJson group = null;

CreateGroupResult result = JsonHelper<CreateGroupResult>.ConvertJson(url, postData);
 if (result != null)
{
     group = result.group;
 }

POST 데이터를 적절한 형식의 엔터티 클래스로 변환하는 작업은 ConvertJson 메서드에 배치됩니다. 내부의 HttpHelper는 내 공용 클래스 라이브러리의 보조 클래스입니다. 주로 하위 계층을 호출합니다. httpWebRequest 객체 메소드는 데이터를 제출하고 반환 결과를 얻습니다.


/// <summary>
/// 转换Json字符串到具体的对象
/// </summary>
/// <param name="url">返回Json数据的链接地址</param>
/// <param name="postData">POST提交的数据</param>
/// <returns></returns>
    public static T ConvertJson(string url, string postData)
    {
      HttpHelper helper = new HttpHelper();
      string content = helper.GetHtml(url, postData, true);
      VerifyErrorCode(content);

      T result = JsonConvert.DeserializeObject<T>(content);
      return result;
    }

이렇게 사용자 그룹을 생성하는 전체 작업 기능은 다음과 같습니다.


    /// <summary>
    /// 创建分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="name">分组名称</param>
    /// <returns></returns>
    public GroupJson CreateGroup(string accessToken, string name)
    {
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/create?access_token={0}", accessToken);
      var data = new
      {
        group = new
        {
          name = name
        }
      };
      string postData = data.ToJson();

      GroupJson group = null;
      CreateGroupResult result = JsonHelper<CreateGroupResult>.ConvertJson(url, postData);
      if (result != null)
      {
        group = result.group;
      }
      return group;
    }

2.2 모든 그룹 조회

모든 그룹 조회를 하면 서버에 있는 모든 그룹, 즉 각 그룹의 ID와 이름을 조회할 수 있습니다.


    /// <summary>
    /// 查询所有分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <returns></returns>
    public List<GroupJson> GetGroupList(string accessToken)
    {
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/get?access_token={0}", accessToken);

      List<GroupJson> list = new List<GroupJson>();
      GroupListJsonResult result = JsonHelper<GroupListJsonResult>.ConvertJson(url);
      if (result != null && result.groups != null)
      {
        list.AddRange(result.groups);
      }

      return list;
    }

2.3 사용자가 속한 그룹 조회

각 사용자는 기본적으로 그룹 해제된 그룹에 속해 있습니다. API를 통해 사용자의 그룹 정보, 즉 ID를 얻을 수 있습니다. 사용자 그룹의.


    /// <summary>
    /// 查询用户所在分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="openid">用户的OpenID</param>
    /// <returns></returns>
    public int GetUserGroupId(string accessToken, string openid)
    {
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/getid?access_token={0}", accessToken);
      var data = new
      {
        openid = openid
      };
      string postData = data.ToJson();

      int groupId = -1;
      GroupIdJsonResult result = JsonHelper<GroupIdJsonResult>.ConvertJson(url, postData);
      if (result != null)
      {
        groupId = result.groupid;
      }
      return groupId;
    }

2.4 그룹 이름 수정

실제로 사용자가 속한 그룹을 조정할 수도 있습니다. 작업 코드는 다음과 같습니다.


    /// <summary>
    /// 修改分组名
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="id">分组id,由微信分配</param>
    /// <param name="name">分组名字(30个字符以内)</param>
    /// <returns></returns>
    public CommonResult UpdateGroupName(string accessToken, int id, string name)
    {
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/update?access_token={0}", accessToken);
      var data = new
      {
        group = new
        {
          id = id,
          name = name
        }
      };
      string postData = data.ToJson();

      return Helper.GetExecuteResult(url, postData);
    }

여기서 반환 값 CommonResult는 성공 또는 실패를 나타내는 부울 플래그와 문자열 유형(있는 경우)의 오류 메시지를 포함하는 엔터티 클래스입니다.

GetExecuteResult 함수 본문의 경우 주로 데이터를 제출한 다음 결과를 얻고 결과에 따라 처리하는 함수가 포함되어 있습니다.


    /// <summary>
    /// 通用的操作结果
    /// </summary>
    /// <param name="url">网页地址</param>
    /// <param name="postData">提交的数据内容</param>
    /// <returns></returns>
    public static CommonResult GetExecuteResult(string url, string postData = null)
    {
      CommonResult success = new CommonResult();
      try
      {
        ErrorJsonResult result;
        if (postData != null)
        {
          result = JsonHelper<ErrorJsonResult>.ConvertJson(url, postData);
        }
        else
        {
          result = JsonHelper<ErrorJsonResult>.ConvertJson(url);
        }

        if (result != null)
        {
          success.Success = (result.errcode == ReturnCode.请求成功);
          success.ErrorMessage = result.errmsg;
        }
      }
      catch (WeixinException ex)
      {
        success.ErrorMessage = ex.Message;
      }

      return success;
    } 
  }

위의 빨간색 부분의 의미는 엔터티 클래스로 변환할 때 위챗에 오류가 정의되어 있으면 오류 메시지가 기록되고 다른 예외는 처리되지 않는다는 것입니다(즉, ).

2.5 새 그룹으로 사용자 이동

사용자를 새 그룹으로 이동하는 작업은 위 섹션과 유사합니다. 자세한 내용은 코드를 참조하세요.


    /// <summary>
    /// 移动用户分组
    /// </summary>
    /// <param name="accessToken">调用接口凭证</param>
    /// <param name="openid">用户的OpenID</param>
    /// <param name="to_groupid">分组id</param>
    /// <returns></returns>
    public CommonResult MoveUserToGroup(string accessToken, string openid, int to_groupid)
    {
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token={0}", accessToken);
      var data = new
      {
        openid = openid,
        to_groupid = to_groupid
      };
      string postData = data.ToJson();

      return Helper.GetExecuteResult(url, postData);
    }

3. 사용자 그룹화 인터페이스 호출

위 섹션에서는 사용자 그룹화를 위한 다양한 인터페이스가 정의 및 구현되어 있으며 호출 작업은 다음과 같습니다. 코드(테스트 코드)가 표시됩니다.


    private void btnGetGroupList_Click(object sender, EventArgs e)
    {
      IUserApi userBLL = new UserApi();
      List<GroupJson> list = userBLL.GetGroupList(token);
      foreach (GroupJson info in list)
      {
        string tips = string.Format("{0}:{1}", info.name, info.id);
        Console.WriteLine(tips);
      }
    }

    private void btnFindUserGroup_Click(object sender, EventArgs e)
    {
      IUserApi userBLL = new UserApi();
      int groupId = userBLL.GetUserGroupId(token, openId);

      string tips = string.Format("GroupId:{0}", groupId);
      Console.WriteLine(tips);
    }

    private void btnCreateGroup_Click(object sender, EventArgs e)
    {
      IUserApi userBLL = new UserApi();
      GroupJson info = userBLL.CreateGroup(token, "创建测试分组");
      if (info != null)
      {
        string tips = string.Format("GroupId:{0} GroupName:{1}", info.id, info.name);
        Console.WriteLine(tips);

        string newName = "创建测试修改";
        CommonResult result = userBLL.UpdateGroupName(token, info.id, newName);
        Console.WriteLine("修改分组名称:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage));
      }
    }

    private void btnUpdateGroup_Click(object sender, EventArgs e)
    {
      int groupId = 111;
      string newName = "创建测试修改";

      IUserApi userBLL = new UserApi();
      CommonResult result = userBLL.UpdateGroupName(token, groupId, newName);
      Console.WriteLine("修改分组名称:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage));
    }

    private void btnMoveToGroup_Click(object sender, EventArgs e)
    {
      int togroup_id = 111;//输入分组ID

      if (togroup_id > 0)
      {
        IUserApi userBLL = new UserApi();
        CommonResult result = userBLL.MoveUserToGroup(token, openId, togroup_id);

        Console.WriteLine("移动用户分组名称:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage));
      }
    }

了解了上面的代码和调用规则,我们就能通过API进行用户分组信息的管理了。通过在应用程序中集成相关的接口代码,我们就能够很好的控制我们的关注用户列表和用户分组信息。从而为我们下一步用户的信息推送打好基础。

위 내용은 C# WeChat 포털 및 애플리케이션 개발 (5) 사용자 그룹 정보 관리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.