הגדרת סוגי תשלום שונים

פלטפורמת Actions Center תומכת במגוון הגדרות לקבלת תשלומים. המדריך להפעלת תשלומים עוסק בהיבטים של השילוב שקיימים בכל שילובי התשלומים, כולל:

  1. הגדרת פידים כך שיכללו מידע על tokenization_parameter
  2. עדכון שרת ההזמנות כך שיקבל אובייקטים מסוג payment_method_token
  3. סקירה כללית של המידע שמשתנה בין משתמש, מרכז הפעולות, השותף או המוכר וחברת עיבוד התשלומים.

במדריך הזה נסביר בפירוט איך להגדיר את הפיד כדי לציין אילו מהסוגים השונים של הגדרות התשלומים רלוונטיים למוכרים ולשירותים שלכם.

  1. No Payments / Pay on Arrival
  2. תשלום מלא מראש
  3. ללא עמלת הצגה / עמלת ביטול
  4. הפקדה

כל תרחישי השימוש של התשלומים הם הרחבות של תרחיש השימוש ללא תשלומים או לתשלום על הגעה (שאינו מחייב הגדרת תשלומים). לכן, המדריך הזה יתחיל בתיאור ההגדרה הזו, והגדרות אחרות יטופלו כהרחבות.

בכל קטע נסביר גם על השדות שצריך לעקוב אחריהם בשרת ההזמנות כדי לקבל את הגדרת התשלום הספציפית.

ללא תשלומים / תשלום על הגעה

בשירותים שלא דורשים תשלום בזמן ביצוע ההזמנה, לא נדרשת הגדרת תשלומים ברמת המוכר או ברמת השירות. עם זאת, עדיין צריך לציין מחירים.

זוהי ההגדרה הבסיסית של שירות, שמכילה שם, תיאור ומחיר. זו תהיה הודעה אחת של Service בתוך ServiceFeed:

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-1-a",
    "name": "Men's haircut",
    "description": "One of our stylists will cut your hair",
    "price": {
        "price_micros": 15000000,
        "currency_code": "USD"
    }
}

לא נדרשות הגדרות נוספות מעבר להטמעה הרגילה בשרת ההזמנות כדי לתמוך בתשלום על הגעה.

תשלום מראש

ההגדרה הזו משמשת לציון שצריך לשלם את הסכום המלא על השירות בזמן ההזמנה.

התשלום מראש מצוין ברמת השירות באמצעות השדה prepayment_type ב-Service. כדי לחייב על שירות, צריך להגדיר את הערך הזה ל-REQUIRED, כמו בדוגמה הבאה. חשוב לזכור שהמחיר מצוין באותו אופן כמו בדוגמה של תשלום במעמד המסירה. במקרה הזה, מכיוון שאנחנו מגדירים את סוג התשלום מראש כחובה, יהיה צורך להזין פרטי כרטיס אשראי, ואפשר יהיה לחייב את המחיר הזה בזמן התשלום בקופה.

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "prepayment_type": "REQUIRED"
}

שרת הזמנות

כשמקבלים תשלומים מראש, אסימון תשלום מועבר לשרת ההזמנות בקריאה ל-CreateBooking דרך השדה payment_processing_parameters.unparsed_payment_method_token. אתם נדרשים לחייב את הסכום שצוין בדיוק בשדה המחיר בפיד, ולהשתמש במטבע שצוין בפיד. החיובים האלה צריכים להתבצע לפי התהליך שמתואר במדריך להפעלת תשלומים.

כשמחזירים את התג CreateBookingResponse, צריך להגדיר את השדה booking.payment_information כך שישקף בצורה נכונה שהתשלום מראש סופק וטופל.

במפרט PaymentInformation מפורט מידע מלא על כל האפשרויות של פרטי התשלום. בהמשך מופיעה דוגמה מינימלית לעיבוד תשלום מראש. חשוב שהמחיר שמוחזר בשדה price יהיה זהה למחיר שצוין בבקשה. בנוסף, אם צוין שיעור מס בפידים או בבקשה, צריך לכלול אותו גם כן באופן מדויק.

