溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用.NET構建微信公眾號客服接口

發(fā)布時間:2021-09-16 15:14:56 來源:億速云 閱讀:115 作者:柒染 欄目:開發(fā)技術

如何使用.NET構建微信公眾號客服接口,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

Kf_account.cs代碼:

 public partial class Kf_account : Form
  {
    private readonly DataTable adt_user = new DataTable();
    private readonly string as_INIFile = Application.StartupPath + "\\user.ini";

    public Kf_account()
    {
      BindUser();
    }

    private void BindUser()
    {
      if (!File.Exists(as_INIFile))
      {
        var str = new StringBuilder();
        str.Append(";內容由程序自動生成,請不要修改此文件內容\r\n");
        str.Append("[total]\r\n");
        str.Append("total=\r\n");
        str.Append("[count]\r\n");
        str.Append("count=\r\n");
        str.Append("[user]\r\n");
        //StreamWriter sw = default(StreamWriter);
        //sw = File.CreateText(ls_INIFile);
        //sw.WriteLine(str.ToString());
        //sw.Close();
        File.WriteAllText(as_INIFile, str.ToString(), Encoding.Unicode);
        File.SetAttributes(as_INIFile, FileAttributes.Hidden);
      }
      CheckForIllegalCrossThreadCalls = false;
      InitializeComponent();
      Icon = Resource1.ico;
      lkl_num.Text = INIFile.ContentValue("total", "total", as_INIFile);
      lkl_num_c.Text = INIFile.ContentValue("count", "count", as_INIFile);
      pictureBox1.Visible = true;
      var sr = new StreamReader(as_INIFile, Encoding.Unicode);
      String line;
      int li_count = 0;
      adt_user.Columns.Clear();
      adt_user.Columns.Add("username", Type.GetType("System.String"));
      adt_user.Columns.Add("openid", Type.GetType("System.String"));
      while ((line = sr.ReadLine()) != null)
      {
        li_count++;
        if (li_count > 6)
        {
          line = SysVisitor.Current.GetFormatStr(line);
          DataRow newRow;
          newRow = adt_user.NewRow();
          newRow["username"] = line.Substring(0, line.LastIndexOf('='));
          newRow["openid"] = line.Substring(line.LastIndexOf('=') + 1);
          adt_user.Rows.Add(newRow);
        }
      }
      sr.Close();
      dataGridView1.AutoGenerateColumns = false;
      dataGridView1.DataSource = adt_user;
      //dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;
      lbl_count.Text = "共" + (li_count - 6) + "行";
      pictureBox1.Visible = false;
    }

    private void btn_GetUser_Click(object sender, EventArgs e)
    {
      if (MessageBox.Show(@"拉取用戶信息的速度取決于你的關注數(shù)與網(wǎng)絡速度,
可能需要幾分鐘甚至更長時間。
使用此功能將消耗大量用戶管理接口配額。
要繼續(xù)此操作嗎?",
        "提示:", MessageBoxButtons.YesNo) == DialogResult.No)
      {
        return;
      }
      var thr = new Thread(Get_user_list);
      thr.Start();
    }

    private void Get_user_list()
    {
      File.Delete(as_INIFile);
      var str = new StringBuilder();
      str.Append(";內容由程序自動生成,請不要修改此文件內容\r\n");
      str.Append("[total]\r\n");
      str.Append("total=\r\n");
      str.Append("[count]\r\n");
      str.Append("count=\r\n");
      str.Append("[user]\r\n");
      File.WriteAllText(as_INIFile, str.ToString(), Encoding.Unicode);
      File.SetAttributes(as_INIFile, FileAttributes.Hidden);

      string ls_appid = INIFile.ContentValue("weixin", "Appid");
      string ls_secret = INIFile.ContentValue("weixin", "AppSecret");
      string access_token = "";
      string menu = "";
      if (ls_appid.Length != 18 || ls_secret.Length != 32)
      {
        MessageBox.Show("你的Appid或AppSecret不對,請檢查后再操作");
        return;
      }
      access_token = SysVisitor.Current.Get_Access_token(ls_appid, ls_secret);
      if (access_token == "")
      {
        MessageBox.Show("Appid或AppSecret不對,請檢查后再操作");
        return;
      }
      menu = SysVisitor.Current.GetPageInfo("https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token);
      if (menu.Substring(2, 7) == "errcode")
      {
        MessageBox.Show("拉取失敗,返回消息:\r\n" + menu);
      }

      JObject json = JObject.Parse(menu);
      lkl_num.Text = json["total"].ToString();
      INIFile.SetINIString("total", "total", lkl_num.Text, as_INIFile);
      lkl_num_c.Text = json["count"].ToString();
      INIFile.SetINIString("count", "count", lkl_num_c.Text, as_INIFile);
      int li_count = int.Parse(json["count"].ToString());
      btn_GetUser.Enabled = false;
      pictureBox1.Visible = true;
      FileStream fs = null;
      Encoding encoder = Encoding.Unicode;
      for (int i = 0; i < li_count; i++)
      {
        string openid, username;
        openid = Get_UserName(json["data"]["openid"][i].ToString());
        username = json["data"]["openid"][i].ToString();
        //INIFile.SetINIString("user", openid, username, as_INIFile);
        byte[] bytes = encoder.GetBytes(openid + "=" + username + " \r\n");
        fs = File.OpenWrite(as_INIFile);
        //設定書寫的開始位置為文件的末尾 
        fs.Position = fs.Length;
        //將待寫入內容追加到文件末尾 
        fs.Write(bytes, 0, bytes.Length);
        fs.Close();
        lab_nums.Text = "已拉取" + i + "個,還剩" + (li_count - i) + "個,請耐心等待";
      }
      lab_nums.Text = "";
      //BindUser();
      btn_GetUser.Enabled = true;
      pictureBox1.Visible = false;
      MessageBox.Show("已全部拉取完畢,請重新打開該窗口");
    }

    /// <summary>
    ///   獲取用戶信息詳情,返回json
    /// </summary>
    /// <param name="as_openid"></param>
    private string Get_User(string as_openid)
    {
      string ls_json = "";
      string access_token = "";
      access_token = SysVisitor.Current.Get_Access_token();
      ls_json =
        SysVisitor.Current.GetPageInfo("https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + as_openid + "&lang=zh_CN");
      return ls_json;
    }

    /// <summary>
    ///   獲取用戶用戶的昵稱
    /// </summary>
    private string Get_UserName(string as_openid)
    {
      string ls_json = "";
      ls_json = Get_User(as_openid);
      string username = "";
      JObject json = JObject.Parse(ls_json);
      username = json["nickname"].ToString();
      username = SysVisitor.Current.GetFormatStr(username);
      return username;
    }

    private void btn_search_Click(object sender, EventArgs e)
    {
      string username = txt_search.Text.Trim();
      if (string.IsNullOrWhiteSpace(username))
      {
        return;
      }
      DataRow[] datarows = adt_user.Select("username like '%" + username + "%'");

      var ldt = new DataTable();
      ldt.Columns.Clear();
      ldt.Columns.Add("username", Type.GetType("System.String"));
      ldt.Columns.Add("openid", Type.GetType("System.String"));
      ldt = ToDataTable(datarows);
      try
      {
        lbl_count.Text = ldt.Rows.Count.ToString();
      }
      catch
      {
      }
      dataGridView1.AutoGenerateColumns = false;
      dataGridView1.DataSource = ldt;
    }

    public DataTable ToDataTable(DataRow[] rows)
    {
      if (rows == null || rows.Length == 0) return null;
      DataTable tmp = rows[0].Table.Clone(); // 復制DataRow的表結構 
      foreach (DataRow row in rows)
        tmp.Rows.Add(row.ItemArray); // 將DataRow添加到DataTable中 
      return tmp;
    }

    private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
      try
      {
        SysVisitor.Current.Wx_openid =
          dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value.ToString();
        SysVisitor.Current.Wx_username =
          dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[0].Value.ToString();
        //MessageBox.Show(str);
        grb_chat.Enabled = true;
        grb_chat.Text = SysVisitor.Current.Wx_username;
      }
      catch
      {

      }
      webBrowser_msg.DocumentText = "";
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/customservice/getrecord?access_token={0}",
        SysVisitor.Current.Get_Access_token());
      string ls_text = @"{";
      ls_text += "\"starttime\" : " + DateTime.Now.AddDays(-3).Ticks + ",";
      ls_text += "\"endtime\" : " + DateTime.Now.Ticks + ",";
      ls_text += "\"openid\" : \"" + SysVisitor.Current.Wx_openid + "\",";
      ls_text += "\"pagesize\" : 1000,";
      ls_text += "\"pageindex\" : 1,";
      ls_text += "}";
      string ls_history = SysVisitor.Current.PostPage(url, ls_text);
      webBrowser_msg.DocumentText = ls_history;
    }

    private void btn_send_Click(object sender, EventArgs e)
    {
      string ls_msg = richTextBox_msg.Text;
      string ls_text = @"{";
      ls_text += "\"touser\":\"" + SysVisitor.Current.Wx_openid + "\",";
      ls_text += "\"msgtype\":\"text\",";
      ls_text += "\"text\":";
      ls_text += "{";
      ls_text += "\"content\":\"" + ls_msg + "\"";
      ls_text += "}";
      ls_text += "}";
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}",
        SysVisitor.Current.Get_Access_token());
      string ls_isright = SysVisitor.Current.PostPage(url, ls_text);

      webBrowser_msg.DocumentText += "<P align=right><FONT size=3>" + ls_isright + "</FONT></P>";
    }

    private void btn_addkf_Click(object sender, EventArgs e)
    {
      string url = string.Format("https://api.weixin.qq.com/customservice/kfaccount/add?access_token={0}", SysVisitor.Current.Get_Access_token());
      //客服賬號 設置 xxx@你的公眾號 這樣的格式才是正確的喲。
      string ls_text = "{";
      ls_text += "\"kf_account\":test2@gz-sisosoft,";
      ls_text += "\"nickname\":\"客服2\",";
      ls_text += "\"password\":\"12345\",";
      ls_text += "}";
      string ls_kf = @"{
              'kf_account' : 'test1@gz-sisosoft',
              'nickname' : '客服1',
              'password' : '123456',
            }";
      string ls_isok = SysVisitor.Current.PostPage(url, ls_text);
      MessageBox.Show(ls_isok);
    }

    private void Kf_account_Load(object sender, EventArgs e)
    {
    }
  }

