異なるお支払いタイプを設定する

Actions Center プラットフォームは、さまざまな支払い方法の設定をサポートしています。支払いの有効化ガイドでは、すべての支払い統合に共通する統合の側面について説明しています。

  1. tokenization_parameter 情報を含めるようにフィードを構成する
  2. payment_method_token オブジェクトを受け入れるように予約サーバーを更新
  3. ユーザー、Actions Center、パートナー / 販売者、決済代行業者間でやり取りされる情報の概要。

このガイドでは、フィードを構成して、販売者とサービスに適用されるさまざまな種類のお支払い設定のいずれかを指定する方法について詳しく説明します。

  1. 支払いなし / 現地での支払い
  2. 全額前払い
  3. 無断キャンセル料 / キャンセル料
  4. Deposit

支払いのユースケースはすべて、支払いなし / 到着時支払いのユースケース(支払い構成を必要としない)の拡張です。このチュートリアルでは、まずその構成について説明してから、他の構成を拡張として扱います。

各セクションでは、特定のお支払い構成を承認するために予約サーバーで追跡するフィールドについても説明します。

支払いなし / 現地での支払い

予約時に支払いを必要としないサービスの場合、販売者またはサービスレベルで支払いの設定は必要ありません。ただし、価格は必須です。

これは、名前、説明、価格を含むサービスのベースライン構成です。これは、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"
}

予約サーバー

前払いを承認する場合、支払いトークンは CreateBooking の呼び出しで payment_processing_parameters.unparsed_payment_method_token フィールドを介して予約サーバーに渡されます。フィード内の価格フィールドで指定された金額を正確に請求し、フィードで指定された通貨を使用する必要があります。これらの請求は、支払いの有効化ガイドに記載されているフローに沿って行われます。

CreateBookingResponse を返す場合は、前払いが提供され処理されたことを適切に反映するように booking.payment_information フィールドを設定する必要があります。

PaymentInformation 仕様には、すべてのお支払い情報オプションの詳細なドキュメントが記載されています。前払いの処理の最小限の例を以下に示します。price フィールドで返される価格が、リクエストで指定された価格と完全に一致していることが重要です。また、フィードまたはリクエストで税率が指定されている場合は、その税率も正確に含める必要があります。

また、取引 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 ドルの固定料金を請求できます。この料金は、scheduling_rules.min_advance_online_canceling フィールドで指定されているように、予約の 4 時間前(14, 400 秒)以内にユーザーがキャンセルした場合にも請求される場合があります。

空き状況レベルで無断キャンセル料を定義する方法については、こちらのセクションをご覧ください。

予約サーバー

ノーショー料金を含むリクエストを処理する場合、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 に設定された更新された予約が含まれている必要があります。このステータスは、請求が行われたことを示します。

たとえば、リクエストは次の宛先に送信できます。

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

デポジットは、予約の要件として初期費用を徴収するために使用されます。デポジットは、予約時または後で請求できます。デポジットの払い戻し条件や、オンラインで予約をキャンセルできる場合を定義する必要があります。

デポジットを指定するには、サービスフィードに次の例のように 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 時間前(86, 400 秒)までにオンラインでサービスを解約できます。これにより、キャンセルが遅れた場合は販売者に直接通知されます。ただし、ユーザーは予約の 4 時間前(14,400 秒)まで、デポジットの払い戻しを受けることができます(キャンセルについては、お客様または販売者に連絡してください)。このことは、購入手続き時の利用規約と確認メールに記載されています。

可用性レベルでデポジットを定義する方法については、このセクションをご覧ください。

予約サーバー

デポジットを含むリクエストを処理する場合、支払いトークンは 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 を呼び出して、このトークンを後で使用できるように保存できるバージョンにアップグレードする必要があります。

予約サーバーのレスポンスには、到着時支払いのユースケース以外の追加情報は必要ありません。

可用性レベルでの価格のオーバーライド

上記の例ではすべて、料金 / 料金体系が Service レベルで指定されています。ほとんどの場合、このサービスレベルの料金を使用する必要があります。ただし、特定の空き時間帯のお支払い構造を変更することが理にかなっている場合もあります。たとえば、次の状況は、アベイラビリティ レベルで料金 / 手数料をオーバーライドすることで処理できます。

  • 火曜日は料金が割引になり、土曜日は料金が割り増しになります。
  • 午後 5 時から午後 7 時の空き状況には、無断キャンセル料は適用されません。

次の表に、支払い / 料金方法ごとに、サービスレベルの定義をオーバーライドするために在庫フィードで使用するフィールドを示します。

お支払い方法 料金 / 価格の定義 オーバーライド可能
現地での支払い Service.price 価格は、Merchant.payment_option を参照する Availability.payment_option_id でオーバーライドできます。
一括前払い Service.price 価格は、Merchant.payment_option を参照する Availability.payment_option_id によってオーバーライドできます。
無断キャンセル料 Service.no_show_fee Availability.no_show_fee
Deposit Service.deposit Availability.deposit
クレジット カード必須 Service.require_credit_card Availability.require_credit_card

空き状況レベルで価格をオーバーライドするには、まず販売者レベルで支払いオプションを定義する必要があります。また、空き状況レベルでキャンセル期間を追加する方法については、キャンセル期間を追加する方法のガイドをご覧ください。