“通过 Google 预订”平台支持各种付款方式。启用付款指南涵盖了所有付款集成通用的集成方面,包括:
- 配置 Feed 以包含
tokenization_parameter
信息 - 更新预订服务器以接受
payment_method_token
对象 - 用户、“通过 Google 预订”、合作伙伴 / 商家和付款处理方之间交换的信息概览。
在本指南中,我们将更详细地介绍如何配置 Feed 来指定哪些不同类型的付款配置适用于您的商家和服务。
- 无需付款 / 到店付款
- 全额预付款
- 违约金 / 取消费
- 押金
付款的所有用例都是无付款/到达付款用例的扩展(不需要付款配置),因此本教程首先将描述该配置并将其他配置视为扩展程序。
每个部分中还将介绍要在预订服务器中跟踪以便接受特定付款配置的字段。
无需付款 / 到店付款
对于预订时不需要付款的服务,商家或服务级别不需要付款配置。不过,仍然必须提供价格。
这是服务的基准配置,其中包含名称、说明和价格。这将是 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" }
预订服务器
接受预付款时,系统会将付款令牌通过 payment_processing_parameters.unparsed_payment_method_token
字段传递给 CreateBooking
调用中的预订服务器。您需要准确收取通过 Feed 中的价格字段指定的金额,并且必须使用 Feed 中指定的币种。这些费用应遵循启用付款指南中所述的流程。
返回 CreateBookingResponse
时,必须设置 booking.payment_information
字段,以正确反映已提供和处理预付款。
PaymentInformation
规范包含所有付款方式选项的完整文档。下面提供了处理预付款的最低要求示例。请务必确保价格字段中返回的价格与请求中指定的价格完全一致。此外,如果您在 Feed/请求中指定税率,则还必须准确包含该税率。
另请注意,您必须提供交易 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" } }
违约金
如果用户未参加预订或在取消期限之后取消预订,则可能需要支付违约金。如果未指定取消窗口,则默认为空档的开始时间。
如需指定违约金,请在服务 Feed 中添加 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 美元收取固定费率费用。如 scheduling_rules.min_advance_online_canceling
字段中所述,如果用户在预约开始前 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" } "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" }
押金
押金用于收取初始费用作为预订要求。系统会在您预订时或之后收取押金。您可能需要指定押金可退款的期限,以及何时可以在线取消预订。
如需指定存款,应在服务 Feed 中添加 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
发送更新。此请求的正文应为更新后的预订,其状态设置为 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" }
预订服务器
处理包含信用卡要求的请求时,付款令牌会通过 payment_processing_parameters.unparsed_payment_method_token
字段传递到 CreateBooking
调用中的预订服务器。此令牌的传递方式与预付款一样。不过,由于令牌的授权时间很短,因此您必须调用付款处理方的相关 API,以将此令牌升级为您可以稍后使用的版本。
除了“按入住付费”用例之外,预订服务器响应中不需要任何其他信息。
在可用性级别替换价格
在上述所有示例中,价格 / 费用结构都是在服务级别指定的。在大多数情况下,应使用这种服务级价格。不过,在某些情况下,有必要更改某些可用性空档的付款结构。例如,您可以通过在可用性级别替换价格 / 费用来处理以下情况:
- 周二降价,周六上调。
- 下午 5:00 至晚上 7:00 之间不收取任何表演费用。
下表列出了每种付款 / 费用方法在可用性 Feed 中要用于替换服务等级定义的字段。
付款方式 | 费用 / 价格定义 | 是否可替换? |
---|---|---|
到店付款 | Service.price
|
价格可通过 Availability.payment_option_id 引用 Merchant.payment_option 进行替换 |
预付款 | Service.price
|
价格可通过引用 Merchant.payment_option 的 Availability.payment_option_id 替换 |
违约金 | Service.no_show_fee
|
Availability.no_show_fee
|
押金 | Service.deposit
|
Availability.deposit
|
需要信用卡 | Service.require_credit_card
|
Availability.require_credit_card
|
请注意,如需在库存状况级别替换价格,您必须先在商家级别定义付款方式。此外,如需获得在可用性级别添加取消期的指南,请参阅如何添加取消窗口指南。