SysVisitor.cs代碼:

 class SysVisitor
  {
    private static SysVisitor visit = null;
    public static SysVisitor Current
    {
      get
      {
        if (visit == null)
          visit = new SysVisitor();

        return visit;
      }
    }
    /// <summary>
    /// 獲取access_token
    /// </summary>
    /// <param name="appid">appid</param>
    /// <param name="secret">appsecret</param>
    /// <returns></returns>
    public string Get_Access_token(string appid, string appsecret)
    {
      string secondappid = INIFile.ContentValue("weixin", "secondappid");
      if (appid.ToLower() == secondappid.ToLower())
      {
        string ls_time = INIFile.ContentValue("weixin", "gettime");
        Decimal ldt;
        try
        {
          ldt = Convert.ToDecimal(ls_time);
          if (Convert.ToDecimal(DateTime.Now.ToString("yyyyMMddHHmmss")) - ldt < 7100)//每兩個小時刷新一次
          {
            return INIFile.ContentValue("weixin", "access_token");
          }
        }
        catch
        { }
      }
      string ls_appid = appid.Replace(" ", "");
      string ls_secret = appsecret.Replace(" ", "");
      string access_token = "";
      string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", ls_appid, ls_secret);
      string json_access_token = GetPageInfo(url);
      //DataTable dt = Json.JsonToDataTable(json_access_token);
      DataTable dt = JsonHelper.JsonToDataTable(json_access_token);
      try
      {
        access_token = dt.Rows[0]["access_token"].ToString();
      }
      catch
      {
        return "";
      }
      INIFile.SetINIString("weixin", "gettime", DateTime.Now.ToString("yyyyMMddHHmmss"));
      INIFile.SetINIString("weixin", "access_token", access_token);
      INIFile.SetINIString("weixin", "secondappid", ls_appid);

      return access_token;
    }

    /// <summary>
    /// 獲取access_token
    /// </summary>
    public string Get_Access_token()
    {
      string ls_appid = INIFile.ContentValue("weixin", "Appid");
      string ls_secret = INIFile.ContentValue("weixin", "AppSecret");
      return Get_Access_token(ls_appid, ls_secret);
    }

    /// <summary>
    /// Get方法請求url并接收返回消息
    /// </summary>
    /// <param name="strUrl">Url地址</param>
    /// <returns></returns>
    public string GetPageInfo(string url)
    {
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
      HttpWebResponse response = (HttpWebResponse)request.GetResponse();

      string ret = string.Empty;
      Stream s;
      string StrDate = "";
      string strValue = "";

      if (response.StatusCode == HttpStatusCode.OK)
      {
        s = response.GetResponseStream();
        ////在這兒處理返回的文本
        StreamReader Reader = new StreamReader(s, Encoding.UTF8);

        while ((StrDate = Reader.ReadLine()) != null)
        {
          strValue += StrDate + "\r\n";
        }
        //strValue = Reader.ReadToEnd();
      }
      return strValue;
    }

    /// <summary>
    /// Post方法
    /// </summary>
    /// <param name="posturl">URL</param>
    /// <param name="postData">Post數(shù)據(jù)</param>
    /// <returns></returns>
    public string PostPage(string posturl, string postData)
    {
      Stream outstream = null;
      Stream instream = null;
      StreamReader sr = null;
      HttpWebResponse response = null;
      HttpWebRequest request = null;
      Encoding encoding = Encoding.UTF8;
      byte[] data = encoding.GetBytes(postData);
      // 準備請求...
      try
      {
        // 設置參數(shù)
        request = WebRequest.Create(posturl) as HttpWebRequest;
        CookieContainer cookieContainer = new CookieContainer();
        request.CookieContainer = cookieContainer;
        request.AllowAutoRedirect = true;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = data.Length;
        outstream = request.GetRequestStream();
        outstream.Write(data, 0, data.Length);
        outstream.Close();
        //發(fā)送請求并獲取相應回應數(shù)據(jù)
        response = request.GetResponse() as HttpWebResponse;
        //直到request.GetResponse()程序才開始向目標網(wǎng)頁發(fā)送Post請求
        instream = response.GetResponseStream();
        sr = new StreamReader(instream, encoding);
        //返回結果網(wǎng)頁(html)代碼
        string content = sr.ReadToEnd();
        string err = string.Empty;
        return content;
      }
      catch (Exception ex)
      {
        string err = ex.Message;
        return string.Empty;
      }
    }

    /// <summary>
    /// 格式化字符串
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public string GetFormatStr(string str)
    {
      if ("" == str)
        return "";
      else
      {
        str = str.Trim();
        str = str.Replace("'", "'");
        str = str.Replace("〈", "<");
        str = str.Replace("〉", ">");
        str = str.Replace(",", ",");
        return str;
      }
    }
    string ls_username = "";
    /// <summary>
    /// 用戶名
    /// </summary>
    public string Wx_username
    {
      get
      {
        return ls_username;
      }
      set
      {
        ls_username = value;
      }
    }
    string ls_openid = "";
    /// <summary>
    /// Openid
    /// </summary>
    public string Wx_openid
    {
      get
      {
        return ls_openid;
      }
      set
      {
        ls_openid = value;
      }
    }
  }

