設定不同的付款類型

Actions Center 平台支援多種收款設定。「啟用付款功能指南」涵蓋所有付款整合作業的共同整合層面,包括:

  1. 設定動態饋給以納入 tokenization_parameter 資訊
  2. 更新預訂伺服器以接受 payment_method_token 物件
  3. 使用者、行動中心、合作夥伴 / 商家和付款處理方之間交換的資訊概覽。

本指南將進一步說明如何設定動態饋給,以指定適用於商家和服務的不同類型付款設定。

  1. 不付款 / 抵達時付款
  2. 全額預付
  3. 逾時未到費用 / 取消費用
  4. 存款

所有付款用途都是「不付款」/「到達時付款」用途 (不需要付款設定) 的擴充功能,因此本教學課程會先介紹該設定,並將其他設定視為擴充功能。

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

不付款 / 抵達時付款

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

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

除了標準實作項目之外,訂房伺服器不需要額外設定,即可支援到店付款。

預付款

這項設定可用於指定消費者必須在預訂時付清服務費用。

您可以透過 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"
}

預訂伺服器

接受預付款時,系統會透過 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 欄位所述。

如要瞭解如何在可預訂時段層級定義逾時未到費用,請參閱這一節

預訂伺服器

處理含有未到場費用的要求時,系統會透過 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 秒) 內 (透過與您或商家聯絡取消預訂) 申請退還訂金 (退款條件會顯示在結帳時的條款和確認電子郵件中)。

如要瞭解如何在可預訂時段層級定義訂金,請參閱這一節

預訂伺服器

處理含有訂金的付款要求時,系統會透過 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"
}

預訂伺服器

處理含有信用卡規定要求的請求時,系統會透過 payment_processing_parameters.unparsed_payment_method_token 欄位,在呼叫 CreateBooking 時,將付款權杖傳遞至預訂伺服器。這個符記會以預付款情形相同的方式傳遞。不過,由於權杖只會在短時間內授權,因此您必須呼叫付款處理工具的相關 API,將權杖升級為可在日後使用且可保留的版本。

除了預訂到達時付款用途之外,預訂伺服器回應中不需要其他資訊。

在可用性層級覆寫定價

在上述所有範例中,價格 / 費率結構都是在服務層級指定。在大多數情況下,您應使用這項服務等級價格。不過,在某些情況下,變更特定可用時間的付款結構是合理的做法。舉例來說,下列情況可透過在可訂房層級覆寫價格 / 費用來處理:

  • 價格會在週二調降,週六調漲。
  • 下午 5 點至 7 點的預訂時段不收逾時未到費用。

下表列出每種付款 / 費用方式,以及在供應時段動態饋給中用來覆寫服務等級定義的欄位。

付款方式 費用 / 價格定義 是否可覆寫?
抵達時付款 Service.price 價格可透過參照 Merchant.payment_optionAvailability.payment_option_id 覆寫。
預付款 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

請注意,如要覆寫可預訂層級的價格,您必須先在商家層級定義付款方式。此外,如需在可訂房層級新增取消時段的指引,請參閱「如何新增取消時段」指南。