Action Center 平台支持各种付款配置。启用付款指南介绍了所有付款集成都通用的集成方面,包括:
- 配置 Feed 以包含
tokenization_parameter
信息 - 更新了预订服务器以接受
payment_method_token
对象 - 用户、Action Center、合作伙伴 / 商家和付款处理方之间交换信息的概览。
在本指南中,我们将详细介绍如何配置 Feed,以指定哪种类型的付款配置适用于您的商家和服务。
- 无付款 / 到店付款
- 全额预付款
- 无违约金 / 取消费
- 押金
所有付款用例都是“无付款/到店付款”用例(无需付款配置)的扩展,因此本教程将首先介绍该配置,并将其他配置视为扩展。
每个部分还将介绍要在预订服务器中跟踪的字段,以便接受特定的付款配置。
无付款 / 到店付款
对于在预订时无需付款的服务,无需在商家或服务级别进行任何付款配置。不过,价格仍是必填项。
这是服务的基本配置,其中包含名称、说明和价格。这将是 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" } }
除了标准实现之外,您无需在预订服务器中进行其他配置即可支持到店付款。
预付
此配置用于指定必须在预订时全额支付服务费用。
预付款是在服务级别通过 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" }
预订服务器
接受预付款时,系统会在调用 CreateBooking
时通过 payment_processing_parameters.unparsed_payment_method_token
字段将付款令牌传递给您的预订服务器。您必须收取 Feed 中价格字段中指定的金额,并且必须使用 Feed 中指定的币种。这些扣款应遵循启用付款指南中所述的流程。
返回 CreateBookingResponse
时,必须设置 booking.payment_information
字段,以正确反映已提供并处理预付款。
PaymentInformation
规范包含有关所有付款信息选项的完整文档。以下是一个处理预付款的最小示例。请务必确保 price 字段中返回的价格与请求中指定的价格完全一致。此外,如果 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 美元固定费用。如果用户在预约前 4 小时(14400 秒)内取消预约,系统也可能会收取此费用,如 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
。
另请注意,在收取违约金时,必须发送实时更新,而 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 秒)内,用户仍可以通过与您或商家联系取消预订来获得押金退款,这将在结账时显示的条款和确认电子邮件中体现出来。
如需了解如何在播出信息级别定义押金,请参阅此部分。
预订服务器
在处理包含预付款的请求时,系统会在调用 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" } "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,将此令牌升级为可保留以供日后使用的版本。
除了到店付款用例之外,预订服务器响应中不需要其他信息。
在播出信息级别替换价格
在上述所有示例中,价格 / 费用结构都是在服务级别指定的。在大多数情况下,应采用这种服务等级价格。不过,在某些情况下,更改特定空房情况的付款结构是合理的。例如,您可以通过在空房情况一级替换价格 / 费用来处理以下情况:
- 价格在星期二会降低,在星期六会上调。
- 对于下午 5:00 至 7:00 之间的空房情况,不收取违约金。
下表列出了每种付款 / 费用方法在空房情况 Feed 中要使用哪个字段来替换服务等级定义。
付款方式 | 费用 / 价格定义 | 是否可替换? |
---|---|---|
到店付款 | 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
|
请注意,如需在可用性级别替换价格,您必须先在商家级别定义付款方式。此外,如需有关在空房情况一级添加取消时间范围的指导,请参阅如何添加取消时间范围指南。