Ustawianie różnych form płatności

Platforma Centrum działań obsługuje różne konfiguracje przyjmowania płatności. Przewodnik dotyczący włączania płatności opisuje aspekty integracji, które są wspólne dla wszystkich integracji płatności, w tym:

  1. Konfigurowanie plików danych z uwzględnieniem informacji typu tokenization_parameter
  2. Aktualizuję serwer rezerwacji, aby akceptował obiekty payment_method_token
  3. Przegląd informacji wymienianych między użytkownikiem, Centrum działań, partnerem lub sprzedawcą oraz podmiotem przetwarzającym płatności.

W tym przewodniku szczegółowo opiszemy, jak konfigurować pliki danych, aby określać, które typy konfiguracji płatności są odpowiednie dla Twoich sprzedawców i usług.

  1. Brak płatności / płatność po przyjeździe
  2. Pełna przedpłata
  3. Opłata za niestawienie się / opłata za anulowanie
  4. Wpłata

Wszystkie przypadki użycia związane z płatnościami to rozszerzenia przypadków braku płatności lub płatności po przyjeździe (które nie wymagają konfiguracji płatności). W tym samouczku zaczniesz od opisania tej konfiguracji i traktowania innych konfiguracji jako rozszerzeń.

Każda sekcja zawiera też pola, które należy śledzić na serwerze rezerwacji w celu akceptowania konkretnej konfiguracji płatności.

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

W przypadku usług, za które nie są pobierane żadne opłaty w momencie rezerwacji, na poziomie sprzedawcy ani usługi nie jest wymagana konfiguracja płatności. Podanie cen nadal jest wymagane.

Jest to podstawowa konfiguracja usługi, która zawiera nazwę, opis i cenę. To będzie pojedyncza wiadomość usługi w obrębie 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"
    }
}

Do obsługi płatności po przyjeździe na serwerze rezerwacji nie jest wymagana żadna dodatkowa konfiguracja poza standardową implementacją.

Przedpłata

Ta konfiguracja służy do określenia, że kwota za usługę musi być wpłacona w całości w momencie rezerwacji.

Przedpłata jest określana na poziomie usługi w polu prepayment_type w Service. Aby wymagać płatności za usługę, ustaw wartość REQUIRED, jak w przykładzie poniżej. Cena jest określona tak samo jak w przykładzie płatności za przyjazd. Ustawiamy tutaj typ przedpłaty na wymagany, dlatego dokonamy płatności kartą kredytową, którą będziemy mogli pobrać 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

Podczas akceptowania przedpłat token płatności jest przekazywany do serwera rezerwacji w wywołaniu CreateBooking w polu payment_processing_parameters.unparsed_payment_method_token. Musisz pobrać dokładnie kwotę podaną w polu ceny w plikach danych i musisz użyć waluty podanej w tych plikach. Obciążenia te powinny być zgodne z procedurą opisaną w przewodniku po włączaniu płatności.

Przy zwracaniu CreateBookingResponse pole booking.payment_information musi być ustawione tak, aby odzwierciedlało fakt, że przedpłata została przekazana i przetworzona.

Specyfikacja PaymentInformation zawiera pełną dokumentację wszystkich opcji informacji o płatności. Poniżej znajdziesz minimalny przykład przetwarzania przedpłaty. Ważne jest, aby cena zwrócona w polu ceny dokładnie odpowiadała cenie określonej w żądaniu. Dodatkowo, jeśli stawka podatku jest określona w plikach danych lub w żądaniu, musisz ją dokładnie podać.

Musisz też podać identyfikator transakcji. Ten identyfikator transakcji musi być co najmniej unikalny wśród transakcji realizowanych z tym sprzedawcą. Dobrym kandydatem do podania identyfikatora transakcji jest identyfikator transakcji podany 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ę

Użytkownik może zostać obciążony opłatą za niestawienie się, jeśli nie weźmie udziału w rezerwacji lub jeśli zrezygnuje on po upływie okresu anulowania. Jeśli nie określisz okresu anulowania, domyślnie zostanie użyta godzina rozpoczęcia przedziału.

Aby określić opłatę za niestawienie się, w pliku danych o usługach dodaj pole no_show_fee, jak pokazano 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 pobrania opłaty ze stałą opłatą w wysokości 25 USD, zgodnie z danymi w polu no_show_fee.fee.price_micros, jeśli osoba umówiona nie weźmie udziału w spotkaniu. Opłata może zostać naliczona również wtedy, gdy użytkownik anuluje rezerwację w ciągu 4 godzin (14 400 sekund) przed spotkaniem, zgodnie z informacjami w polu scheduling_rules.min_advance_online_canceling.

Aby dowiedzieć się, jak określić opłaty za niestawienie się na poziomie dostępności, zapoznaj się z tą sekcją.

Serwer rezerwacji

Podczas przetwarzania żądania zawierającego opłatę za niestawienie się token płatności jest przekazywany do serwera rezerwacji w wywołaniu CreateBooking w polu payment_processing_parameters.unparsed_payment_method_token. Token jest przekazywany tak samo jak w przypadku przedpłaty. Token jest jednak autoryzowany tylko przez krótki czas, więc musisz wywołać odpowiedni interfejs API firmy obsługującej płatności, aby uaktualnić go do wersji, którą możesz zachować później. Odpowiednie informacje znajdziesz w przewodniku po włączaniu płatności, dotyczącym przepływu tokenów opłat za niestawienie się.

Przy zwracaniu CreateBookingResponse pole booking.payment_information musi być skonfigurowane tak, aby prawidłowo odczytywało stan opłaty za niestawienie się, 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"
    }
}

Pamiętaj, że wartość no_show_fee jest ustawiona tak, aby odzwierciedlać cenę i strukturę opłaty, która może zostać pobrana. Pamiętaj też, że podobnie jak w przypadku przedpłaty, w tej wiadomości wymagany jest element transaction_id.

Pamiętaj też, że pole booking_id ustawione w CreateBookingResponse jest wymagane w przypadku aktualizacji w czasie rzeczywistym, które muszą być wysyłane w przypadku opłaty za niestawienie się. Powinien on być przechowywany razem z informacjami o rezerwacji.

Aktualizacje w czasie rzeczywistym

Jeśli użytkownik nie pojawi się na miejscu w czasie zaplanowanej rezerwacji lub anuluje rezerwację po upływie okresu anulowania (np. kontaktując się bezpośrednio z Tobą), możesz opcjonalnie pobrać określoną opłatę za niestawienie się, korzystając z danych karty zapisanych w momencie rezerwacji. Jeśli pobierasz opłatę za niestawienie się, musisz przesłać aktualizację w czasie rzeczywistym z informacją, że opłata za niestawienie się została pobrana.

W przypadku rezerwacji utworzonych przez użytkownika CreateBooking należy wysłać aktualizację na adres notification.partners.bookings.patch. W treści tej prośby powinna znajdować się zaktualizowana rezerwacja ze stanem NO_SHOW_PENALIZED. Ten stan informuje Google o dokonaniu obciążenia.

Żądanie może na przykład zostać wysłane do:

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

Z treścią żądania:

JSON

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

Wpłata

Wpłata służy do pobrania opłaty początkowej jako wymogu rezerwacji. Zaliczka może zostać pobrana w momencie rezerwacji lub w późniejszym czasie. Konieczne może być określenie warunków zwrotu zaliczki oraz możliwości anulowania rezerwacji online.

Aby określić wpłatę, w pliku danych o usługach dodaj pole deposit, jak pokazano 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 określa okres anulowania, a deposit.min_advance_cancellation_sec określa, kiedy kaucja podlega zwrotowi. W powyższym przykładzie wpłata może określać czas anulowania niezależnie od warunków zwrotu środków. W tym przypadku użytkownik może anulować usługę online z maksymalnie 24-godzinnym wyprzedzeniem (86 400 sekund). Dzięki temu sprzedawca zostanie bezpośrednio poinformowany o ewentualnych opóźnieniach w anulowaniu zamówienia. Użytkownik może jednak nadal kwalifikować się do otrzymania zwrotu zaliczki do 4 godzin przed dokonaniem rezerwacji (14 400 sekund) przed dokonaniem rezerwacji (po skontaktowaniu się z Tobą lub sprzedawcą w celu anulowania rezerwacji), co zostanie uwzględnione w warunkach podczas płatności i w e-mailu z potwierdzeniem.

Aby dowiedzieć się, jak można definiować depozyty na poziomie dostępności, zapoznaj się z tą sekcją.

Serwer rezerwacji

Podczas przetwarzania żądania zawierającego kaucję token płatności jest przekazywany do serwera rezerwacji w wywołaniu CreateBooking w polu payment_processing_parameters.unparsed_payment_method_token. Token jest przekazywany tak samo jak w przypadku przedpłaty. Jeśli zapłacisz zaliczkę lub zdejmiesz blokadę w momencie rezerwacji, możesz to zrobić w trakcie tej prośby.

Jeśli chcesz później obciążyć 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 zachować do użytku później. Informacje na ten temat znajdziesz w sekcji przewodnika po włączaniu płatności, która dotyczy przepływu tokenów depozytowych.

Po zwróceniu CreateBookingResponse pole booking.payment_information musi prawidłowo odzwierciedlać stan wpłaty, 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 jest ustawiona tak, aby odzwierciedlała cenę i strukturę wpłaty, która zostanie pobrana lub wstrzymana. Pamiętaj też, że podobnie jak w przypadku przedpłaty, w tej wiadomości wymagany jest element transaction_id.

Aktualizacje w czasie rzeczywistym

Jeśli użytkownik anuluje rezerwację przed datą anulowania rezerwacji, musisz zwrócić kaucję pobraną z karty użytkownika. Aby zwrócić środki, musisz przesłać aktualizację w czasie rzeczywistym z informacją, że wpłata została zwrócona.

W przypadku rezerwacji utworzonych przez użytkownika CreateBooking należy wysłać aktualizację na adres notification.partners.bookings.patch. W treści tej prośby powinna znajdować się zaktualizowana rezerwacja ze stanem CANCELED, a pole paymentInformation.prepaymentStatusPREPAYMENT_REFUNDED. Jest to informacja dla Google, że wpłata została zwrócona.

Żądanie może na przykład zostać wysłane do:

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

Z 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ć karty kredytowej jako dodatkowej weryfikacji tożsamości użytkownika. Nie należy jednak korzystać z tej formy płatności w przypadku przedpłaty, wpłat ani braku opłat za pokazywanie danych. Jeśli takie przypadki użycia są wymagane, musisz je skonfigurować w sposób jawny, wykonując czynności opisane powyżej. Pamiętaj też, że wymaganie karty kredytowej często prowadzi do znacznego spadku liczby rezerwacji na tę usługę.

Aby podczas płatności wymagać podawania karty kredytowej, ustaw w polu require_credit_card 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, które zawiera wymóg podawania karty kredytowej, token płatności jest przekazywany do serwera rezerwacji w wywołaniu CreateBooking w polu payment_processing_parameters.unparsed_payment_method_token. Token jest przekazywany tak samo jak w przypadku przedpłaty. Token jest jednak autoryzowany tylko przez krótki czas, więc musisz wywołać odpowiedni interfejs API firmy obsługującej płatności, aby uaktualnić go do wersji, którą możesz zachować później.

W odpowiedzi serwera rezerwacji nie są wymagane żadne dodatkowe informacje poza przypadkiem użycia płatności za przyjazd.

Zastąpienie ceny na poziomie dostępności

We wszystkich powyższych przykładach struktura cena / opłata jest określona na poziomie usługi. W większości przypadków należy użyć tych cen na poziomie usługi. W niektórych przypadkach warto jednak zmienić strukturę płatności dla określonych przedziałów dostępności. Zastąpienie cen / opłat na poziomie dostępności może na przykład obejmować te sytuacje:

  • Ceny są niższe we wtorki i zwiększane w soboty.
  • W przypadku rezerwacji w godzinach 17:00–19:00 nie są naliczane opłaty za wstęp.

W tabeli poniżej znajdziesz pola, których w przypadku każdej metody płatności lub opłat należy użyć w pliku danych dostępności, aby zastąpić definicję poziomu usługi.

Forma płatności Opłata / definicja ceny Czy można zastąpić?
Zapłać po przyjeździe Service.price Cenę można zastąpić przy użyciu odwołania Availability.payment_option_id do Merchant.payment_option
Przedpłata Service.price Cenę można zastąpić, używając odwołania Availability.payment_option_id do Merchant.payment_option
Opłata za niestawienie się 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 Dodawanie okresu anulowania.