Skip to main content

מה זה חיוב חד-פעמי?

חיוב חד-פעמי הוא תשלום שמתבצע פעם אחת בלבד - ללא חידוש אוטומטי.

מנוי (Subscription)

חיוב אוטומטי כל חודש/שנהדוגמאות: Netflix, Spotify, SaaS

חד-פעמי (One-Time)

תשלום יחיד, ללא חזרהדוגמאות: קורס, ספר, כרטיס לאירוע

מתי להשתמש בזה?

לקוח משלם פעם אחת ומקבל גישה לכל החיים.דוגמה: “קורס פיתוח Full-Stack - ₪499 (פעם אחת)”
eBooks, תבניות, כלים דיגיטליים, פלאגינים.דוגמה: “תבנית Landing Page - ₪149”
כנסים, סדנאות, אירועים חד-פעמיים.דוגמה: “כרטיס לכנס SaaS 2025 - ₪299”
ייעוץ, ביקורת קוד, עיצוב לוגו.דוגמה: “שעת ייעוץ עסקי - ₪500”
תרומה לפרויקט, Tip Jar, קפה למפתח.דוגמה: “קנה לי קפה ☕ - ₪15”

ההבדלים מול מנוי

מאפייןמנוי (Subscription)חד-פעמי (One-Time)
תדירות חיובאוטומטי (חודשי/שנתי)פעם אחת בלבד
ביטולהלקוח יכול לבטלאין מה לבטל
ניהולפורטל ניהול מנויאין צורך בניהול
זיהויsubscription_uidorder_uid
חידושמתחדש אוטומטיתלא מתחדש
Success URL?subscription_uid=sub_xxx?order_uid=order_xxx&email=...

איך זה עובד?

1

לקוח לוחץ 'קנה עכשיו'

הלקוח מגיע לדף המוצר ורוצה לרכוש
2

יצירת לינק תשלום

המערכת שלך יוצרת לינק תשלום אישי עבורו
3

מעבר לדף תשלום

הלקוח מועבר לדף התשלום של Splitz
4

ביצוע תשלום

הלקוח משלם (PayPal או כרטיס אשראי)
5

חזרה לאפליקציה

הלקוח מועבר חזרה עם order_uid ופרטי התשלום
6

אימות ומתן גישה

אתה מאמת שההזמנה שולמה ונותן לו גישה למוצר

הקוד המלא

דרישות:
כל הפונקציות ההתממשקות והאינטגרציה עם SPLITZ מתבצעת דרך חבילת הNPM ולא בשום פנים ואופן בצורה ישירה לAPI! המזהה לינק לתשלום ניתן להשיג מהדאשבורד בעמוד: לינקים לתשלום -> לחיצה על הלינק לתשלום ועל כפתור העתק uid בצד שמאל במסך קבלת מפתח api במסך ההגדרות -> api key

שלב 1: יצירת לינק תשלום

const SplitzClient = require('splitz-payments');

const splitz = new SplitzClient({
  apiKey: 'YOUR_API_KEY_HERE'
});

  // יצירת לינק
  const options = {
    payment_link_uid: 'xxx',
    customer_email: '[email protected]'
  };

  const result = await splitz.paymentLinks.generate(options);
  console.log(result.url);
לאחר המימוש בקוד, הלקוח חייב להגדיר בהגדרות הלינק לתשלום את הכתובת להפנייה לאחר תשלום מוצלח! שימו לב שחובה להגדיר כתובת לחזרה לאחר תשלום מוצלחה (success url) על מנת שהמערכת תדע לאן להפנות את הלקוח שלכם לאחר תשלום מוצלח - תוכלו לבצע זאת בהגדרות לינק לתשלום.

שלב 2: בדיקה האם הזמנה שולמה לאחר התשלום:

הפרמטר שייחזור בURL ששמו: order_uid יעזור לכם לזההות את ההזמנה ולאמת את התשלום. לדוגמא: https://example.com/subscriptionCallback?order_uid=xxx
const SplitzClient = require('splitz-payments');

const splitz = new SplitzClient({
  apiKey: 'YOUR_API_KEY_HERE'
});

 // בדיקת תשלום
 const isPaidResult = await splitz.orders.isPaid('order_xxx');
 console.log(isPaidResult.paid); // boolean

  // שליפת הזמנה
 const orderResult = await splitz.orders.get('order_xxx');
 console.log(orderResult.order.email);

