設定付款功能

「透過 Google 預訂」平台支援不同的付款設定。「啟用付款指南」說明整合所有付款整合作業的整合層面,包括:

  1. 設定動態饋給以加入 tokenization_parameter 資訊
  2. 正在更新預訂伺服器以接受 payment_method_token 物件
  3. 總覽使用者、「透過 Google 預訂」、「合作夥伴 / 商家」和付款處理方之間交換的資訊。

本指南將詳細說明如何設定動態饋給,指定適合您商家和服務適用的多種付款設定類型。

  1. 不需付款 / 抵達時付款
  2. 全額預付
  3. 不收取手續費 / 取消費
  4. 訂金

所有付款用途都是「無付款/提前付款」用途 (不需要付款設定) 的擴充功能,因此本教學課程一開始會說明設定,並將其他設定視為擴充功能。

每個部分也會涵蓋在預訂伺服器中追蹤的欄位,以便接受特定的付款設定。

不需付款 / 抵達時付款

如果服務在預訂時不需要任何付款,則商家或服務層級不需要任何付款設定。不過,您仍須提供價格。

這是服務的基本設定,其中包含名稱、說明和價格。這會是 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"
    }
}

在預訂伺服器中,除了標準導入之外,其他設定皆不需使用其他設定,以便於抵達時付款。

預付款

這項設定用於指定服務金額在預訂時必須支付全額費用。

您可以透過 Serviceprepayment_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_tokenCreateBooking 呼叫,傳送到您的預訂伺服器。您必須按照動態饋給中的價格欄位指定正確的金額,而且必須使用動態饋給中指定的貨幣。這些費用應遵循啟用付款指南中所述的流程。

傳回 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。此要求的主體應為更新的預訂,狀態則設為 CANCELEDpaymentInformation.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

請注意,您必須先在商家層級定義付款選項,才能在供應層級覆寫價格。另外,如需有關在可用性層級新增取消時段的相關指引,請參閱如何新增取消回溯期指南。