C#开发微信门户及应用(4) 关注用户列表及详细信息管理

2019-12-30 17:45:29刘景俊

然后在实现类里面,我们分别对上面两个接口进行实现,获取用户列表信息如下所示。


 /// <summary>
 /// 获取关注用户列表
 /// </summary>
 /// <param name="accessToken">调用接口凭证</param>
 /// <param name="nextOpenId">第一个拉取的OPENID,不填默认从头开始拉取</param>
 /// <returns></returns>
 public List<string> GetUserList(string accessToken, string nextOpenId = null)
 {
  List<string> list = new List<string>();

  string url = string.Format("https://www.easck.com/cgi-bin/user/get?access_token={0}", accessToken);
  if (!string.IsNullOrEmpty(nextOpenId))
  {
  url += "&next_openid=" + nextOpenId;
  }

  UserListJsonResult result = JsonHelper<UserListJsonResult>.ConvertJson(url);
  if (result != null && result.data != null)
  {
  list.AddRange(result.data.openid);
  }

  return list;
 }

我们看到,转换的逻辑已经放到了JsonHelper里面去了,这个辅助类里面分别对数值进行了获取内容,验证返回值,然后转换正确实体类几个部分的操作。

获取内容,通过辅助类HttpHelper进行,这个在我的公用类库里面,里面的逻辑主要就是通过HttpRequest进行数据的获取操作,不在赘述。


HttpHelper helper = new HttpHelper();
string content = helper.GetHtml(url);

由于返回的内容,我们需要判断它是否正确返回所需的结果,如果没有,抛出自定义的相关异常,方便处理,具体如下所示。


 /// <summary>
 /// 检查返回的记录,如果返回没有错误,或者结果提示成功,则不抛出异常
 /// </summary>
 /// <param name="content">返回的结果</param>
 /// <returns></returns>
 private static bool VerifyErrorCode(string content)
 {
  if (content.Contains("errcode"))
  {
  ErrorJsonResult errorResult = JsonConvert.DeserializeObject<ErrorJsonResult>(content);
  //非成功操作才记录异常,因为有些操作是返回正常的结果({"errcode": 0, "errmsg": "ok"})
  if (errorResult != null && errorResult.errcode != ReturnCode.请求成功)
  {
   string error = string.Format("微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg);
   LogTextHelper.Error(errorResult);

   throw new WeixinException(error);//抛出错误
  }
  }
  return true;
 }

然后转换为相应的格式,就是通过Json.NET的类库进行转换。


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

这样我们就可以在ConvertJson函数实体里面,完整的进行处理和转换了,转换完整的函数代码如下所示。