מדריך למפתחים ל-LowProfile v11 של קארדקום - נקודת הקצה Create, למה ResponseCode הוא בדיקת ההצלחה היחידה, אֵנוּמֵי המסמכים כמחרוזות שהחליפו את הקודים המספריים הישנים, ולמה ה-webhook ולא ההפניה הוא מקור האמת שלך.
עיקרי הדברים
- הצלחה ב-v11 היא ResponseCode == 0. השדה הישן DealResponse לא קיים ב-v11 בכלל - קוד שהועתק מדוגמה ישנה יקרא הצלחה ככישלון או גרוע מזה.
- השדה DocumentTypeToCreate הוא אֵנוּם מחרוזתי ב-v11 - "TaxInvoiceAndReceipt", "TaxInvoice", "Receipt" - ולא קודים מספריים כמו 101 או 400 ששייכים לממשקי ה-aspx. הישנים.
- יש להתייחס ל-WebHookUrl כמקור האמת, לא להפניה בדפדפן. לקוח שסוגר את הלשונית אחרי התשלום לעולם לא יגיע לכתובת ההצלחה שלך, אבל ה-webhook עדיין נורה.
- יש לשמור את ה-LowProfileId שחוזר מ-Create. זו הידית שקושרת את ההזמנה שלך לעסקה, ובלעדיה התאמת תשלום מול הרשומות שלך הופכת לעבודה ידנית.
קארדקום היא אחד הסולקים הוותיקים בישראל, וממשק ה-LowProfile שלה הוא הדרך הנפוצה לקבל תשלום מאתר או ממערכת: אתה יוצר דף תשלום, מפנה אליו את הלקוח (או מטמיע אותו ב-iframe), והסליקה עצמה מתרחשת אצל קארדקום - כך שפרטי כרטיס האשראי לא עוברים דרך השרת שלך כלל.
המדריך הזה מתייחס ל-v11, וההבדלים בינה לבין הממשקים הישנים הם בדיוק המקום שבו נופלים.
יצירת דף תשלום
הקריאה היא:
POST https://secure.cardcom.solutions/api/v11/LowProfile/Createהשדות המרכזיים בגוף הבקשה:
TerminalNumber- מספר המסוף. חייב להישלח כמספר שלם ולא כמחרוזת.ApiName- שם המשתמש ב-APIOperation- מה לעשות: חיוב בלבד, יצירת טוקן, או שילובAmountו-ISOCoinId- סכום ומטבעReturnValue- השדה החשוב ביותר בפרקטיקה. זה שדה חופשי שחוזר אליך כמות שהוא. שים בו את מזהה ההזמנה שלך.SuccessRedirectUrlו-FailedRedirectUrl- לאן הדפדפן מופנהWebHookUrl- לאן קארדקום מודיעה לשרת שלךLanguageDocument- אובייקט אופציונלי להפקת מסמך אוטומטית
בתשובה מתקבלים LowProfileId - לשמור אותו על ההזמנה - ו-Url, שאליו מפנים או שאותו מטמיעים ב-iframe. אם ביט או PayPal מופעלים במסוף, יחזרו גם UrlToBit ו-UrlToPayPal.
שלוש מלכודות של v11 שגורמות לרוב התקלות
1. ResponseCode, לא DealResponse
זו הטעות היקרה ביותר. ב-v11 בודקים הצלחה לפי ResponseCode == 0. השדה DealResponse, שמופיע בהמון דוגמאות ברשת ובספריות ישנות, לא קיים ב-v11 בכלל.
קוד שבודק שדה לא קיים מקבל undefined או null, וההשוואה שלו נכשלת - כך שהצלחה נקראת ככישלון, או להפך, תלוי איך נכתבה הבדיקה. זו בדיוק הקטגוריה של באג שעובר בבדיקות ומתפוצץ מול לקוח.
כל נקודת קצה מחזירה גם Description - מחרוזת שמסבירה את התוצאה. כדאי לתעד אותה תמיד, גם בהצלחה.
2. סוגי מסמכים הם מחרוזות, לא מספרים
אם אתה מבקש מקארדקום להפיק מסמך אוטומטית, השדה DocumentTypeToCreate ב-v11 הוא אֵנוּם מחרוזתי: "TaxInvoiceAndReceipt", "TaxInvoice", "Receipt" וכדומה.
הקודים המספריים שאתה עשוי למצוא בדוגמאות - 101, 400 וחבריהם - שייכים לממשקי ה-.aspx הישנים ולא ל-v11. שליחת מספר במקום מחרוזת תיכשל.
3. ApiPassword לא נשלח בקריאה רגילה
ApiPassword אינו נשלח בקריאת LowProfile/Create רגילה ולא בחיוב עסקה רגיל. אם הוספת אותו כי ראית אותו איפשהו, כדאי לבדוק מול התיעוד באיזו פעולה הוא באמת נדרש - שליחת שדות מיותרים היא דרך קלה לקבל שגיאת ולידציה מבלבלת.
ההחלטה הארכיטקטונית: webhook או הפניה
יש שני מסלולים שבהם אתה לומד שהתשלום הצליח, והבחירה ביניהם קובעת כמה הזמנות "נעלמות" אצלך.
| הפניה בדפדפן | WebHookUrl | |
|---|---|---|
| מגיע דרך | הלקוח | שרת קארדקום ישירות |
| קורה תמיד? | לא | כן |
| נשען על | שהלקוח לא סגר את הלשונית | כלום |
ההפניה אינה אמינה. לקוח שסוגר את הדפדפן ברגע שהתשלום עבר, שהאינטרנט שלו נופל, או שפשוט לא ממתין - לעולם לא יגיע ל-SuccessRedirectUrl שלך. אם שם אתה מסמן את ההזמנה כמשולמת, ההזמנה תישאר "ממתינה" למרות שהכסף נגבה. זה קורה, וזה נראה כמו באג אקראי.
הכלל: ה-webhook מעדכן את מצב ההזמנה. ההפניה מציגה למשתמש מסך תודה. אף פעם לא להפך.
ובכל מקרה, נקודת הקצה של ה-webhook צריכה להיות אידמפוטנטית - אותה הודעה יכולה להגיע יותר מפעם אחת, ואסור שזה ייצור שתי הזמנות משולמות.
ההחלטה השנייה: מי מפיק את המסמך
קארדקום יכולה להפיק מסמך אוטומטית דרך אובייקט Document. זה נוח - אבל אם המערכת שלך גם מפיקה חשבונית דרך מערכת החשבוניות שלך, נוצרים שני מסמכי מס על עסקה אחת.
זו טעות התכנון הנפוצה ביותר כשסליקה והנהלת חשבונות מגיעות לאותו פרויקט, והיא מתגלה בסוף החודש. יש לבחור צד אחד ולתעד אותו.
אבטחה ותאימות
- אל תיגע בפרטי כרטיס. כל היתרון של LowProfile הוא שהם לא עוברים דרכך. אל תשלח אותם, אל תתעד אותם, אל תשמור אותם - אחרת אתה נכנס להיקף PCI DSS.
- לאמת את ה-webhook. נקודת קצה ציבורית שמסמנת הזמנות כמשולמות היא יעד מובן מאליו. אין להסתמך על סודיות הכתובת - יש לאמת את הבקשה ולהצליב את הסכום מול ההזמנה.
- להצליב סכומים. תמיד לבדוק שהסכום שחוזר תואם למה שהזמנת. אל תסמוך על כך שאף אחד לא שיחק עם הבקשה.
- סודות בצד השרת בלבד.
ApiNameופרטי המסוף לא מופיעים בקוד לקוח.
לפני העלייה לאוויר
- לאמת שהמסוף שלך אכן על v11 ושמופעל בו LowProfile.
- לבדוק את מסלול ה-webhook מקצה לקצה, לא רק את ההפניה.
- לבדוק במפורש את התרחיש שבו הלקוח סוגר את הלשונית מיד אחרי התשלום.
- להחליט אם
Documentנדרש אצלך, ולוודא שאין הפקה כפולה. - לבדוק כישלון אמיתי, לא רק הצלחה -
FailedRedirectUrlו-ResponseCodeשאינו אפס.
להשוואה בין הסולקים הישראליים, ראה השוואת סולקים ישראליים למפתחים.
שאלות נפוצות
איך בודקים אם עסקה בקארדקום v11 הצליחה?
לבדוק ResponseCode == 0. השדה DealResponse שמופיע בדוגמאות ובספריות ישנות אינו קיים ב-v11, ולכן קוד שבודק אותו מקבל undefined ומייצר תוצאה שגויה. כל נקודת קצה ב-v11 מחזירה גם מחרוזת Description שמסבירה את התוצאה, וכדאי לתעד אותה גם בהצלחה וגם בכישלון.
האם לסמן הזמנה כמשולמת בהפניה של קארדקום או ב-webhook?
ב-webhook. ההפניה בדפדפן תלויה בכך שהלקוח יישאר בדף - מי שסוגר את הלשונית אחרי התשלום לעולם לא מגיע לכתובת ההצלחה, וההזמנה נשארת מסומנת כממתינה בזמן שהכסף נגבה. יש להשתמש ב-WebHookUrl לעדכון מצב ההזמנה ובהפניה רק להצגת מסך תודה, ולהפוך את נקודת הקצה לאידמפוטנטית כי הודעות יכולות לחזור.
באילו קודי סוגי מסמכים משתמשת קארדקום v11?
אֵנוּמִים מחרוזתיים כמו "TaxInvoiceAndReceipt", "TaxInvoice" ו-"Receipt" בשדה DocumentTypeToCreate. הקודים המספריים כמו 101 או 400 שמופיעים בדוגמאות רבות שייכים לממשקי ה-aspx. הישנים ולא יעבדו מול v11. שליחת מספר במקום האנום המחרוזתי מייצרת כשל ולידציה.
איך מקשרים תשלום בקארדקום בחזרה להזמנה שלי?
להשתמש בשדה ReturnValue, שהוא שדה טקסט חופשי שחוזר אליך כמות שהוא - יש לשים בו את מזהה ההזמנה שלך. בנוסף לשמור על רשומת ההזמנה את ה-LowProfileId שחוזר מקריאת Create. בעזרת שניהם אפשר להתאים כל תשלום לנתונים שלך בלי השוואה ידנית.
האם שימוש ב-LowProfile של קארדקום מכניס אותי להיקף PCI DSS?
כל הרעיון ב-LowProfile הוא שפרטי הכרטיס מוזנים בדף של קארדקום ולא עוברים דרך השרת שלך, מה שמשאיר את ההיקף מינימלי. ההגנה הזו מחזיקה רק אם אתה לא שולח, מתעד או שומר נתוני כרטיס בעצמך. ברגע שפרטי כרטיס נוגעים במערכת שלך - אפילו בשורת לוג - התמונה משתנה.
להמשך קריאה
שירות רלוונטי
אינטגרציות
לגרום למערכות שאתם כבר משלמים עליהן לדבר זו עם זו.
על הכותב
יהונתן סעדיה
מהנדס פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מהנדס בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה מנסה להפוך לאוטומטי או לבנות, ואומר לך מהי הדרך המהירה והאמינה ביותר ליישם את זה.