חשוב גם לזכור שצריך לספק מזהה עסקה. מזהה העסקה הזה חייב להיות ייחודי לפחות ביחס לעסקאות עם אותו מוכר. מומלץ להשתמש במזהה העסקה שסופק לכם על ידי חברת עיבוד התשלומים.

JSON
{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
}

עמלה על אי-השתתפות

אפשר לחייב משתמשים בעמלות על אי-הגעה אם הם לא מגיעים להזמנה, או אם הם מבטלים אחרי חלון הביטולים. אם לא תציינו חלון ביטולים, ברירת המחדל תהיה שעת ההתחלה של המשבצת.

כדי לציין את העמלה על אי-הגעה, צריך לכלול את השדה no_show_fee בפיד השירות, כמו בדוגמה הבאה:

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": 200000000,
        "currency_code": "USD"
    }
    "scheduling_rules": {
        "min_advance_online_canceling": 14400,
    }
    "no_show_fee": {
        "fee": {
            "price_micros": 25000000,
            "currency_code": "USD"
        }
        "fee_type": "FIXED_RATE_DEFAULT"
    }
}

בדוגמה שלמעלה, השותף או המוכר מורשים לחייב בסכום קבוע של 25$, כפי שצוין בשדה no_show_fee.fee.price_micros, אם המשתתף בפגישה לא מגיע לפגישה. יכול להיות שהחיוב על העמלה הזו יתבצע גם אם המשתמש יבטל את הפגישה במהלך 4 השעות (14,400 שניות) שלפניה, כפי שמצוין בשדה scheduling_rules.min_advance_online_canceling.

בקטע הזה מוסבר איך מגדירים חיובים על הפסקת שידור לפני שהתוכנית מוצגת ברמת הזמינות.

שרת הזמנות

כשמעובדים בקשה שכוללת עמלת ביטול, אסימון תשלום מועבר לשרת ההזמנות בקריאה ל-CreateBooking דרך השדה payment_processing_parameters.unparsed_payment_method_token. האסימון הזה מועבר באותו אופן כמו במקרה של תשלום מראש. עם זאת, מאחר שהאסימון מאושר רק לתקופה קצרה, צריך להפעיל את ה-API הרלוונטי של מעבד התשלומים כדי לשדרג את האסימון לגרסה שאפשר לשמור לשימוש במועד מאוחר יותר. אפשר לקרוא על כך בקטע תהליך השימוש באסימונים של חיוב על אי-הגעה במדריך להפעלת התשלומים.

כשמחזירים את הערך CreateBookingResponse, צריך להגדיר את השדה booking.payment_information כדי שהסטטוס של דמי הביטול יופיע כראוי, כמו בדוגמה הבאה.

JSON
{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "no_show_fee": {
        "fee": {
            "price_micros": 25000000,
            "currency_code": "USD"
        }
        "fee_type": "FIXED_RATE_DEFAULT"
    }
}

שימו לב שהשדה no_show_fee מוגדר כך שישקף את המחיר ואת המבנה של העמלה שעשויה להיות מחויבת. כמו כן, בדומה לדוגמה של התשלומים מראש, צריך להוסיף את השדה transaction_id להודעה הזו.

חשוב גם לזכור שהשדה booking_id שמוגדר ב-CreateBookingResponse הוא שדה חובה לעדכונים בזמן אמת שצריך לשלוח כשמחיבים על אי-הגעה. המזהה הזה אמור להישמר לצד המידע על ההזמנה.

עדכונים בזמן אמת

אם משתמש לא מגיע להזמנה המתוזמנת או מבטל אותה אחרי חלון הביטולים (למשל, על ידי יצירת קשר איתכם ישירות), תוכלו לחייב אותו בעמלה שצוינה על אי-הגעה באמצעות פרטי התשלום ששמרתם בזמן ההזמנה. כשמחיבים על אי-הגעה, צריך לשלוח עדכון בזמן אמת שבו מצוין שחויב חיוב על אי-הגעה.