INIFile.cs代碼:

 class INIFile
  {
    ///// <summary>
    ///// 設置INI文件參數(shù)
    ///// </summary>
    ///// <param name="section">INI文件中的段落</param>
    ///// <param name="key">INI文件中的關鍵字</param>
    ///// <param name="val">INI文件中關鍵字的數(shù)值</param>
    ///// <param name="filePath">INI文件的完整的路徑和名稱</param>
    ///// <returns></returns>
    //[DllImport("kernel32")]
    //private static extern long WritePrivateProfileString(
    //  string section, string key, string val, string filePath);

    ///// <summary>
    ///// 獲取INI文件參數(shù)
    ///// </summary>
    ///// <param name="section">INI文件中的段落名稱</param>
    ///// <param name="key">INI文件中的關鍵字</param>
    ///// <param name="def">無法讀取時候時候的缺省數(shù)值</param>
    ///// <param name="retVal">讀取數(shù)值</param>
    ///// <param name="size">數(shù)值的大小</param>
    ///// <param name="filePath">INI文件的完整路徑和名稱</param>
    //[DllImport("kernel32")]
    //private static extern int GetPrivateProfileString(
    //  string section, string key, string def, StringBuilder retVal, int size, string filePath);

    //static string gs_FileName = System.AppDomain.CurrentDomain.BaseDirectory + "Config.ini";

    ///// <summary>
    ///// 獲取INI文件參數(shù)
    ///// </summary>
    ///// <param name="as_section">INI文件中的段落名稱</param>
    ///// <param name="as_key">INI文件中的關鍵字</param>
    ///// <param name="as_FileName">INI文件的完整路徑和名稱</param>
    //public static string GetINIString(string as_section, string as_key, string as_FileName)
    //{
    //  StringBuilder temp = new StringBuilder(255);
    //  int i = GetPrivateProfileString(as_section, as_key, "", temp, 255, as_FileName);
    //  return temp.ToString();
    //}
    ///// <summary>
    ///// 獲取INI文件參數(shù)
    ///// </summary>
    ///// <param name="as_section">INI文件中的段落名稱</param>
    ///// <param name="as_key">INI文件中的關鍵字</param>
    ///// <param name="as_FileName">INI文件的完整路徑和名稱</param>
    //public static string GetINIString(string as_section, string as_key)
    //{
    //  return GetINIString(as_section, as_key, gs_FileName);
    //}

    ///// <summary>
    ///// 設置INI文件參數(shù)
    ///// </summary>
    ///// <param name="as_section">INI文件中的段落</param>
    ///// <param name="as_key">INI文件中的關鍵字</param>
    ///// <param name="as_Value">INI文件中關鍵字的數(shù)值</param>
    ///// <param name="as_FileName">INI文件的完整路徑和名稱</param>
    //public static long SetINIString(string as_section, string as_key, string as_Value, string as_FileName)
    //{
    //  return WritePrivateProfileString(as_section, as_key, as_Value, as_FileName);
    //}
    ///// <summary>
    ///// 設置INI文件參數(shù)
    ///// </summary>
    ///// <param name="as_section">INI文件中的段落</param>
    ///// <param name="as_key">INI文件中的關鍵字</param>
    ///// <param name="as_Value">INI文件中關鍵字的數(shù)值</param>
    //public static long SetINIString(string as_section, string as_key, string as_Value)
    //{
    //  return SetINIString(as_section, as_key, as_Value, gs_FileName);
    //}
    /// <summary>
    /// 寫入INI文件
    /// </summary>
    /// <param name="section">節(jié)點名稱[如[TypeName]]</param>
    /// <param name="key">鍵</param>
    /// <param name="val">值</param>
    /// <param name="filepath">文件路徑</param>
    /// <returns></returns>
    [DllImport("kernel32")]
    public static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
    [DllImport("kernel32.dll")]
    public extern static int GetPrivateProfileSectionNamesA(byte[] buffer, int iLen, string fileName);
    /// <summary>
    /// 寫入INI文件(section:節(jié)點名稱 key:鍵 val:值)
    /// </summary>
    /// <param name="section">節(jié)點名稱</param>
    /// <param name="key">鍵</param>
    /// <param name="val">值</param>
    /// <returns></returns>
    public static long SetINIString(string section, string key, string val, string as_FilePath = "")
    {
      if (as_FilePath == "")
      {
        return (WritePrivateProfileString(section, key, val, strFilePath));
      }
      else
      {
        return (WritePrivateProfileString(section, key, val, as_FilePath)); 
      }
    }
    /// <summary>
    /// 讀取INI文件
    /// </summary>
    /// <param name="section">節(jié)點名稱</param>
    /// <param name="key">鍵</param>
    /// <param name="def">值</param>
    /// <param name="retval">stringbulider對象</param>
    /// <param name="size">字節(jié)大小</param>
    /// <param name="filePath">文件路徑</param>
    /// <returns></returns>
    [DllImport("kernel32")]
    public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
    public static string strFilePath = Application.StartupPath + "\\Config.ini";//獲取INI文件默認路徑
    public static string strSec = "";

    //INI文件名


    /// <summary>
    /// 讀取INI文件中的內容方法 (Section 節(jié)點名稱;key 鍵)
    /// </summary>
    /// <param name="Section">節(jié)點名稱</param>
    /// <param name="key">鍵</param>
    /// <returns></returns>
    public static string ContentValue(string Section, string key, string as_FilePath = "")
    {

      StringBuilder temp = new StringBuilder(1024);
      if (as_FilePath == "")
      {
        GetPrivateProfileString(Section, key, "", temp, 1024, strFilePath);
      }
      else
      {
        GetPrivateProfileString(Section, key, "", temp, 1024, as_FilePath); 
      }
      return temp.ToString();
    }
    /// <summary>
    /// 獲取指定小節(jié)所有項名和值的一個列表 
    /// </summary>
    /// <param name="section">節(jié) 段,欲獲取的小節(jié)。注意這個字串不區(qū)分大小寫</param>
    /// <param name="buffer">緩沖區(qū) 返回的是一個二進制的串,字符串之間是用"\0"分隔的</param>
    /// <param name="nSize">緩沖區(qū)的大小</param>
    /// <param name="filePath">初始化文件的名字。如沒有指定完整路徑名,windows就在Windows目錄中查找文件</param>
    /// <returns></returns>
    [DllImport("kernel32")]
    public static extern int GetPrivateProfileSection(string section, byte[] buffer, int nSize, string filePath);
    /// <summary>
    /// 獲取指定段section下的所有鍵值對 返回集合的每一個鍵形如"key=value"
    /// </summary>
    /// <param name="section">指定的段落</param>
    /// <param name="filePath">ini文件的絕對路徑</param>
    /// <returns></returns>
    public static List<string> ReadKeyValues(string section, string as_FilePath = "")
    {
      byte[] buffer = new byte[32767];
      List<string> list = new List<string>();
      int length = 0;
      if (as_FilePath == "")
      {
        length = GetPrivateProfileSection(section, buffer, buffer.GetUpperBound(0), strFilePath);
      }
      else
      {
        length = GetPrivateProfileSection(section, buffer, buffer.GetUpperBound(0), as_FilePath); 
      }
      string temp;
      int postion = 0;
      for (int i = 0; i < length; i++)
      {
        if (buffer[i] == 0x00) //以'\0'來作為分隔
        {
          temp = System.Text.ASCIIEncoding.Default.GetString(buffer, postion, i - postion).Trim();
          postion = i + 1;
          if (temp.Length > 0)
          {
            list.Add(temp);
          }
        }
      }
      return list;
    }
    /// <summary>
    /// 刪除指定的key
    /// </summary>
    /// <param name="section">要寫入的段落名</param>
    /// <param name="key">要刪除的鍵</param>
    /// <param name="fileName">INI文件的完整路徑和文件名</param>
    public static void DelKey(string section, string key, string as_FilePath = "")
    {
      if (as_FilePath == "")
      {
        WritePrivateProfileString(section, key, null, strFilePath);
      }
      else
      {
        WritePrivateProfileString(section, key, null, as_FilePath);
      }
    }
    /// <summary>
    /// 返回該配置文件中所有Section名稱的集合
    /// </summary>
    public static ArrayList ReadSections()
    {
      byte[] buffer = new byte[65535];
      int rel = GetPrivateProfileSectionNamesA(buffer, buffer.GetUpperBound(0), strFilePath); 
      int iCnt, iPos;
      ArrayList arrayList = new ArrayList();
      string tmp;
      if (rel > 0)
      {
        iCnt = 0; iPos = 0;
        for (iCnt = 0; iCnt < rel; iCnt++)
        {
          if (buffer[iCnt] == 0x00)
          {
            tmp = System.Text.ASCIIEncoding.UTF8.GetString(buffer, iPos, iCnt - iPos).Trim();
            iPos = iCnt + 1;
            if (tmp != "")
              arrayList.Add(tmp);
          }
        }
      }
      return arrayList;
    } 
  }

運行結果:

如何使用.NET構建微信公眾號客服接口

如何使用.NET構建微信公眾號客服接口

看完上述內容,你們掌握如何使用.NET構建微信公眾號客服接口的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI