다양한 결제 유형 설정

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

예약 서버

선불을 수락하면 결제 토큰이 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를 호출하여 이 토큰을 나중에 사용할 수 있도록 유지할 수 있는 버전으로 업그레이드해야 합니다. 자세한 내용은 결제 사용 설정 가이드의 No-Show 수수료 토큰 흐름 섹션을 참고하세요.

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시에서 오후 7시 사이의 이용 가능 시간에는 예약 불이행 수수료가 적용되지 않습니다.

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

결제 유형 수수료 / 가격 정의 재정의 가능 여부
도착 시 결제 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

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