אם ההזמנות נוצרו על ידי CreateBooking, צריך לשלוח עדכון לכתובת notification.partners.bookings.patch. בגוף הבקשה צריכה להופיע ההזמנה המעודכנת, עם הסטטוס NO_SHOW_PENALIZED. הסטטוס הזה מעדכן את Google על כך שהתבצע חיוב.

לדוגמה, אפשר לשלוח בקשה אל:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

עם גוף בקשה:

JSON
{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "NO_SHOW_PENALIZED"
}

הפקדה

היתרה משמשת לחיוב ראשוני כתנאי להזמנה. אפשר לחייב את הלקוחות על הפיקדון בזמן ביצוע ההזמנה או בשלב מאוחר יותר. יכול להיות שתצטרכו להגדיר את התנאים שבהם ניתן לקבל החזר כספי על הפיקדון, וגם מתי אפשר לבטל הזמנה באינטרנט.

כדי לציין הפקדה, צריך לכלול את השדה deposit בפיד השירות, כמו בדוגמה הבאה:

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": 200000000,
        "currency_code": "USD"
    }
    "scheduling_rules": {
        "min_advance_online_canceling": 86400,
    }
    "deposit": {
        "deposit": {
            "price_micros": 25000000,
            "currency_code": USD,
            "min_advance_cancellation_sec": 14400,
        }
        "deposit_type": "FIXED_RATE_DEFAULT"
    }
}

בדוגמה הזו, השדה min_advance_online_canceling מגדיר את חלון הביטולים, והשדה deposit.min_advance_cancellation_sec מגדיר מתי ניתן לקבל החזר כספי על הפיקדון. שימו לב שבדוגמה שלמעלה, אפשר לציין זמן ביטול בנפרד מתנאי ההחזר הכספי. במקרה כזה, המשתמש יוכל לבטל את השירות אונליין עד 24 שעות מראש (86,400 שניות). כך המוכר יקבל הודעה ישירות על ביטולים מאוחרים. עם זאת, יכול להיות שהמשתמש עדיין יהיה זכאי להחזר על הפיקדון עד 4 שעות (14,400 שניות) לפני ההזמנה (על ידי פנייה אליך או אל המוכר לביטול), כפי שמצוין בתנאים בקופה ובאימייל האישור.

בקטע הזה מוסבר איך אפשר להגדיר הפקדות ברמת הזמינות.

שרת הזמנות

כשמעובדים בקשה שכוללת הפקדה, אסימון תשלום מועבר לשרת ההזמנות בקריאה ל-CreateBooking דרך השדה payment_processing_parameters.unparsed_payment_method_token. האסימון הזה מועבר באותו אופן כמו במקרה של תשלום מראש. אם אתם מחייבים את הלקוח על סכום ההפקדה או מבטלים את האישור והחזקה (authorization hold) בזמן ביצוע ההזמנה, תוכלו לעשות זאת במהלך הבקשה הזו.

אם אתם מתכוונים לחייב את ההפקדה במועד מאוחר יותר, מאחר שהאסימון מאושר רק לתקופה קצרה, עליכם להפעיל את ה-API הרלוונטי של מעבד התשלומים כדי לשדרג את האסימון לגרסה שאפשר לשמור לשימוש במועד מאוחר יותר. הנושא הזה מתואר בקטע תהליך השמירה של אסימון במדריך להפעלת תשלומים.

כשמחזירים את הערך CreateBookingResponse, השדה booking.payment_information צריך להחזיר את הסטטוס של ההפקדה כמו בדוגמה הבאה.

JSON
{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "deposit": {
        "deposit": {
            "price_micros": 25000000,
            "currency_code": USD,
            "min_advance_cancellation_sec": 28800,
        }
        "deposit_type": "FIXED_RATE_DEFAULT"
    }
}

לתשומת ליבכם: סכום ההתחייבות מוגדר כך שישקף את המחיר ואת המבנה של ההתחייבות שתחויב או שתישמר. כמו כן, בדומה לדוגמה של תשלומים מראש, צריך להוסיף את השדה transaction_id להודעה הזו.

עדכונים בזמן אמת

