יצירת מסמכים דרך ה API של EZcount - אקסס
-
אני מנסה ליצור חשבוניות ב EZCount
עם הAPI שלהם, דרך אקסס VBA
בינתיים הולך קש, לא מצאתי משהו שעובד.שאלתי:
א. האם יש דרך להבין מתוך האפשרויות שEZcount מחזיר, מה צריך לשנות כדי שיעבוד. (בדקתי ב jsonlint.com שהJSON תקין)
ב. אם לא, האם מישהו יודע על משהו שעובד באקסס בשביל זה?
ג. תחליף. מדובר במערכת שבנויה באקסס כבר כמה שנים, עכשיו רוצים להוסיף חשבוניות. האם יש דרך להכניס משהו חיצוני, תוסף או משהו כזה, שמיוצר בC# או VB שיתקשר עם השרת?. (אאל"ט בעבר דיברו כאן מאפשרות כזאת)
זה קוד השליחה:
Function httpPost(url, msg) With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "POST", url, False .setRequestHeader "Content-type", "application/json" .send msg httpPost = .responseText End With End Function Sub Test() Body = "{""api_key"": ""b3b....1"",""developer_email"": ""myMail@gmail.com"",""type"": ""405"",""customer_name"": ""My name"",""payment"": ""[{""payment_type"": ""1"",""date"": ""10/10/2020"",""payment_sum"": ""2""}]""}" Debug.Print httpPost("https://www.ezcount.co.il/api/createDoc", JsonConverter.ConvertToJson(Body)) End Sub
וזה מה שמתקבל:
"errMsg": "no data sent, please send a GET, POST or JSON request.,known causes for getting this error:, 1.you are using a none SSL connection (http), 2.your JSON is not valid, please validate your json at: jsonlint.com, 3.you are sending a JSON as GET request instead of POST, 4.your request header is not lower case (application\/json) and you are using ASP classic", "errMsgPretty": [ "no data sent, please send a GET, POST or JSON request.", "known causes for getting this error:", " 1.you are using a none SSL connection (http)", " 2.your JSON is not valid, please validate your json at: jsonlint.com", " 3.you are sending a JSON as GET request instead of POST", " 4.your request header is not lower case (application\/json) and you are using ASP classic" ], "success": false, "unixtime": 1618412221
-
@מלא הJSON לא תקין.
אחרי הpayment צריך מייד להתחיל [ ללא מרכאות. וכן בסוף אחרי סיום המערך צריך להיות ללא מרכאות אחרי הסוגר המרובע, ככה:Body = "{""api_key"": ""b3b....1"",""developer_email"": ""myMail@gmail.com."",""type"": ""405"",""customer_name"": ""My name"",""payment"": [{""payment_type"": ""1"",""date"": ""10/10/2020"",""payment_sum"": ""2""}]}"
-
@dovid
אותה תגובה.זה הפלט של ConvertToJson אם משנה.
"{\"api_key\": \"b3b1c...edaf6d9f\",\"developer_email\": \"myMail@gmail.com\",\"type\": \"405\",\"customer_name\": \"My name\",\"payment\": [{\"payment_type\": \"1\",\"date\": \"10/10/2020\",\"payment_sum\": \"2\"}]}"
מכל החיפושים ברשת, לכאורה זה הקוד לשלוח JSON אבל משום מה זה מחזיר לי שגיאה.
-
@מלא אמר ביצירת מסמכים דרך ה API של EZcount - אקסס:
ג. תחליף. מדובר במערכת שבנויה באקסס כבר כמה שנים, עכשיו רוצים להוסיף חשבוניות. האם יש דרך להכניס משהו חיצוני, תוסף או משהו כזה, שמיוצר בC# או VB שיתקשר עם השרת?. (אאל"ט בער דיברו כאן מאפשרות כזאת)
אני זוכר שלתוכנה כספית יש API עם מימוש של DLL
מצד שני אם אתה מרוצה כיום (לכאורה אתה רק בהתחלת פיתוח...) הייתי מציע לך לכתוב את זה כDLL של דוטנט ולקשר אותו לאקסס -
@מלא אמר ביצירת מסמכים דרך ה API של EZcount - אקסס:
@OdedDvir יש לך נסיון עם זה?
לא.
אבל משהו לא מובן לי בקוד הנ"ל.
מדוע אתה משתמש בפונקציה ConvertToJson על Body, כאשר Body מוגדר כבר כמחרוזת בפורמט Json? הפונקציה אמורה לקבל אובייקט ולהמיר אותו לJson. להערכתי הפונקציה מחזירה לך מחרוזת Json שמכילה אובייקט אנונימי של מחרוזת Json....
נסה לשלוח את Body ישירות כפרמטר:Sub Test() Body = "{""api_key"": ""b3b....1"",""developer_email"": ""myMail@gmail.com"",""type"": ""405"",""customer_name"": ""My name"",""payment"": ""[{""payment_type"": ""1"",""date"": ""10/10/2020"",""payment_sum"": ""2""}]""}" Debug.Print httpPost("https://www.ezcount.co.il/api/createDoc", Body) End Sub
הערה: לא התעמקתי בשינוי של מבנה ה-Json עצמו שהביא @dovid, לצערי אין לי זמן כעת לעבור על הדוקומנטציה של ה-API. פשוט העלתי את הנקודה הנוספת הנ"ל.
-
@מלא
אני מצרף דוגמא מאוד בסיסית שעשיתי
כמובן שזה לא עומד בכלל בתנאי הכתיבה הנכונים של קוד
אבל אם יהיה למישהו תועלת, והיה זה שכריFunction Update1() Dim objHTTP As Object Dim Json As String: Json = "" Dim Body As New Dictionary Dim Bodyitem As New Dictionary Dim Bodypayment As New Dictionary Body.Add "api_key", "f1c85d16197de6d4dc0da51bf" Body.Add "api_email", "demo@ezcount.co.il" Body.Add "Description", "HOK BBNK 12 -655-5555444 " Body.Add "developer_email", "DEVELOPER@example.com" Body.Add "customer_crn", "308358899" Body.Add "customer_address", "השומר 34 בי ברק" Body.Add "customer_phone", "050123456789" Body.Add "type", "400" Body.Add "customer_name", "הרב שלמה שוורץ" Body.Add "customer_email", "612@GMAIL.COM" 'Body.Add "developer_phone", "050123456789" 'Body.Add "price_total", "380" Body.Add "forceItemsIntoNonItemsDocument", "1" Body.Add "show_items_including_vat", "0" d1 = JsonConverter.ConvertToJson(Body) Bodyitem.Add "catalog_number", "A1" Bodyitem.Add "details", ",תשלום 08" Bodyitem.Add "price", "380" Bodyitem.Add "amount", "1" Bodyitem.Add "vat_type", "NON" 'Bodyitem.Add "discount_price", "3" d2 = JsonConverter.ConvertToJson(Bodyitem) d9 = SHARSER(d1, d2, "item") Bodypayment.Add "payment_type", "9" Bodypayment.Add "payment_sum", "380" Bodypayment.Add "other_payment_type_name", "TAHSLUM " d3 = JsonConverter.ConvertToJson(Bodypayment) d9 = SHARSER(d9, d3, "payment") Debug.Print d9 'Body.Add "payment", Array("payment_type", "1", "payment_sum", "250") '"[0,1,2,3,4,5]" Dim Client As New WebClient Dim Response As WebResponse cc = JsonConverter.ConvertToJson(Body) Set Response = Client.PostJson("https://demo.ezcount.co.il/api/createDoc", d9) Debug.Print Response.Content Dim ResponseJson As Object Set ResponseJson = JsonConverter.ParseJson(Response.Content) 'ddd = Replace(Response.Content, "\", "") Debug.Print ResponseJson("pdf_link") End Function Function SHARSER(ByVal strJson As String, ByVal subDataJson As String, nameSubJson As String) As String strJson = Mid(strJson, 1, Len(strJson) - 1) SHARSER = strJson & ",""" & nameSubJson & """" & ":[" & subDataJson & "]}" End Function