Konfigurowanie płatności

Platforma Zarezerwuj z Google obsługuje różne konfiguracje płatności. Przewodnik po włączaniu płatności obejmuje aspekty integracji, które są wspólne dla wszystkich integracji płatności, w tym:

  1. Konfigurowanie plików danych w taki sposób, aby zawierały tokenization_parameter informacje
  2. Aktualizowanie serwera rezerwacji, aby akceptował obiekty payment_method_token
  3. Omówienie informacji wymienianych między użytkownikiem, Zarezerwuj z Google, partnerem / sprzedawcą i firmą obsługującą płatności.

Z tego przewodnika dowiesz się, jak skonfigurować pliki danych, aby określić typy konfiguracji płatności obowiązujące Twoich sprzedawców i usługi.

  1. Brak płatności / płatność przy przyjeździe
  2. Pełna przedpłata
  3. Bez opłaty za udział w programie / opłaty za anulowanie
  4. Wpłata

Wszystkie przypadki użycia płatności są rozszerzeniami do przypadków braku płatności / płatności za przyjazd (które nie wymagają konfiguracji płatności), więc w tym samouczku zaczniemy od opisania tej konfiguracji i traktowania innych konfiguracji jako rozszerzeń.

W każdej sekcji omówiono pola, które można śledzić na serwerze rezerwacji, aby zaakceptować konkretną konfigurację płatności.

Brak płatności / płatność przy przyjeździe

W przypadku usług, które nie wymagają żadnej płatności w chwili rezerwacji, na poziomie sprzedawcy lub usługi nie jest wymagana żadna konfiguracja. Ceny są nadal wymagane.

To jest podstawowa konfiguracja usługi, która zawiera nazwę, opis i cenę. Oto jedna wiadomość usługi w 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"
    }
}

W przypadku obsługi płatności po otrzymaniu zamówienia na serwerze rezerwacji nie jest wymagana dodatkowa konfiguracja niż standardowa implementacja.

Przedpłata

Ta konfiguracja określa, że w momencie rezerwacji usługa musi zostać zapłacona w całości.

Przedpłata jest określana na poziomie usługi w polu prepayment_type w Service. Aby wymagać płatności za usługę, ustaw tę wartość na REQUIRED jak w przykładzie poniżej. Pamiętaj, że cena jest podana w taki sam sposób jak w przypadku płatności za dostawę. W związku z tym, że ustawiamy przedpłatę jako wymagany, zbieramy dane karty kredytowej, a ta cena jest pobierana w momencie płatności.

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

Serwer rezerwacji

Przyjmując przedpłatę, token płatności jest przekazywany do serwera rezerwacji w wywołaniu metody CreateBooking przez pole payment_processing_parameters.unparsed_payment_method_token. Musisz podać dokładnie kwotę podaną w polu ceny w plikach danych. Musisz też użyć waluty określonej w tych plikach. Te obciążenia powinny być zgodne z procedurą opisaną w Przewodniku po płatnościach.

W przypadku zwracania pola CreateBookingResponse należy ustawić pole booking.payment_information w sposób odzwierciedlający, że przedpłata została zrealizowana i przetworzona.

Specyfikacja PaymentInformation zawiera pełną dokumentację wszystkich informacji o płatnościach. Poniżej znajdziesz krótki przykład przetwarzania przedpłat. Ważne jest, aby cena zwrócona w polu ceny dokładnie odpowiadała cenie podanej w żądaniu. Poza tym, jeśli w plikach danych lub żądaniu określono stawkę podatku, musisz też podać ją dokładnie.

Pamiętaj też, że musisz podać identyfikator transakcji. Identyfikator transakcji musi być co najmniej unikalny wśród transakcji z tym sprzedawcą. Dobrym kandydatem do osiągnięcia identyfikatora transakcji jest identyfikator transakcji przekazany przez firmę obsługującą płatności.

JSON

{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
}

Opłata za niestawienie się

Opłaty za niestawienie się mogą być naliczane, jeśli użytkownik nie zrezygnuje z rezerwacji lub jeśli anuluje rezerwację. Jeśli nie określisz okresu anulowania, domyślnie zostanie użyta godzina rozpoczęcia przedziału czasu.

Aby określić opłatę za niestawienie się, w pliku danych o usługach należy wypełnić pole no_show_fee, jak w tym przykładzie:

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

W powyższym przykładzie partner lub sprzedawca jest upoważniony do pobierania stałej opłaty w wysokości 25 USD, jak określono w polu no_show_fee.fee.price_micros, jeśli klient nie umawia się na spotkanie. Może ona też zostać naliczona, jeśli użytkownik anuluje subskrypcję w ciągu 4 godzin (14 400 sekund) przed spotkaniem, zgodnie z polem scheduling_rules.min_advance_online_canceling.

