다양한 결제 유형 설정

Actions Center 플랫폼은 결제를 위한 다양한 구성을 지원합니다. 결제 사용 설정 가이드에서는 다음을 비롯하여 모든 결제 통합에 공통적인 통합의 여러 측면을 다룹니다.

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

이 가이드에서는 판매자와 서비스에 적용할 수 있는 다양한 결제 구성 유형을 지정하기 위해 피드를 구성하는 방법을 자세히 설명합니다.

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

예약 서버

선불 결제를 수락하면 CreateBooking 호출 시 payment_processing_parameters.unparsed_payment_method_token 필드를 통해 결제 토큰이 예약 서버에 전달됩니다. 피드의 가격 필드를 통해 지정된 금액을 정확하게 청구하고 피드에 지정된 통화를 사용해야 합니다. 이러한 요금은 결제 사용 설정 가이드에 설명된 흐름을 따라야 합니다.

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초) 전에 취소하는 경우에도 이 수수료가 청구될 수 있습니다.

이용 가능 여부 수준에서 예약 불이행 수수료를 정의하는 방법을 알아보려면 이 섹션을 참고하세요.

예약 서버

예약 불이행 수수료가 포함된 요청을 처리할 때 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"
}

입금

보증금은 예약 요건으로 초기 청구액을 징수하는 데 사용됩니다. 보증금은 예약 시 또는 나중에 청구할 수 있습니다. 보증금을 환불할 수 있는 약관과 온라인에서 예약을 취소할 수 있는 시점을 정의해야 할 수도 있습니다.

보증금을 지정하려면 아래 예와 같이 서비스 피드에 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초 전)까지 보증금을 환불받을 수 있습니다. 예약 전 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를 호출하여 이 토큰을 나중에 사용할 수 있는 버전으로 업그레이드해야 합니다.

예약 서버 응답에 도착 시 결제 사용 사례 이외의 추가 정보는 필요하지 않습니다.

가용성 수준에서 가격 재정의

위의 모든 예시에서 가격 / 수수료 구조는 서비스 수준에서 지정됩니다. 대부분의 경우 이 서비스 수준 가격을 사용해야 합니다. 하지만 경우에 따라 특정 이용 가능 시간대의 결제 구조를 변경하는 것이 좋습니다. 예를 들어 다음과 같은 상황은 이용 가능 여부 수준에서 가격 / 수수료를 재정의하여 처리할 수 있습니다.

  • 화요일에는 가격이 인하되고 토요일에 인상됩니다.
  • 오후 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
입금 Service.deposit Availability.deposit
신용카드 필요 Service.require_credit_card Availability.require_credit_card

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