c # URL POST Web API - PullRequest
       6

c # URL POST Web API

0 голосов
/ 31 октября 2018

Я пытаюсь сделать функцию, которая работает с WECHAT API, Вот мой код:

Я использую код ниже для получения токена подключения

internal static string Token(string CorpID, string Secret)
    {
        CorpID = CorpID ?? "wwe1f80304633";
        Secret = Secret ?? "Ev7_oVN7RqD9k4yUy5pzkfcZ_QhX9l0VjZnAQ";

        string token;
        using (var wc = new WebClient())
        {
            token = wc.DownloadString($"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CorpID}&corpsecret={Secret}");
        }
        if (token.Contains("access_token"))
        {
            return token.Split(',')[2].Split(':')[1].Replace("\"", "");
        }
        return "";
    }

Успешно получить действительный токен с WECHAT Server,

И приведенный ниже код: я хочу отправить запрос в WECHAT API и попросить WECHAT отправить сообщение выбранному сотруднику отдела.

internal static string SendMsg(string sendtext)
    {

        string ACTOKEN = "" + PDC.MSGTOKEN + "";
        string CONTENT = "" + PDC.CONTENT + "";
        string PostUrl;
        using (var wc2 = new WebClient())
        {
            PostUrl = wc2.UploadString($"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}{1}", ACTOKEN, CONTENT);
        }


        return "";
    }

public static void SendMsg2()
    {

        PDC.CONTENT = "Test Message";
        string MsgContent = "{\"toparty\": \"" + PDC.DEPTID + "\",\"msgtype\": \"text\",\"agentid\": \"" + PDC.AGENTID + "\",\"text\": {\"content\": \"" + PDC.CONTENT + "\"},\"safe\":0}";
        SendMsg(MsgContent);

        MessageBox.Show("" + MsgContent + "");
    }

И я добавил кнопку на мою WinForm и пытаюсь заставить ее работать

private void BtnSendMsg_Click(object sender, EventArgs e)
    {
        string token = MSG.Token(null, null);
        if (!string.IsNullOrEmpty(token))
        {
            PDC.MSGTOKEN = token;
            MessageBox.Show("" + PDC.MSGTOKEN + "");
        }
        else
        {
            MessageBox.Show(" Invalid Token ");
        }

        MSG.SendMsg2();
    }

Однако, похоже, это не работает, и если я не ошибаюсь, проблема в этой части

internal static string SendMsg(string sendtext)
    {

        string ACTOKEN = "" + PDC.MSGTOKEN + "";
        string CONTENT = "" + PDC.CONTENT + "";
        string PostUrl;
        using (var wc2 = new WebClient())
        {
            PostUrl = wc2.UploadString($"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}{1}", ACTOKEN, CONTENT);
        }


        return "";
    }

Может кто-нибудь подсказать мне, как я могу решить эту проблему? Много, много, большое спасибо ~

1 Ответ

0 голосов
/ 31 октября 2018

Я выполнил свой код без проблем, это код ниже для всех, кому нужно.

Код для получения токена из Https API

internal static string Token(string CorpID, string Secret)
    {
        CorpID = CorpID ?? "" + PDC.CorpID + "";
        Secret = Secret ?? "" + PDC.Secret + "";

        string token;
        using (var wc = new WebClient())
        {
            token = wc.DownloadString($"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CorpID}&corpsecret={Secret}");
        }
        if (token.Contains("access_token"))
        {
            return token.Split(',')[2].Split(':')[1].Replace("\"", "");
        }
        return "";
    }

Метод ПОСТ

internal static string PostWebRequest(string PostUrl, string ParamData, Encoding DataEncode)
    {
        string ret = string.Empty;
        try
        {
            byte[] byteArray = DataEncode.GetBytes(ParamData);
            HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(PostUrl));
            webReq.Method = "POST";
            webReq.ContentType = "application/x-www-form-urlencoded";

            webReq.ContentLength = byteArray.Length;
            Stream newStream = webReq.GetRequestStream();
            newStream.Write(byteArray, 0, byteArray.Length);
            newStream.Close();
            HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
            ret = sr.ReadToEnd();
            sr.Close();
            response.Close();
            newStream.Close();
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
        return ret;
    }

Код для использования WECHAT WORK для отправки сообщения

internal static string SendMsg(string CorpID, string Secret, string ParamData, Encoding DataEncode)
    {
        string AccessToken = Token(CorpID, Secret);
        string PostUrl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}", AccessToken);

        return PostWebRequest(PostUrl, ParamData, DataEncode);
    }

public static void SendMsg2()
    {
        string sCorpID = "" + PDC.CorpID + "";
        string sSecret = "" + PDC.Secret + "";
        PDC.CONTENT = "Test Message";

        string Message = "Test";


        string MsgContent = "{";
        MsgContent += "\"totag\": \"" + PDC.DEPTID + "\",";
        MsgContent += "\"msgtype\": \"text\",";
        MsgContent += "\"agentid\": \"" + PDC.AGENTID + "\",";
        MsgContent += "\"text\": {";
        MsgContent += "  \"content\": \"" + Message + "\"";
        MsgContent += "},";
        MsgContent += "\"safe\":\"0\"";
        MsgContent += "}";

        SendMsg(sCorpID, sSecret, MsgContent, Encoding.UTF8);
    }

Событие кнопки для активной функции отправки сообщения

private void BtnSendMsg_Click(object sender, EventArgs e)
    {
        string token = MSG.Token(null, null);
        if (!string.IsNullOrEmpty(token))
        {
            PDC.MSGTOKEN = token;
        }

        MSG.SendMsg2();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...