אם משתמש מבטל את ההזמנה לפני חלון הביטולים של הפיקדון, עליכם להנפיק החזר כספי על כל פיקדון שחוייב בכרטיס של המשתמש. כשאתם מעניקים החזר כספי על הפיקדון, אתם צריכים לשלוח עדכון בזמן אמת שבו יצוין שהפיקדון הוחזר.

אם ההזמנות נוצרו על ידי CreateBooking, צריך לשלוח עדכון לכתובת notification.partners.bookings.patch. גוף הבקשה צריך לכלול את ההזמנה המעודכנת, עם הסטטוס CANCELED והשדה paymentInformation.prepaymentStatus שמוגדר כ-PREPAYMENT_REFUNDED. כך Google תדע שההחזר הכספי על הפיקדון בוצע.

לדוגמה, אפשר לשלוח בקשה אל:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

עם גוף בקשה:

JSON
{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "CANCELED"
    "paymentInformation": {
      "prepaymentStatus": "PREPAYMENT_REFUNDED"
    }
    
}

דרישה לכרטיס אשראי

יכול להיות ששירות מסוים ידרוש כרטיס אשראי כאימות נוסף של זהות המשתמש. עם זאת, אין להשתמש בו לתשלום מראש, להפקדות או לדמי ביטול. אם אתם צריכים את התרחישים האלה, צריך להגדיר אותם במפורש לפי השלבים שלמעלה. חשוב גם לזכור שדרישה לכרטיס אשראי תביא לרוב לירידה משמעותית במספר ההזמנות של השירות הזה.

כדי לחייב את הלקוחות לספק כרטיס אשראי במהלך התשלום, צריך להגדיר את השדה require_credit_card לערך REQUIRE_CREDIT_CARD_ALWAYS.

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-1-a",
    "name": "Men's haircut",
    "description": "One of our stylists will cut your hair",
    "price": {
        "price_micros": 15000000,
        "currency_code": "USD"
    },
    "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS"
}

שרת הזמנות

כשמעובדים בקשה שכוללת דרישה לכרטיס אשראי, אסימון תשלום מועבר לשרת ההזמנות בקריאה ל-CreateBooking דרך השדה payment_processing_parameters.unparsed_payment_method_token. האסימון הזה מועבר באותו אופן כמו במקרה של תשלום מראש. עם זאת, מאחר שהאסימון מאושר רק לתקופה קצרה, צריך להפעיל את ה-API הרלוונטי של מעבד התשלומים כדי לשדרג את האסימון לגרסה שאפשר לשמור לשימוש במועד מאוחר יותר.

אין צורך במידע נוסף בתגובה מהשרת של Booking, מלבד המידע שנדרש בתרחיש לדוגמה של תשלום על הגעה.

שינוי התמחור ברמת הזמינות

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

  • המחירים יורדים בימי שלישי ועולים בימי שבת.
  • אין עמלות על הצגה אם הזמינות היא בין השעות 17:00 ל-19:00.

בטבלה הבאה מפורט, לכל שיטת תשלום או עמלה, איזה שדה צריך להשתמש בו בפיד הזמינות כדי לשנות את ההגדרה ברמת השירות.

סוג תשלום הגדרת העמלה או המחיר אפשר לשנות אותם?
תשלום עם הגעה Service.price אפשר לשנות את המחיר באמצעות הפניה של Availability.payment_option_id אל Merchant.payment_option
תשלום מראש Service.price אפשר לשנות את המחיר באמצעות הפניה של Availability.payment_option_id אל Merchant.payment_option
ללא עמלת הצגה Service.no_show_fee Availability.no_show_fee
הפקדה Service.deposit Availability.deposit
דרישה לכרטיס אשראי Service.require_credit_card Availability.require_credit_card

לתשומת ליבכם: כדי לשנות את המחיר ברמת הזמינות, תחילה צריך להגדיר אפשרות תשלום ברמת המוכר. בנוסף, במדריך איך מוסיפים חלונות ביטול ברמת הזמינות מוסבר איך מוסיפים חלונות ביטול.