결제 구성

Google 예약 플랫폼은 결제를 위한 다양한 구성을 지원합니다. 결제 사용 설정 가이드에서는 다음을 포함하여 모든 결제 통합에 공통된 통합의 측면을 설명합니다.

  1. tokenization_parameter 정보를 포함하도록 피드 구성
  2. payment_method_token 객체를 허용하도록 예약 서버 업데이트
  3. 사용자, Google 예약, 파트너 / 판매자, 결제 대행업체 간에 교환되는 정보의 개요입니다.

이 가이드에서는 피드를 구성하여 판매자 및 서비스에 적용할 수 있는 서로 다른 결제 구성 유형을 지정하는 방법을 자세히 설명합니다.

  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의 고정 요금을 청구할 권한이 있습니다. scheduling_rules.min_advance_online_canceling 필드에 명시된 바와 같이 사용자가 예약 시간 4시간 (14, 400초) 이내에 취소하는 경우에도 이 수수료가 청구될 수 있습니다.

이용 가능 여부 수준에서 프로그램 수수료를 정의할 수 없는 방법을 확인하려면 이 섹션을 참고하세요.

예약 서버

예약 불이행 수수료가 포함된 요청을 처리할 때 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시간 (86, 400초) 전에 온라인으로 서비스를 취소할 수 있습니다. 이를 통해 판매자는 모든 지연 취소에 대해 직접 알 수 있습니다. 하지만 예약 전 4시간(14, 400초 전)까지 사용자가 보증금을 환불받을 수 있으며 (취소를 위해 판매자 또는 판매자에게 문의), 결제 시의 조건과 확인 이메일에 표시됩니다.

이용 가능 여부 수준에서 보증금을 정의하는 방법을 알아보려면 이 섹션을 참고하세요.

예약 서버

보증금이 포함된 요청을 처리할 때 결제 토큰이 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 사이에는 이용료가 부과되지 않습니다.
  • 선임 스타일리스트가 제공하는 서비스는 주니어 서비스보다 더 비쌉니다.

아래 표에는 각 결제 / 수수료 방법에 대해 서비스 수준 정의를 재정의하기 위해 이용 가능 여부 피드에서 사용할 필드가 나와 있습니다.

지급 방식 수수료 / 가격 정의 재정의 가능 여부
도착 시 결제 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
입금 Service.deposit Availability.deposit
신용카드 필요 Service.require_credit_card Availability.require_credit_card

재고 수준에서 가격을 재정의하려면 먼저 판매자 수준에서 결제 옵션을 정의해야 합니다. 또한 이용 가능 여부 수준에 취소 기간을 추가하는 방법에 관한 안내는 취소 기간을 추가하는 방법 가이드를 참고하세요.