Security Checklist

1

✅ API Key בצד השרת בלבד

אל תחשוף את ה-API Key בצד הלקוח!
// ❌ לא טוב (Client-side):
const splitz = new SplitzClient({ apiKey: '...' });

// ✅ טוב (Backend Function):
// הקוד רץ בשרת, לא בדפדפן
2

✅ אמת תמיד בשרת

אל תסמוך על פרמטרים ב-URL!
// תמיד:
const status = await splitz.orders.isPaid(orderUid);
if (status.paid) {
  // תן גישה
}

סיכום

תזכורות חשובות:
  • ✅ תמיד תאמת בצד השרת עם orders.isPaid()
  • ✅ אל תחשוף API Key בצד הלקוח
  • ✅ שמור order_uid בדאטאבייס
  • ✅ שלח מייל אישור לכל תשלום
  • ✅ טפל בשגיאות בצורה ידידותית
תשלום חד-פעמי
const paymentLink = await splitz.paymentLinks.generate({
  payment_link_uid: 'xxx',           // ה-Payment Link UID שיצרת
  customer_email: '[email protected]' // מייל הלקוח
});

// הפנה את הלקוח לדף התשלום
const paymentUrl = paymentLink.url;
console.log('לינק לתשלום:', paymentUrl);

// הפנה אותו:
window.location.href = paymentUrl;
אבטחה קריטית!קריאת ה-API חייבת להתבצע בצד השרת (Backend Function), לא בצד הלקוח!אם תחשוף את ה-API Key בצד הלקוח - הכסף שלך בסכנה! 🔒

טיפול בחזרה מדף התשלום

אחרי שהלקוח משלם, הוא חוזר לכתובת שהגדרת ב-Payment Link (עמוד ההצלחה).

הפרמטרים שחוזרים ב-URL:

?order_uid=order_xxx

אימות התשלום (קריטי!)

חובה לאמת!אל תסמוך רק על הפרמטרים ב-URL!מישהו יכול לזייף URL (?uid=order_xxx) ולקבל גישה חינם.תמיד תאמת בצד השרת שההזמנה באמת שולמה! 🔐

Order Object - מבנה נתונים

כשאתה קורא ל-splitz.orders.get(), תקבל אובייקט עם השדות הבאים:
{
  uid: string;              // מזהה ייחודי של ההזמנה
  email: string;           // אימייל הלקוח
  price: number;           // מחיר (לדוגמה: 499)
  currency: string;        // מטבע (ILS)
  status: string;          // סטטוס ההזמנה
  is_paid: boolean;        // האם שולם?
  paid_at: string | null;  // תאריך תשלום (ISO format)
  createdAt: string;       // תאריך יצירה
}


שילוב עם Lovable

אם אתה משתמש ב-Lovable, הנה prompt מוכן:
אני רוצה להוסיף כפתור "קנה עכשיו" לדף המוצר שלי.

כשלוחצים עליו:
1. יצור לינק תשלום חד-פעמי ב-Splitz
2. יעביר את הלקוח לדף התשלום
3. אחרי תשלום מוצלח - יאמת ויתן לו גישה למוצר

השתמש בחבילת NPM: splitz-payments

צור Backend Function שעושה:

```javascript
const SplitzClient = require('splitz-payments');

const splitz = new SplitzClient({
  apiKey: 'YOUR_API_KEY_HERE' // החלף!
});

// יצירת לינק תשלום
const paymentLink = await splitz.paymentLinks.generate({
  payment_link_uid: 'xxx', // החלף ל-Payment Link שלך
  customer_email: 'מייל המשתמש המחובר'
});

לאחר מכן תוכל להחזיר לצד הלקוח את הלינק שחזר מהמשתנה paymentLink
צור עמוד חדש “purchase-success” שמאמת את התשלום: אל תשתמש ב-ENV - הכנס את ה-API Key כמחרוזת ישירות. הקוד חייב להיות Backend Function, לא בצד לקוח!

---

## טיפול בשגיאות

הספרייה מספקת error classes ייעודיים:

```javascript
const { errors } = require('splitz-payments');

