שליחת בקשה לשרת מקוד C#
-
שבוע טוב!
אני רוצה להוסיף לתוכנה אפשרות לחייב כרטיסי אשראי.
פניתי לכמה חברות וקיבלתי מהם API דרכו אני יכול לממש זאת.
הבעיה שלי שאני עדיין לא יודע WEB ולכן אני קצת מסתבך..אני מקבל מהמשתמש את הנתונים ומחבר אותם למחרוזת אחת, (בצירוף נתוני המסוף וכו') וממיר אותם למחרוזת JSON. באמצעות JavaScriptSerializer.
אח"כ אני יוצר אובייקט מסוג WebRequest מזין לו את הכתובת ומגדיר אותו לPOST. עד כאן הכל טוב ויפה.
אולם, אני לא מבין כיצד אני ממשיך מכאן הלאה? כיצד אני מזין לו את המחרוזת json שלי? ואיך אני שולח אותו?
מחיפוש בגוגל ראיתי שאולי צריך להשתמש בXMLHttpRequest, אך אני לא מצליח למצוא איפה להוסיף לו refrence כי הVS לא מכיר אותו..
אשמח להסבר.תודה רבה!
פורסם במקור בפורום CODE613 ב23/08/2015 01:34 (+03:00)
-
הסתדרתי.
כתבתי את הקוד הבא:string URL = "https://gateway20.pelecard.biz/services/ConvertToToken"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "POST"; try { if (!string.IsNullOrEmpty(creditNumberTB.Text + yearTB.Text + monthTB.Text )) { CreditToToken token = new CreditToToken(); token.numOfCredit = creditNumberTB.Text; token.Tokef = monthTB.Text + yearTB.Text; var tokenJSON = token.ToJSON();//המרת האובייקט לJSON using (var sw = new StreamWriter(request.GetRequestStream())) { sw.Write(tokenJSON); sw.Flush();//מה זה אומר?? sw.Close(); } var response = (HttpWebResponse)request.GetResponse(); using (var sr = new StreamReader(response.GetResponseStream())) { var result = sr.ReadToEnd(); resultTB.Text = result;//הצגת התשובה למשתמש } }
אשמח להסבר מדוע יש הבדל בין webRequest לHttpWebRequest?
כמו כן, מדוע אי אפשר לשלוח ישירות את האובייקט לשרת? מדוע צריך להשתמש בstreamWriter או reader?
תודה רבה!פורסם במקור בפורום CODE613 ב23/08/2015 02:13 (+03:00)
-
אני רואה מהדוגמא שהבאת שזה מפלאכארד.
יש להם ווב סרוויס שממומש כמו פונקצייה פנימית.ראה כאן
http://mabat.net/572/documents/WebService/WebService_Heb.htmוזה הWS
https://ws101.pelecard.biz/אתה פשוט צריך לעשות הוספה ורפרנס לWS בכתובת הנ"ל.
פורסם במקור בפורום CODE613 ב23/08/2015 11:22 (+03:00)
-
webRequest היא מחלקה אבסטרקטית שמכילה גם כמה פונקציות עם קוד כמו create ו httpWebRequest יורשת ממנה
StreamWriter זה אובייקט שעוזר לרשום לתוך stream בסטרינג ולא בבייטים, Flush מעדכן חזרה ל stream שעליו ה StreamWriter מוגדר, לא תמיד נחוץ, במקרה שלך שורות 17 ו 18 מיותרות כי שמת את זה בתוך using וביציאה מהבלוק הוא ממילא מבצע את שניהם אוטומטית.לגבי לשלוח ישירות לשרת לא הבנתי את שאלתך, בקשת HTTP מורכבת מ URL, headers, Mehtod, Body, אתה מצפה לקוד יותר קצר או מה?
ראה מה כתב clickone אם תשתמש ב WS זה יהיה יותר קצר בהרבה, אבל לא לכולם יש WS . . .פורסם במקור בפורום CODE613 ב23/08/2015 11:42 (+03:00)
-
לגבי לשלוח ישירות לשרת לא הבנתי את שאלתך, בקשת HTTP מורכבת מ URL, headers, Mehtod, Body, אתה מצפה לקוד יותר קצר או מה?
ראה מה כתב clickone אם תשתמש ב WS זה יהיה יותר קצר בהרבה, אבל לא לכולם יש WS . . .התכוונתי שלא מצאתי מאפיין בשם Body שאני פשוט יכול להזין אליו ישירות סטרינג עם מחרוזת JSON, אלא אני חייב להשתמש בstreamWriter כדי לכתוב את הבקשה. ולא הבנתי מדוע צריך להשתמש דווקא באובייקט הזה לכתיבה וא"א פשוט לשלוח אובייקט של מחרוזת לשרת, והשרת יקבל את המחרוזת שהיא בנויה בצורה של JSON יקרא אותה ויחזיר לי תשובה.
תודה רבה!clickOne אכן כן! ניחשת נכון :lol:
אבל מעניין שבמקום להפנות אותי לקובץ שהפנית הם שלחו לי PDF שבו מצויינים הפרמטרים שאני צריך לשלוח לכל סוג בקשה, ומה הכתובת..פורסם במקור בפורום CODE613 ב23/08/2015 20:49 (+03:00)
-
-
ניסיתי עם הווב סרביס שהביא clickOne אך אני מקבל שגיאת ריצה כזאת:
"לא היתה אפשרות לטעון את מקטע תצורת נקודת הקצה עבור החוזה 'ServiceReference1.ITrxWebService' כיוון שנמצאו מספר תצורות של נקודות קצה עבור חוזה זה. נא ציין את מקטע תצורת נקודת הקצה המועדף לפי שם".
הקוד שכתבתי הוא:public string ConvertToken() { TrxWebServiceClient client1 = new TrxWebServiceClient(); return client1.ConvertToToken(this.user, this.password, this.terminalNumber, this.numOfCredit, this.Tokef); }
ואני קורא למתודה הזאת מחלון בו המשתמש מזין פרטים שהם נשמרים באובייקט בשם טוקן, שאחת המתודות שלו היא זו.
מה הטעות שלי?
תודה רבה!!פורסם במקור בפורום CODE613 ב24/08/2015 00:05 (+03:00)