「透過 Google 預訂」平台支援不同的付款設定。「啟用付款指南」說明整合所有付款整合作業的整合層面,包括:
- 設定動態饋給以加入
tokenization_parameter
資訊 - 正在更新預訂伺服器以接受
payment_method_token
物件 - 總覽使用者、「透過 Google 預訂」、「合作夥伴 / 商家」和付款處理方之間交換的資訊。
本指南將詳細說明如何設定動態饋給,指定適合您商家和服務適用的多種付款設定類型。
- 不需付款 / 抵達時付款
- 全額預付
- 不收取手續費 / 取消費
- 訂金
所有付款用途都是「無付款/提前付款」用途 (不需要付款設定) 的擴充功能,因此本教學課程一開始會說明設定,並將其他設定視為擴充功能。
每個部分也會涵蓋在預訂伺服器中追蹤的欄位,以便接受特定的付款設定。
不需付款 / 抵達時付款
如果服務在預訂時不需要任何付款,則商家或服務層級不需要任何付款設定。不過,您仍須提供價格。
這是服務的基本設定,其中包含名稱、說明和價格。這會是 ServiceFeed
中的單一 Service 訊息:
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" } }
在預訂伺服器中,除了標準導入之外,其他設定皆不需使用其他設定,以便於抵達時付款。
預付款
這項設定用於指定服務金額在預訂時必須支付全額費用。
您可以透過 Service
的 prepayment_type
欄位,在服務層級指定預付。如要要求使用服務付費,請將這個屬性設為 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" }
Booking Server (預訂伺服器)
接受預付款時,付款權杖會透過呼叫 payment_processing_parameters.unparsed_payment_method_token
的 CreateBooking
呼叫,傳送到您的預訂伺服器。您必須按照動態饋給中的價格欄位指定正確的金額,而且必須使用動態饋給中指定的貨幣。這些費用應遵循啟用付款指南中所述的流程。
傳回 CreateBookingResponse
時,必須設定 booking.payment_information
欄位,以正確反映已提供並處理預付款項。
PaymentInformation
規格包含完整的付款資訊選項的完整說明文件。下方提供處理預付款項的最低範例。價格欄位傳回的價格必須與要求中指定的價格完全相符。此外,如果在動態饋給/要求中指定了稅率,則必須一併加入該稅率。
另請注意,您必須提供交易 ID。此交易 ID 不得與商家與該交易的交易不得重複。交易 ID 適合使用交易處理方提供的交易 ID。
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" } }
在上面範例中,如果預約持有人不參加會議,合作夥伴或商家有權向 no_show_fee.fee.price_micros
欄位收取 25 美元的固定費用。如果使用者在預約前 4 小時 (14400 秒) 內取消,如 scheduling_rules.min_advance_online_canceling
欄位所指定,
他們可能也必須支付這筆費用。
請參閱本節,瞭解在可用性層級如何定義節目費。
Booking Server (預訂伺服器)
處理包含未收取手續費的要求時,系統會透過 payment_processing_parameters.unparsed_payment_method_token
欄位,在呼叫 CreateBooking
時將付款權杖傳送至您的預訂伺服器。這個憑證的傳送方式與預付案例相同。但是,由於這個權杖只有一段時間的授權,因此您必須呼叫付款處理方的相關 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
。
另請注意,CreateBookingResponse
中設定的 booking_id
為必填欄位,這是在收取無節目費時必須傳送的即時更新。此 ID 應連同預訂資訊一併儲存。
即時更新
如果使用者未到來的預訂時間取消,或是在取消期滿後取消訂閱 (例如直接與您聯絡),您可以選擇使用您在預訂時儲存的付款資訊,支付指定的不收取手續費。您收取未收取的表演費時,必須傳送即時更新,指明未收取任何表演費。
如果預訂項目是由 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 小時 (86400 秒) 取消線上服務。如此能確保商家能直接收到任何延遲取消通知。不過,使用者還是有機會在預訂前 4 小時 (14400 秒) 內將存款退還給您 (需聯絡您或商家以便取消),同時會顯示在結帳條款和確認電子郵件中。
如要瞭解可用層級如何定義存款,請參閱本節的說明。
Booking Server (預訂伺服器)
處理包含存款的要求時,系統會透過 payment_processing_parameters.unparsed_payment_method_token
欄位,在對 CreateBooking
的呼叫中傳送付款權杖。這個憑證的傳送方式與預付案例相同。如果您在預訂時已扣款或解除扣款,可以在執行這項要求時這麼做。
如果您之後想收取這筆扣款,因為這個憑證只有短期的授權,您就必須呼叫付款處理方的相關 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" }
Booking Server (預訂伺服器)
處理包含信用卡要求的請求時,系統會透過 payment_processing_parameters.unparsed_payment_method_token
欄位,在呼叫 CreateBooking
時將付款權杖傳送至您的預訂伺服器。這個憑證的傳送方式與預付案例相同。但是,由於這個權杖只有一段時間的授權,因此您必須呼叫付款處理方的相關 API,將憑證升級至日後仍可使用的版本。
除了抵達後付款的情況以外,預訂伺服器回應中不需要任何其他資訊。
在可用性層級覆寫定價
在上述所有範例中,價格 / 費用結構是在服務層級指定。在大部分情況下,應使用這項服務層級的定價。但是,在某些情況下,變更某些供應時段的付款結構也是合理的做法。舉例來說,如果在可用性層級覆寫價格 / 費用,即可處理下列情況:
- 週二降價,週六則調漲。
- 下午 5:00 至晚上 7: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
|
請注意,您必須先在商家層級定義付款選項,才能在供應層級覆寫價格。另外,如需有關在可用性層級新增取消時段的相關指引,請參閱如何新增取消回溯期指南。