设置不同的付款方式

Actions Center 平台支持各种付款配置。“启用付款”指南介绍了所有付款集成中共有的集成方面的内容,包括:

  1. 将 Feed 配置为包含 tokenization_parameter 信息
  2. 更新预订服务器以接受 payment_method_token 对象
  3. 用户、Actions 中心、合作伙伴 / 商家和付款处理方之间交换的信息概览。

在本指南中,我们将详细介绍如何配置 Feed,以指定哪些不同类型的付款配置适用于您的商家和服务。

  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"
}

预订服务器

接受预付款时,系统会通过 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 美元的费用。如果用户在预约前的 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"
}

押金

押金用于收取初始费用,这是预订的一项要求。可在预订时或稍后收取押金。您可能需要指定在哪些条款下可退还押金,以及何时可以在线取消预订

要指定存款,您应在服务 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发送更新。此请求的正文中应该是更新后的预订,其中状态设置为 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: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

请注意,如需在库存状况级别替换价格,您必须先在商家级别定义付款方式。此外,如需有关在可用性级别添加取消窗口的指导,请参阅如何添加取消窗口指南。