Aby dowiedzieć się, jak na poziomie dostępności nie można zdefiniować opłat za programy, zajrzyj do tej sekcji.

Serwer rezerwacji

Podczas przetwarzania żądania, które obejmuje opłatę za niestawienie się, w polu payment_processing_parameters.unparsed_payment_method_token token serwera płatności jest przekazywany do serwera rezerwacji w wywołaniu adresu CreateBooking. Token jest przekazywany w taki sam sposób jak w przypadku przedpłaty. Ponieważ token jest autoryzowany tylko przez krótki czas, musisz wywołać odpowiedni interfejs API firmy obsługującej płatności, aby uaktualnić ten token do wersji, którą możesz później wykorzystać. Jest to opisane w sekcji przewodnika po płatnościach poświęconej procesowi wyświetlania tokena opłat za niewyświetlanie.

Zwracając CreateBookingResponse, musisz ustawić pole booking.payment_information tak, aby było to zgodne ze stanem opłaty za niestawienie się, tak jak w przykładzie poniżej.

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

Zwróć uwagę, że atrybut no_show_fee odzwierciedla cenę i strukturę opłaty, która może być naliczona. Pamiętaj, że podobnie jak w przypadku przedpłat, w tej wiadomości wymagany jest element transaction_id.

Pamiętaj, że w przypadku aktualizacji w czasie rzeczywistym należy przesłać wartość booking_id ustawioną w polu CreateBookingResponse, która musi zostać wysłana podczas pobierania opłaty za niestawienie się. Ten identyfikator powinien być przechowywany wraz z informacjami o rezerwacji.

Aktualizacje w czasie rzeczywistym

Jeśli użytkownik nie zarezerwuje pobytu zgodnie z harmonogramem lub anulujesz rezerwację po upływie okresu anulowania (np. kontaktując się bezpośrednio z Tobą), możesz opcjonalnie obciążyć podaną opłatę za niestawienie się, korzystając z danych karty zapisanych w chwili rezerwacji. Jeśli pobierasz opłaty za niestawienie się, musisz przesłać aktualizację w czasie rzeczywistym z informacją, że opłata za niestawienie się nie została pobrana.

W przypadku rezerwacji utworzonych przez użytkownika CreateBooking należy przesłać aktualizację na adres notification.partners.bookings.patch. W treści tej prośby powinna znajdować się zaktualizowana rezerwacja, której stan to NO_SHOW_PENALIZED. Ten stan informuje Google o obciążeniu płatnością.

Na przykład można wysłać prośbę do:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

W treści żądania:

JSON

{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "NO_SHOW_PENALIZED"
}

Wpłata

Depozyty są używane do pobierania początkowej opłaty jako wymogu rezerwacji. Kaucje mogą być pobierane w momencie rezerwacji lub w późniejszym czasie. Może być konieczne zdefiniowanie warunków, na które zwracany jest zwrot środków, oraz terminu anulowania rezerwacji online.

Aby określić wpłatę, w pliku danych o usłudze należy uwzględnić pole deposit, jak w tym przykładzie:

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

W tym przykładzie min_advance_online_canceling definiuje okres anulowania, a deposit.min_advance_cancellation_sec określa, kiedy wpłata ma być zwrócona. W powyższym przykładzie wpłata może określać czas anulowania niezależnie od warunków zwrotu. W takim przypadku użytkownik będzie mógł anulować usługę online do 24 godzin wcześniej (86 400 sekund). Dzięki temu sprzedawca zostanie poinformowany bezpośrednio o opóźnieniach anulowania zamówienia. Użytkownik może jednak otrzymać zwrot środków w wysokości nawet 4 godziny (14 400 sekund) przed dokonaniem rezerwacji (kontaktując się z Tobą lub sprzedawcą, aby anulować zamówienie). Informacje o tym zostaną podane w momencie płatności i w e-mailu z potwierdzeniem.

Aby dowiedzieć się, jak można definiować wpłaty na poziomie dostępności, przeczytaj tę sekcję.

Serwer rezerwacji

Podczas przetwarzania żądania obejmującego wpłatę token płatności jest przekazywany do pola CreateBooking przez serwer rezerwacji w polu payment_processing_parameters.unparsed_payment_method_token. Token jest przekazywany w taki sam sposób jak w przypadku przedpłaty. Jeśli obciążymy Cię zaliczkami lub wyjmujesz blokadę w momencie rezerwacji, możesz to zrobić w trakcie tej prośby.