try {
  const status = await splitz.orders.isPaid('order_xxx');
  
} catch (error) {
  if (error instanceof errors.NotFoundError) {
    console.error('❌ הזמנה לא נמצאה');
    alert('ההזמנה לא קיימת במערכת. צור קשר עם התמיכה.');
    
  } else if (error instanceof errors.AuthenticationError) {
    console.error('❌ API key לא תקין');
    
  } else if (error instanceof errors.ForbiddenError) {
    console.error('❌ אין הרשאה לגשת להזמנה זו');
    
  } else if (error instanceof errors.SplitzAPIError) {
    console.error('❌ שגיאת API:', error.message);
    console.error('סטטוס:', error.statusCode);
  }
}

סוגי שגיאות:

  • SplitzAPIError - שגיאה כללית מה-API
  • ValidationError - פרמטרים לא תקינים
  • AuthenticationError - API key לא תקין או חסר
  • NotFoundError - משאב לא נמצא (404)
  • ForbiddenError - אין הרשאה (403)

Troubleshooting

הבעיה: הקוד לא מפנה נכון.הפתרון:
// ✅ נכון:
window.location.href = paymentLink.url;

// ❌ לא יעבוד (רק מדפיס):
console.log(paymentLink.url);
הבעיה: עמוד ההצלחה לא מוגדר ב-Payment Link.הפתרון:
  1. היכנס ל-Dashboard → לינקים לתשלום
  2. ערוך את הלינק
  3. הוסף “כתובת הפניה לאחר תשלום” (Success URL)
  4. לדוגמה: https://myapp.com/purchase-success
הבעיה: ה-order_uid לא נכון או לא קיים.הפתרון:
  1. בדוק שאתה קורא נכון את הפרמטר:
const orderUid = urlParams.get('uid') || urlParams.get('order_uid');
  1. וודא שהפרמטר באמת קיים ב-URL
  2. בדוק ב-Dashboard → הזמנות אם ההזמנה קיימת
הבעיה: PayPal עדיין מעבד את התשלום.הפתרון: זה נורמלי - לפעמים לוקח 1-2 דקות.תצג ללקוח:
"התשלום בתהליך אישור... נודיע לך כשזה יושלם!"
חכה 30 שניות ונסה שוב, או השתמש ב-Webhook.
הבעיה: הקוד לא נתן לו גישה אוטומטית.הפתרון:
  1. בדוק ב-Dashboard → הזמנות - האם התשלום מופיע כ-Paid?
  2. בדוק את הקונסול (F12) - יש שגיאות JavaScript?
  3. ודא שהקוד של grantAccess() רץ
  4. בדוק שהנתונים נשמרו בדאטאבייס
  5. השתמש ב-Webhook כפתרון גיבוי

שאלות נפוצות

כן. אתה יכול להחזיר כסף ישירות מה-Dashboard.הזמנות → בחר הזמנה → החזר כסףהכסף יחזור ללקוח תוך 5-10 ימי עסקים.
  • isPaid() - בדיקה מהירה, מחזיר רק { paid: true/false }
  • get() - מחזיר את כל פרטי ההזמנה (מייל, מחיר, תאריכים וכו’)
מתי להשתמש במה:
  • רק רוצה לדעת אם שולם? → isPaid()
  • צריך פרטים נוספים? → get()
בהחלט! פשוט השתמש ב-Payment Links שונים:
  • pl_subscription_monthly למנויים
  • pl_course_onetime לקורסים חד-פעמיים
התשלומים יופיעו ב-Dashboard בנפרד.
ב-Dashboardהזמנותתראה:
  • כל התשלומים (מנויים + חד-פעמיים)
  • סטטוס (Paid / Pending)
  • סכומים
  • מיילים של לקוחות
  • Export ל-Excel
זה לא אמור לקרות (הלינך תקף רק לתשלום אחד).אם זה קרה בכל זאת - פשוט תחזיר כסף על אחד התשלומים מה-Dashboard.
כן, מומלץ מאוד!זה מאפשר לך:
  • לעקוב אחרי מי שילם
  • למנוע duplicate purchases
  • לתת support (הלקוח אומר “שילמתי ואין לי גישה”)
  • לעשות refund אם צריך
await db.purchases.create({
  user_id: userId,
  order_uid: order.uid,
  email: order.email,
  amount: order.price,
  purchased_at: order.paid_at
});