• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    נפתר מדוע נוצרת השגיאה הזו?

    פורום מפתחים API
    4
    24
    421
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • ע
      עידו נערך לאחרונה על ידי

      "yemotAPIVersion":6,
      responseStatus":"EXCEPTION"
      "message":"IllegalStateException(session token is required)"

      הקוד הוא:

       var jsonContent1 = new
       {
           token = $"{numberTb.Text}:{passTb.Text}",
           what = "ivr2:SaleProducts/sale_products_name.ini",
           contents = textBox1.Text.Replace("\r\n", "%0a")
       };
       json[0] = System.Text.Json.JsonSerializer.Serialize(jsonContent1);
      

      לכאורה אמור לעבוד חלק...

      A תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • A
        amp Software 0 @עידו נערך לאחרונה על ידי

        @עידו
        הקוד חלקי מאוד
        תוסיף את העיקר - הקריאה ל API

        ע תגובה 1 תגובה אחרונה תגובה ציטוט 1
        • ע
          עידו @amp Software 0 נערך לאחרונה על ידי עידו

          @amp-Software-0 כתב במדוע נוצרת השגיאה הזו?:

          @עידו
          הקוד חלקי מאוד
          תוסיף את העיקר - הקריאה ל API

           string[] json = new string[3];
          
           var jsonContent1 = new
           {
               token = $"{numberTb.Text}:{passTb.Text}",
               what = "ivr2:SaleProducts/sale_products_name.ini",
               contents = textBox1.Text.Replace("\r\n", "%0a")
           };
           json[0] = System.Text.Json.JsonSerializer.Serialize(jsonContent1);
          
           static readonly HttpClient client = new HttpClient();
          HttpContent content;
           
          for (int i = 0; i < json.Length; i++)
          {
              content = new StringContent(json[i], Encoding.UTF8, "application/json");
              string url = "https://www.call2all.co.il/ym/api/UploadTextFile";
              try
              {
                  // שליחת בקשת POST
                  HttpResponseMessage responseJ = await client.PostAsync(url, content);
           
                  // בדיקת מצב התגובה
                  if (responseJ.IsSuccessStatusCode)
                  {
                      // קריאת התוכן של התגובה
                      string responseContent = await responseJ.Content.ReadAsStringAsync();
                      textBox1.Text += $"Response: {responseContent}";
                  }
                  else
                  {
                      MessageBox.Show("הפעולה נכשלה", "שגיאה");
                      textBox1.Text += $"Error: {responseJ.StatusCode}";
                      return;
                  }
              }
              catch (Exception ex)
              {
                  Console.WriteLine($"Exception: {ex.Message}");
              }
          }
          
          תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • ע
            עידו נערך לאחרונה על ידי

            יש מישהו ?

            A תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • A
              amp Software 0 @עידו נערך לאחרונה על ידי

              @עידו
              אם אתה שולח את ה token ב url עצמו, זה עובר?

              ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • ע
                עידו @amp Software 0 נערך לאחרונה על ידי

                @amp-Software-0 בתור get כן
                אפ אשלח POST עם פרמטר בURL השרת של ימות המשיח ידע להסתדר עם זה?

                A תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • A
                  amp Software 0 @עידו נערך לאחרונה על ידי

                  @עידו
                  כן,
                  את ה token אפשר לשלוח גם ב Header

                  ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • ע
                    עידו @amp Software 0 נערך לאחרונה על ידי

                    @amp-Software-0 כתב במדוע נוצרת השגיאה הזו?:

                    @עידו
                    כן,
                    את ה token אפשר לשלוח גם ב Header

                    בהידר או בURL או שזה אותו דבר (כמדומני שלא, אבל אולי אני טועה)?

                    A תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • A
                      amp Software 0 @עידו נערך לאחרונה על ידי

                      @עידו
                      זה לא אותו דבר, אבל אפשר לשלוח בשניהם

                      ע תגובה 1 תגובה אחרונה תגובה ציטוט 1
                      • ע
                        עידו @amp Software 0 נערך לאחרונה על ידי

                        @amp-Software-0 עכשיו שגיאה חדשה
                        responseStatus":"EXCEPTION",
                        "exceptionClass":"IllegalArgumentException",
                        "exceptionMessage":"what is required",
                        "nestedException":null,
                        "yemotAPIVersion":6

                        אהרן שובקס תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • אהרן שובקס
                          אהרן שובקס ניהול @עידו נערך לאחרונה על ידי

                          @עידו
                          שלח את הקוד המעודכן איתו אתה משתמש

                          ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • ע
                            עידו @אהרן שובקס נערך לאחרונה על ידי

                            @אהרן-שובקס

                            אני מקוה שזה הכל, השתדלתי לאסוף את כל הקוד הרלוונטי. (C# כמובן)

                            using System.Net.Http;
                            using Newtonsoft.Json;
                            using System.Net;
                            using static System.Windows.Forms.VisualStyles.VisualStyleElement;
                            using System.Runtime.Remoting.Contexts;
                            using System.Security.Policy;
                            using static System.Net.WebRequestMethods;
                            
                             static readonly HttpClient client = new HttpClient();
                             private async void button1_Click1(object sender, EventArgs e)
                             {
                             string[] json = new string[3];
                            
                             var jsonContent1 = new
                             {
                                 what = "ivr2:SaleProducts/sale_products_name.ini",
                                 contents = textBox1.Text.Replace("\r\n", "%0a")
                             };
                             json[0] = System.Text.Json.JsonSerializer.Serialize(jsonContent1);
                             HttpContent content;
                            
                             for (int i = 0; i < json.Length; i++)
                             {
                                 content = new StringContent(json[i], Encoding.UTF8, "application/json");
                                 string url = $"https://www.call2all.co.il/ym/api/UploadTextFile?token={numberTb.Text}:{passTb.Text}";
                                 try
                                 {
                                     // שליחת בקשת POST
                                     HttpResponseMessage responseJ = await client.PostAsync(url, content);
                            
                                     // בדיקת מצב התגובה
                                     if (responseJ.IsSuccessStatusCode)
                                     {
                                         // קריאת התוכן של התגובה
                                         string responseContent = await responseJ.Content.ReadAsStringAsync();
                                         textBox1.Text += $"{url} Response: {responseContent}";
                                     }
                                     else
                                     {
                                         MessageBox.Show("הפעולה נכשלה", "שגיאה");
                                         textBox1.Text += $"Error: {responseJ.StatusCode}";
                                         return;
                                     }
                                 }
                                 catch (Exception ex)
                                 {
                                     Console.WriteLine($"Exception: {ex.Message}");
                                 }
                             }
                            }
                            
                            אהרן שובקס תגובה 1 תגובה אחרונה תגובה ציטוט 0
                            • אהרן שובקס
                              אהרן שובקס ניהול @עידו נערך לאחרונה על ידי אהרן שובקס

                              @עידו כתב במדוע נוצרת השגיאה הזו?:

                              @אהרן-שובקס

                              אני מקוה שזה הכל, השתדלתי לאסוף את כל הקוד הרלוונטי. (C# כמובן)

                              using System.Net.Http;
                              using Newtonsoft.Json;
                              using System.Net;
                              using static System.Windows.Forms.VisualStyles.VisualStyleElement;
                              using System.Runtime.Remoting.Contexts;
                              using System.Security.Policy;
                              using static System.Net.WebRequestMethods;
                              
                               static readonly HttpClient client = new HttpClient();
                               private async void button1_Click1(object sender, EventArgs e)
                               {
                               string[] json = new string[3];
                              
                               var jsonContent1 = new
                               {
                                   what = "ivr2:SaleProducts/sale_products_name.ini",
                                   contents = textBox1.Text.Replace("\r\n", "%0a")
                               };
                               json[0] = System.Text.Json.JsonSerializer.Serialize(jsonContent1);
                               HttpContent content;
                              
                               for (int i = 0; i < json.Length; i++)
                               {
                                   content = new StringContent(json[i], Encoding.UTF8, "application/json");
                                   string url = $"https://www.call2all.co.il/ym/api/UploadTextFile?token={numberTb.Text}:{passTb.Text}";
                                   try
                                   {
                                       // שליחת בקשת POST
                                       HttpResponseMessage responseJ = await client.PostAsync(url, content);
                              
                                       // בדיקת מצב התגובה
                                       if (responseJ.IsSuccessStatusCode)
                                       {
                                           // קריאת התוכן של התגובה
                                           string responseContent = await responseJ.Content.ReadAsStringAsync();
                                           textBox1.Text += $"{url} Response: {responseContent}";
                                       }
                                       else
                                       {
                                           MessageBox.Show("הפעולה נכשלה", "שגיאה");
                                           textBox1.Text += $"Error: {responseJ.StatusCode}";
                                           return;
                                       }
                                   }
                                   catch (Exception ex)
                                   {
                                       Console.WriteLine($"Exception: {ex.Message}");
                                   }
                               }
                              }
                              

                              אני לא מבין בC#
                              אבל כתוב שהוא לא מקבל שדה what

                              ע 2 תגובות תגובה אחרונה תגובה ציטוט 1
                              • ע
                                עידו @אהרן שובקס נערך לאחרונה על ידי

                                @אהרן-שובקס כן, זה הבנתי, השאלה למה...

                                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                • ע
                                  עידו @אהרן שובקס נערך לאחרונה על ידי

                                  @אהרן-שובקס למה בכלל צריך סיריליזציה בשביל ג'סון? הרי זה מחרוזות בסדר מסוים, מה הבעיה לעשות את זה ידנית

                                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • ע
                                    עידו נערך לאחרונה על ידי

                                    זה הג'סון שמתקבל:

                                    {"what":"ivr2:SaleProducts/sale_products_category.ini","contents":"boy1.csv=001,002,003,004,005,006,%0aboy2.csv=007,008,009,010,011,012,013,014,015,016,017,018,%0aboy3.csv=019,020,021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,%0aboy4.csv=040,041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,%0aboy5.csv=059,060,061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,%0aboy6.csv=079,080,081,082,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,%0aboy7.csv=101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,%0aboy8.csv=117,118,119,120,121,122,%0agirl1.csv=123,124,125,126,127,128,129,130,131,132,%0agirl2.csv=133,134,135,136,137,138,139,140,141,142,143,144,%0agirl3.csv=145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,%0agirl4.csv=160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,%0agirl5.csv=179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,%0agirl6.csv=199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,%0agirl7.csv=220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,%0agirl8.csv=243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,%0a"}
                                    
                                    
                                    תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                    • ע
                                      עידו נערך לאחרונה על ידי

                                      בכל הפורום אין מישהו שיודע C#?

                                      S תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                      • S
                                        soris1989 @עידו נערך לאחרונה על ידי soris1989

                                        @עידו בניתי גם כן קוד ב-C# וקיבלתי את אותה השגיאה כאשר השתמשתי ב- HttpClient.PostAsync, כנראה שיש בעיה בסיראליזציה של ה-body, והטוקן לא מצליח להיות מתורגם כראוי.

                                        למרות שנהוג להשתמש ב-POST לצורך יצירת משאבים (קבצים, נתנוים וכד'), כאן השתמשתי ב-HttpClient.GetAsync לצורך עקיפת הבעיה, וזה אכן הצליח ליצור קובץ לשלוחה הרצויה.

                                        אגב, לצורך שימוש ב-API צריך לבצע 2 בקשות:

                                        1. הזדהות דרך מתודת קצה Login, לצורך קבלת ה-token.
                                        2. קריאה למתודת קצה המתאימה (שכאן היא UploadTextFile), תוך כדי השתלת ה-token ב-body או ב-header בהתאם לדוקומנטציה בקישור:
                                          https://f2.freeivr.co.il/topic/55/api-גישת-מפתחים-למערכות/33?_=1739774721081

                                        להלן הקוד:

                                        using Newtonsoft.Json;
                                        using Newtonsoft.Json.Linq;
                                        using System;
                                        using System.Net.Http;
                                        using System.Text;
                                        using System.Threading.Tasks;
                                        
                                        namespace YemotUploadTextFile
                                        {
                                            internal class Program
                                            {
                                                static void Main(string[] args)
                                                {
                                                    UploadTextFileWithGet().GetAwaiter().GetResult();
                                                    Console.WriteLine("Done!");
                                                }
                                        
                                        
                                                static async Task UploadTextFileWithGet()
                                                {
                                                    var username = "<username>";
                                                    var password = "<password>";
                                        
                                                    var client = new HttpClient();
                                        
                                                    try
                                                    {
                                                        // login yemot system for getting token
                                                        HttpResponseMessage responseJ = await client.GetAsync(
                                                            $"https://www.call2all.co.il/ym/api/Login?username={username}&password={password}");
                                        
                                                        // בדיקת מצב התגובה
                                                        if (responseJ.IsSuccessStatusCode)
                                                        {
                                                            // קריאת התוכן של התגובה
                                                            string responseContent = await responseJ.Content.ReadAsStringAsync();
                                                            Console.WriteLine($"Response: {responseContent}");
                                        
                                                            var responseObj = JsonConvert.DeserializeObject<JObject>(responseContent);
                                        
                                                            if (responseObj["responseStatus"].ToString() == "OK")
                                                            {
                                                                // send a get request to upload file on yemot server
                                                                string token = responseObj["token"].ToString();
                                                                string what = "ivr2:14/text_file.ini";
                                                                string contents = "Some test message";
                                        
                                                                Console.WriteLine($"Response: {token}");
                                        
                                                                client = new HttpClient();
                                                                var responseJ2 = await client.GetAsync($"https://www.call2all.co.il/ym/api/UploadTextFile?token={token}&what={what}&contents={contents}");
                                                                // בדיקת מצב התגובה
                                                                if (responseJ2.IsSuccessStatusCode)
                                                                {
                                                                    // קריאת התוכן של התגובה
                                                                    var responseContent2 = await responseJ2.Content.ReadAsStringAsync();
                                                                    Console.WriteLine($"Response: {responseContent2}");
                                                                }
                                                                else
                                                                {
                                                                    Console.WriteLine($"Error: {responseJ2.StatusCode}");
                                                                    return;
                                                                }
                                                            }
                                                            else
                                                            {
                                                                Console.WriteLine($"Error: {responseObj["message"]}");
                                                                return;
                                                            }
                                        
                                                        }
                                                        else
                                                        {
                                                            Console.WriteLine($"Error: {responseJ.StatusCode}");
                                                            return;
                                                        }
                                        
                                        
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        Console.WriteLine($"Exception: {ex.Message}");
                                                    }
                                        
                                                    await Task.Delay(1000);
                                                    Console.WriteLine("Async work done!");
                                                }
                                            }
                                        }
                                        
                                        
                                        ע תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                        • ע
                                          עידו @soris1989 נערך לאחרונה על ידי עידו

                                          @soris1989 תודה
                                          אני גם משתמש בGET בד"כ הבעיה היא שעכשיו אני צריך לשלוח כמות גדולה של מידע שבקשת GET רגילה לא מסתדרת איתה... לא ברור לי בכלל למה הPOST לא עובד.

                                          בעקרון לא צריך 2 בקשות, מספיקה בקשה אחת בפורמט token=number:pass וזה מספיק.

                                          אגב, בדקתי את זה מול האתר jsonplaceholder והג'סון נראה תקין לגמרי. לכאורה זה אצל ימות המשיח.

                                          S תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                          • S
                                            soris1989 @עידו נערך לאחרונה על ידי

                                            @עידו "בעקרון לא צריך 2 בקשות, מספיקה בקשה אחת בפורמט token=number:pass וזה מספיק."
                                            באמת? אם כך זה חוסך סתם בקשה מיותרת.

                                            יש תיעוד של זה בדוקומנטציה?

                                            ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                            • פוסט ראשון
                                              פוסט אחרון