Jeśli zamierzasz później uregulować wpłatę, ponieważ token jest autoryzowany tylko przez krótki czas, musisz wywołać odpowiedni interfejs API firmy obsługującej płatności, aby uaktualnić ten token do wersji, którą możesz później wykorzystać. Jest to opisane w sekcji przewodnika po płatnościach poświęconej procesowi dodawania tokenów.

Zwracając CreateBookingResponse pole booking.payment_information, musisz prawidłowo przywrócić stan wpłaty, tak jak w przykładzie poniżej.

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

Pamiętaj, że wpłata odzwierciedla cenę i strukturę wpłaty, która zostanie pobrana lub wstrzymana. Pamiętaj, że podobnie jak w przypadku przedpłat, w tej wiadomości wymagany jest element transaction_id.

Aktualizacje w czasie rzeczywistym

Jeśli użytkownik anuluje rezerwację przed upływem okresu anulowania wpłaty, musisz zwrócić wszystkie wpłacone środki, które zostały obciążone na kartę użytkownika. Gdy zwracasz środki, musisz wysłać aktualizację w czasie rzeczywistym, która wskazuje, że wpłata została zwrócona.

W przypadku rezerwacji utworzonych przez użytkownika CreateBooking należy przesłać aktualizację na adres notification.partners.bookings.patch. W treści żądania powinna znajdować się zaktualizowana rezerwacja, której stan to CANCELED, a pole paymentInformation.prepaymentStatus ustawione na PREPAYMENT_REFUNDED. Dzięki temu Google wie, że wpłata została zwrócona.

Na przykład można wysłać prośbę do:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

W treści żądania:

JSON

{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "CANCELED"
    "paymentInformation": {
      "prepaymentStatus": "PREPAYMENT_REFUNDED"
    }
    
}

Wymagaj karty kredytowej

Usługa może wymagać podania karty kredytowej jako dodatkowej weryfikacji tożsamości użytkownika. Nie należy go jednak używać do dokonywania przedpłaty, zaliczek ani opłat za programy. Jeśli te przypadki użycia są wymagane, należy je skonfigurować w opisany powyżej sposób. Pamiętaj też, że podanie karty kredytowej często powoduje znaczny spadek liczby rezerwacji w tej usłudze.

Aby podczas płatności wymagane było podanie karty kredytowej, w polu require_credit_card ustaw wartość 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"
}

Serwer rezerwacji

Podczas przetwarzania żądania zawierającego wymagania dotyczące karty kredytowej w polu payment_processing_parameters.unparsed_payment_method_token token serwera płatności jest przekazywany do serwera rezerwacji w wywołaniu adresu CreateBooking. Token jest przekazywany w taki sam sposób jak w przypadku przedpłaty. Ponieważ token jest autoryzowany tylko przez krótki czas, musisz wywołać odpowiedni interfejs API firmy obsługującej płatności, aby uaktualnić ten token do wersji, którą możesz później wykorzystać.

W odpowiedzi serwera serwera rezerwacji nie są wymagane żadne dodatkowe informacje poza przypadkiem użycia płatności po otrzymaniu zamówienia.

Zastępowanie ceny na poziomie dostępności

We wszystkich powyższych przykładach struktura cen i opłat jest określona na poziomie usługi. W większości przypadków należy użyć ceny na poziomie usługi. W niektórych przypadkach warto jednak zmienić strukturę płatności w przypadku określonych przedziałów dostępności. Na przykład zastąpienie cen lub opłat na poziomie dostępności może polegać na tych sytuacjach:

  • Ceny we wtorki są tańsze, a w soboty wzrastają.
  • W godzinach 17:00–19:00 nie są dostępne żadne opłaty za pokazy.

W tabeli poniżej znajduje się pole każdej metody płatności / opłaty, które należy użyć w pliku danych o dostępności, aby zastąpić definicję na poziomie usługi.

Forma płatności Definicja opłaty / ceny Zastąpić?
Zapłać po przyjeździe Service.price Cena może zostać zastąpiona Availability.payment_option_id przez odwołanie Merchant.payment_option
Przedpłata Service.price Cena może zostać zastąpiona Availability.payment_option_id przez odwołanie Merchant.payment_option
Brak opłaty za udział w programie Service.no_show_fee Availability.no_show_fee
Wpłata Service.deposit Availability.deposit
Wymagaj karty kredytowej Service.require_credit_card Availability.require_credit_card

Pamiętaj, że aby zastąpić cenę na poziomie dostępności, musisz najpierw zdefiniować opcję płatności na poziomie sprzedawcy. Wskazówki dotyczące dodawania okresów anulowania na poziomie dostępności znajdziesz w przewodniku o dodawaniu okien anulowania.