UserAdminAPI.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /*--------------------------------------------------------------------------
  2. * UserAdminAPI.cs
  3. *Auth:deepleo
  4. * Date:2013.12.31
  5. * Email:2586662969@qq.com
  6. * Website:http://www.weixinsdk.net
  7. *--------------------------------------------------------------------------*/
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Net.Http;
  13. using Codeplex.Data;
  14. namespace LYFZ.Weixin.SDK
  15. {
  16. /// <summary>
  17. /// 用户管理
  18. /// http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3
  19. /// 注意:上报地理位置以推送XML数据包(时间推送)到开发者填写的URL来实现(WeixinExecutor里面)。
  20. /// </summary>
  21. public class UserAdminAPI
  22. {
  23. /// <summary>
  24. /// 创建分组
  25. /// 注意:一个公众账号,最多支持创建500个分组
  26. /// </summary>
  27. /// <param name="access_token">调用接口凭证</param>
  28. /// <param name="name">分组名字(30个字符以内)</param>
  29. /// <returns></returns>
  30. public static bool CreateGroup(string access_token, string name)
  31. {
  32. var builder = new StringBuilder();
  33. builder.Append("{")
  34. .Append('"' + "group" + '"' + ":")
  35. .Append("{")
  36. .Append('"' + "name" + '"' + ":").Append(name)
  37. .Append("}")
  38. .Append("}");
  39. var client = new HttpClient();
  40. var result = client.PostAsync(string.Format("https://api.weixin.qq.com/cgi-bin/groups/create?access_token={0}", access_token), new StringContent(builder.ToString())).Result;
  41. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result).errcode == 0;
  42. }
  43. /// <summary>
  44. /// 查询所有分组
  45. /// </summary>
  46. /// <param name="access_token">调用接口凭证</param>
  47. /// <returns></returns>
  48. public static dynamic GetGroups(string access_token)
  49. {
  50. var client = new HttpClient();
  51. var result = client.PostAsync(string.Format("https://api.weixin.qq.com/cgi-bin/groups/get?access_token={0}", access_token), new StringContent("")).Result;
  52. if (!result.IsSuccessStatusCode) return null;
  53. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
  54. }
  55. /// <summary>
  56. /// 查询用户所在分组
  57. /// </summary>
  58. /// <param name="access_token"></param>
  59. /// <param name="openid"></param>
  60. /// <returns>不为空时,表示查询成功,否则查询失败</returns>
  61. public static string GetUserGroup(string access_token, string openid)
  62. {
  63. var builder = new StringBuilder();
  64. builder.Append("{").Append('"' + "openid" + '"' + ":").Append(openid).Append("}");
  65. var client = new HttpClient();
  66. var result = client.PostAsync(string.Format("https://api.weixin.qq.com/cgi-bin/groups/getid?access_token={0}", access_token), new StringContent(builder.ToString())).Result;
  67. if (!result.IsSuccessStatusCode) return string.Empty;
  68. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result).groupid;
  69. }
  70. /// <summary>
  71. /// 修改分组名
  72. /// </summary>
  73. /// <param name="access_token">调用接口凭证</param>
  74. /// <param name="id">分组id,由微信分配</param>
  75. /// <param name="name">分组名字(30个字符以内)</param>
  76. /// <returns></returns>
  77. public static bool UpdateGroup(string access_token, string id, string name)
  78. {
  79. var builder = new StringBuilder();
  80. builder.Append("{")
  81. .Append('"' + "group" + '"' + ":")
  82. .Append("{")
  83. .Append('"' + "id" + '"' + ":").Append(id).Append(",")
  84. .Append('"' + "name" + '"' + ":").Append(name)
  85. .Append("}")
  86. .Append("}");
  87. var client = new HttpClient();
  88. var result = client.PostAsync(string.Format("https://api.weixin.qq.com/cgi-bin/groups/update?access_token={0}", access_token), new StringContent(builder.ToString())).Result;
  89. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result).errcode == 0;
  90. }
  91. /// <summary>
  92. /// 移动用户分组
  93. /// </summary>
  94. /// <param name="access_token">调用接口凭证</param>
  95. /// <param name="openid">用户唯一标识符</param>
  96. /// <param name="to_groupid">分组id</param>
  97. /// <returns></returns>
  98. public static bool MoveGroup(string access_token, string openid, string to_groupid)
  99. {
  100. var builder = new StringBuilder();
  101. builder.Append("{")
  102. .Append('"' + "openid" + '"' + ":").Append(openid).Append(",")
  103. .Append('"' + "to_groupid" + '"' + ":").Append(to_groupid)
  104. .Append("}");
  105. var client = new HttpClient();
  106. var result = client.PostAsync(string.Format("https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token={0}", access_token), new StringContent(builder.ToString())).Result;
  107. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result).errcode == 0;
  108. }
  109. /// <summary>
  110. /// 设置备注名
  111. /// </summary>
  112. /// <param name="access_token">调用接口凭证</param>
  113. /// <param name="openid">用户唯一标识符</param>
  114. /// <param name="remark">新的备注名,长度必须小于30字符</param>
  115. /// <returns></returns>
  116. public static bool SetRemark(string access_token, string openid, string remark)
  117. {
  118. var builder = new StringBuilder();
  119. builder.Append("{")
  120. .Append('"' + "openid" + '"' + ":").Append(openid).Append(",")
  121. .Append('"' + "remark" + '"' + ":").Append(remark)
  122. .Append("}");
  123. var client = new HttpClient();
  124. var result = client.PostAsync(string.Format("https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token={0}", access_token), new StringContent(builder.ToString())).Result;
  125. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result).errcode == 0;
  126. }
  127. /// <summary>
  128. /// 获取用户基本信息(包括UnionID机制)
  129. /// 注意:如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
  130. /// </summary>
  131. /// <param name="access_token"></param>
  132. /// <param name="openId"></param>
  133. /// <returns>UnionID机制的返回值中将包含“unionid”</returns>
  134. public static dynamic GetInfo(string access_token, string openId)
  135. {
  136. var client = new HttpClient();
  137. var result = client.GetAsync(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", access_token, openId)).Result;
  138. if (!result.IsSuccessStatusCode) return null;
  139. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
  140. }
  141. /// <summary>
  142. /// 获取关注者列表
  143. /// </summary>
  144. /// <param name="token"></param>
  145. /// <param name="nextOpenId">第一个拉取的OPENID,不填默认从头开始拉取</param>
  146. /// <returns></returns>
  147. public static dynamic GetSubscribes(string access_token, string nextOpenId)
  148. {
  149. var client = new HttpClient();
  150. var result = client.GetAsync(string.Format("https://api.weixin.qq.com/cgi-bin/user/get?access_token={0}&next_openid={1}", access_token, nextOpenId)).Result;
  151. if (!result.IsSuccessStatusCode) return null;
  152. return DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
  153. }
  154. }
  155. }