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

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

    פורום מפתחים API
    4
    24
    451
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • 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
                                          • ע
                                            עידו @soris1989 נערך לאחרונה על ידי

                                            @soris1989
                                            בהחלט

                                            שימו לב!
                                            ישנה דרך נוספת ליצירת טוקן ללא צורך בבקשת Login
                                            כאשר שולחים כל פקודת API, לרשום בפרמטר token מספר מערכת : סיסמא (username:password)

                                            לדוגמה:

                                            ${url}<WebServiceName>?token=${username}:${password}

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