Developer · TEF & PINPad

Zintegruj TEF.

Twoja działalność stacjonarna
wzmocniona dzięki IOPAY

Zwiększ sprzedaż widoczną poprzez zakończenie TEF! Wprowadź do swojej operacji siłę kontroli zarządzania technologią Iopay

TEF lokalny + operacja IOPAY
APP
Włoszek integracyjny Twoja Aplikacja PDV + APIs + webhooks IOPAY
jego system
IO
Włoski Oferta i ich wykorzystanie Konta · transakcja · aktywacja · webhooks
IOPAY
SDK
Wyroby lokalne SDK / Server TEF komunikacja z terminalem
lokalne
PIN
Urządzenie fizyczne PINPad / terminal Interakcja z kartą i nosicielem
TEF
01 · Przegląd

Integracja podzielona na dwie dobrze określone warstwy.

TEF widoczny odbywa się lokalnie pomiędzy Twoja Aplikacja, Zoop i PINPad. Jednakże operacja płatności nadal jest zintegrowana z IOPAY. To zachowuje jedną warstwę do konta, zarządzania transakcjami, aktywacji terminału, wydarzeń i webhooks.

✓
Główne zasady architektury

Użyj Zoop Desktop SDK lub Zoop Desktop Server do lokalny TEF. Wciąż używaj IOPAY APIs + webhooks do końca cyklu operacyjnego i transakcyjnego.

Wykrycie widoczne Zoop SDK / Server

Komunikacja lokalna między PDV, SDK i PINPad.

Włoski IOPAY

Akredytacja, konto, aktywacja terminału, transakcja i webhooks.

Integracja klienta Twoja Aplikacja

Utrzymuje swoje APIs i webhooks IOPAY i dodaje wprowadzanie TEF lokalny.

02 · Zobowiązania

Kto co robi w integracji.

Poniższe oddzielenie uniemożliwia wykorzystanie komponentu Zoop do wykonywania lokalnych zdjęć do zamiany głównej integracji operacyjnej.

Wydział Odpowiedzialność w projekcie
Twoja Aplikacja Zintegrowanie wychwytywania TEF z Zoop Desktop SDK lub Desktop Server oraz utrzymanie integracji z APIs i webhooks IOPAY.
IOPAY Akredytacja zakładu, konto, aktywacja portalu przez terminal, webhooks i przepływ transakcyjny operacji.
SDK / Server Zoop Lokalna warstwa wychwytywania TEF i komunikacja między Twoja Aplikacja a PINPad.
PINPad / terminal Urządzenie fizyczne odpowiedzialne za interakcję z kartą i nosicielem podczas wychwytu.
IO
Dashboard w dokumentacji Zoop

W przypadku tego modelu integracji, w każdym przypadku, gdy przepływ aktywacji Zoop wymaga potwierdzenia tokena w dashbordowej, operacyjne połączenie musi zostać zakończone w Portal IOPAY → Terminale płatnicze → Dodać terminal.

03 · Wybór integracji

SDK Embedded lub Desktop Server.

Istnieją dwa udokumentowane sposoby wdrożenia lokalnej warstwy. Obie zachowują tę samą architekturę IOPAY do kont, aktywacji i wydarzeń.

Właściwie
Strona główna Zoop Desktop SDK

Biblioteka wbudowana do Twojej aplikacji. Wskazuje się, kiedy PDV może bezpośrednio zużywać wtyczkę i kontrolować lokalną komunikację z termyną.

B.
Dokumentowana alternatywa Zoop Desktop Server

Lokalny obsługa w tle. Twoja Aplikacja rozmawia z nim przez WebSocket, zwykle w ws://localhost:1337.

04 · Quickstart

Od pustych projektów do pierwszej płatności w pięciu krokach.

01

Przygotuj projekt i terminal

Sprawdź z IOPAY terminal i środowisko testowe. Wystarczy skonfigurować repozytorium Maven Zoop, wybrać odpowiedni artefakt dla swojej platformy - JVM, Android lub KMP - i dodać pomocne zależności wskazane w oficjalnej dokumentacji. Wykorzystaj wersję uzgodnioną do projektu.

Gradle · przykład JVM
implementation(
    "br.zoop.pos.plugin:zoop-pos-plugin-desktop-jvm:X.Y.Z"
)
!
GitHub Packages ≠ płatności

Pobieranie pakietów może wymagać użytkownika GitHub i PAT z uprawnieniem do odczytu. Dostęp ten jest wyłącznie do rozwoju/ dystrybucji artefatu i jest oddzielony od uwierzytelniania terminale.

02

Wstąpienie bez płatności

W pierwszej aktywacji uruchomić Zoop bez bloków i podłączyć DesktopPlugin. W JVM należy również podać dane aplikacji, gdy są wymagane przez wersję SDK; blok application nie ma zastosowania do Androida.

Kotlin · pierwsza aktywacja
Zoop.initialize(context)

val desktopPlugin = DesktopPlugin(
    Zoop.constructorParameters()
)

Zoop.plug(desktopPlugin)
03

Zarządzaj tokenem i połączaj w portalu IOPAY

Wytwórz żądanie aktywacji z createDashboardActivationRequestBuilder()treat the tokenCallback i wysyłać wniosek z Zoop.post(). Pokaż token operatorowi i użyj go w portalu IOPAY w Terminały płatności → Dodawanie terminału. Następnie poczekaj na potwierdzenie z powrotem SDK.

Kotlin · struktura aktywacji
val activationRequest =
    ZoopFoundationPlugin
        .createDashboardActivationRequestBuilder()
        .tokenCallback(/* receber e exibir o token */)
        .confirmCallback(/* persistir dados confirmados */)
        .build()

Zoop.post(activationRequest)
04

Przestań aktywować i automatycznie uwierzytelniaj

Nie confirmCallback, zapisać dane zwrócone przez aktywację. W kolejnych inicjacjach użyj go ponownie marketplace, seller i accessKey. Aktywacja jest dokonywana raz na urządzenie, dopóki dane te pozostają ważne i dostępne.

Struktury logiczne · bezpieczne przechowywanie
{
  "marketplace": "<retornado-na-ativacao>",
  "seller": "<retornado-na-ativacao>",
  "accessKey": "<retornado-na-ativacao>"
}
05

Wykonaj pierwszą płatność

Przed sprzedażą potwierdź obecność klucza transakcyjnego w PINPadzie. Teraz tworz sprzedaż z DesktopPlugin.createPaymentRequestBuilder(), informuje o wartości w pieniądzach, stosownych modalitetach i częściach oraz traktuje wiadomości, sukces, porażkę i zakończenie przepływu.

✓
Bez ręcznego zapisu danych płatniczych

Twoja Aplikacja nie musi poprosić ani wstępnie wprowadzać kluczy płatniczych do uruchomienia każdego terminalu. Dane techniczne wykorzystane w następujących inicjacjach są uzyskiwane w czasie aktywacji i utrzymywane przez aplikację.

05 · SDK Embedded

Zoop Desktop SDK zintegrowany bezpośrednio z PDV.

W tym podejściu składnik wychwytu znajduje się w Twoja Aplikacja. Plugin lokalnie rozmawia z PINPadem, podczas gdy operacja nadal jest powiązana z infrastrukturą IOPAY.

Wykonane po aktywacji

Po tym jak marketplace, seller i accessKey jeśli zostały odzyskane i utrzymane, użyj tych wartości w czasie uruchomienia do ponownego uruchomienia SDK. Nie należy je wpisywać ręcznie przez operatora.

Kotlin · późniejsza inicjacja
Zoop.initialize(context) {
    credentials {
        marketplace = storedMarketplace
        seller = storedSeller
        accessKey = storedAccessKey
    }
}

val desktopPlugin = DesktopPlugin(
    Zoop.constructorParameters()
)

Zoop.plug(desktopPlugin)

Stan integracji

Pierwsze wykonanie Aktywacja

Uruchamia bez uwierzytelniania, generuje token i czeka na połączenie przez portal IOPAY.

Persystancja Wyróżnienie

Twoja Aplikacja przechowuje marketplace, seller i accessKey w bezpiecznej formie.

Wkrótce wykonywane Samoutomacja

Przechowywane dane są ponownie wykorzystywane bez ponownego zapisu przez operatora.

06 · Aktywacja

Token powstaje w SDK i związek jest zakończony w IOPAY.

Aktywacja łączy urządzenie z prawidłowym kontem. Ten krok musi nastąpić przed pierwszą transakcją i musi być testowany również po ponownym uruchomieniu Twoja Aplikacja.

1
Gerowanie tokenu

Twoja Aplikacja poprosi o aktywację komponentu Zoop i otrzymuje tymczasowy token.

2
Portal IOPAY

Token jest informowany pod Terminami płatności → Dodawanie terminalu.

3
Potwierdzenie

SDK zwraca dane, które Twoja Aplikacja musi utrzymać na przyszłych uruchomieniach.

!
Nie wystawiaj danych o aktywacji

Przechowuj zwrócone dane w bezpieczny sposób. Unikaj marketplace, seller i accessKey na ekranie użytkownika, dziennikach aplikacji, otwartej telemetrii lub dumpsów debugowych.

07 · Pierwsza płatność

Sprawdź klucz transakcyjny przed opłatą.

Klucz transakcyjny Zoop musi znajdować się w PINPad, aby dokonywać płatności kartą. W przypadku nieobecności, włączyć IOPAY w celu koordynacji poprawy z dostawcą urządzenia.

!
PINPad bez klucza transakcyjnego nie jest gotowy do sprzedaży

Nie traktuj braku klucza jako błędu odzyskiwalnego wyłącznie przez oprogramowanie w PDV. Terminal musi być uporządkowany przed transakcją.

Przykład płatności za pomocą karty

Kotlin · SDK Desktop
val paymentRequest = DesktopPlugin
    .createPaymentRequestBuilder()
    .amount(1000)              // R$ 10,00 — valor em centavos
    .option(Option.CREDIT)
    .installments(2)
    .referenceId("pedido-84217")
    .callback(/* tratar sucesso e falha */)
    .build()

Zoop.post(paymentRequest)

Używaj również pośrednich wiadomości z przepływu, aby wyświetlić operatorom instrukcje, takie jak zbliżenie, wprowadzenie lub odczytywanie karty. Powrót lokalny pozwala PDV śledzić, co dzieje się w terminalu.

Co pozostaje wynikiem

Wykrycie transactionId

Powiązać lokalną transakcję z zamówieniem i operacją towarzyszącą IOPAY.

Wyróżnienie NSU + kod

Zachowaj NSU i zwrócony kod uprawnień do połączenia i wsparcia.

Spróbujące Dane dotyczące odbioru

Zachowaj dane dowodowe dostępne w wersji SDK w użyciu.

I
Nie używaj słowa "stop przepływu" jako synonimu zatwierdzenia

/Zadzwonienie onComplete oznacza, że przepływ zakończył się, nawet w przypadku awarii. Uważaj, że płatność została zatwierdzona wyłącznie w oparciu o odpowiedni powodziny i koreluj wynik z transakcją IOPAY.

08 · Desktop Server

Alternatywa za pośrednictwem lokalnego WebSocket.

Zoop Desktop Server działa jak lokalna usługa i wystawia WebSocket na Twoja Aplikacja. Jego celem pozostaje wychwytywanie TEF. Akredytacja, konto, webhooks i przepływ transakcji pozostają na platformie IOPAY.

01

/ Wstawić i uruchomić obsługę

Uzyskaj instalator w oficjalnych wydaniach Zoop. W instalacjach Windows i Linux opisanych w podręczniku, przygotować Java/JDK 17, weryfikuj z java -version i utrzymuj serwer w biegu na stacji podłączonej do PINPad.

Terminal
java -version
02

łączyć aplikację

Gdy Twoja Aplikacja i Desktop Server znajdują się na tej samej maszynie, podłącz się do adresu lokalnego poniżej. Rozwiąż otwarcie, wiadomości, błędy i zamknięcie zasłony.

WebSocket
ws://localhost:1337
JavaScript · przykład połączenia
const socket = new WebSocket('ws://localhost:1337');

socket.onopen = () => {
    console.log('Desktop Server conectado');
};

socket.onmessage = (event) => {
    const message = JSON.parse(event.data);
    handleZoopMessage(message);
};

socket.onerror = (error) => {
    handleSocketError(error);
};

socket.onclose = () => {
    handleSocketClosed();
};
03

Zacznij aktywowanie

Wysyłaj {"type":"activation"}. Kiedy serwer odpowiada statusem tokenprzekaż pole token i zakończenie połączenia w portalu IOPAY. Zatrzymaj status success.

JSON · aktywacja
{
  "type": "activation"
}

W sukcesie, trwaj marketplace, seller i accessKey do kolejnych inicjacji.

04

Zacznij odzyskiwać dane

/Wysyłaj wiadomość initialize używając dokładnie wartości przechowywanych po aktywacji. W polu devicePort jest opcjonalny; jeśli nie zostanie wykryty, serwer może automatycznie wykryć PINPad. Czekaj. status: success przed zezwoleniem na transakcje.

JSON · inicjalizacja
{
  "type": "initialize",
  "marketplace": "<valor recebido na ativacao>",
  "seller": "<valor recebido na ativacao>",
  "accessKey": "<valor recebido na ativacao>"
}
05

Wdrożyć połowy w PDV

Korzystaj z schematów JSON udokumentowanych przez Desktop Server do lokalnych poleceń do przechowywania i traktuj wszystkie zwroty. Odpowiedź lokalna służy do prowadzenia eksperymentu w PINPad; zarządzanie transakcjami i webhooks kontynuuje IOPAY.

I
Znaczniki JSON są wypełniane w runtime

<valor recebido na ativacao> to dane utrzymywane przez aplikację. To nie jest informacja, którą operator powinien wpisać przy każdym uruchomieniu.

09 · APIs & webhooks

Twoja Aplikacja nadal odbiera zdarzenia z IOPAY.

Dodanie TEF nie zmienia umowy integracji asynchronicznej: Twoja Aplikacja nadal otrzymuje webhooks z IOPAY z każdego wydarzenia i transakcji zgodnie z umową integracji. SDK/Server zwrot lokalny uzupełnia doświadczenie PDV; nie eliminuje warstwy zdarzeń IOPAY.

Warstwo zdarzeń IOPAY

Transakcje, aktualizacje operacyjne i wydarzenia integracyjne.

Konfigurowany punkt końcowy Twoja Aplikacja

Utrzymuje swój webhook punkt końcowy i koreluje wydarzenia z żądania, terminalem i lokalną transakcją.

Zalecany model korelacji

Wniosek referenceId

Wykorzystaj własny identyfikator, aby połączyć płatność z wnioskiem Twoja Aplikacja, gdy jest ona dostępna.

Ławienie transakcjaId / NSU

Przechowuj identyfikatory zwrócone przez tok lokalny terminal.

Nieprzydatne wydarzenie Webhook IOPAY

Aktualizuj status operacji z wydarzeniami otrzymanymi przez integrację IOPAY.

✓
/Jedną warstwę wydarzeń /do Twojej aplikacji

Komponent TEF jest lokalny, ale Twoja Aplikacja nie musi opuszczać już istniejącego przepływu APIs i webhooks IOPAY. Kontynuuj ważenie webhooks dla każdego zdarzenia i transakcji podczas homologacji.

10 · błędy & odwołania

Naucz się na błędy przed zatwierdzeniem.

Nie waż się tylko scenariuszem zatwierdzenia Pilota musi rozważyć błędy komunikacyjne, upływ tokenu, przerwę podczas wychwytu, ponowne uruchomienie aplikacji i odwołania

SDK Odwołanie spółdzielni

W przypadku gdy jest to stosowane do lokalnego przepływu, użyj dowodów udokumentowanych przez SDK do przerwania/odwołania bieżącej operacji.

Desktop Server JSON Commands

Serwer posiada własne przepływy odwołania i wiadomości stanu. Rozpoczęcie, wybór, sukces, porażka i zakończenie należy traktować zgodnie z dokumentacją używanej wersji.

!
Rozbudowa transakcji × status transakcyjny

Wprowadzenie do obrotu w ramach systemu operacyjnego IOPAY Przed powtórzeniem pobierania po nieprawidłowej komunikacji potwierdź prawdziwy stan transakcji w celu uniknięcia podwójności.

11 · Bezpieczeństwo

Dane aktywacyjne powinny pozostawać poza interfejsem i logami.

marketplace, seller i accessKey są częścią technicznego uruchomienia urządzenia. Twoja Aplikacja powinien je chronić i automatycznie je używać po aktywacji.

Persystancja Ochrona w zakresie przechowywania

Wykorzystaj odpowiedni mechanizm lokalny dla platformy i ograniczaj dostęp do procesów, które naprawdę potrzebują danych.

Obserwowalność Bez sekretów w log

Nie zapisuj accessKey lub równoważnych danych w logach, śladowych, błędnych wiadomościach lub analitykach.

Operatywny UX Nie ma odtwarzania

Aktywacja jest techniczna. Operator nie powinien potrzebować kopiowania danych do sprzedaży.

12 · Apologacja

Checklist przed zwolnieniem pilota.

✓
Wykorzystanie w ramach programu IOPAY

Akredytacja, konto i przepływ transakcyjny kontynuuje się przez platformy IOPAY, a webhooks jest ważna dla wydarzeń i transakcji integracji.

✓
Terminal związany z rachunką w walucie

Potwierdź połączenie w Terminalu płatności → Dodaj terminal i uruchomi Twoja Aplikacja w celu sprawdzenia wykorzystania zapisanych danych.

✓
Wynik prawidłowo rozpatrywanej płatności

Wyświetla wiadomości SDK, różni sukcesy po prostu zakończenia przepływu i zachowuje transactionId, NSU, kod autoryzacji i dowody/ dane odbioru.

✓
Błędy i odwołania wprowadzone

Test nieprzydatności komunikacji, wygaśnięcia tokenu, przerwania przechowywania i odwołania w przepływie IOPAY i w warstwie lokalnej, gdzie to stosowne.

✓
Przygotowany PINPad

Potwierdź obecność klucza transakcyjnego przed pierwszą sprzedażą. Jeżeli nie ma go, włącz IOPAY w celu koordynacji korekty z dostawcą.

✓
Bezpieczna wytrzymałość

Informacje o aktywacji przechowywane w sposób chroniony i pozbawione ekranu, logów i niewłaściwej telemetrii.

13 · Referencje

Oficjalna dokumentacja do wdrożenia.

Użyj poniższych wytycznych jako odniesienia technicznego do wersji komponentu zainstalowanej w projekcie. Parametry, kompatybilność, wersje i protokoły mogą się zmieniać; zawsze potwierdź oficjalną dokumentację podczas wdrażania.

I
Baza techniczna tej strony

Przepływ został skonstruowany na podstawie technicznego przewodnika IOPAY dotyczącego integracji TEF i publicznych referencji Zoop. Użyj zatwierdzonej wersji projektu i potwierdź pełne parametry w oficjalnych przewodnikach w momencie wdrożenia.

Gotowy do zatwierdzenia pierwszego terminala?

Uruchomić token przez SDK lub Desktop Server, połączyć terminal z portłem IOPAY i zatwierdzić pełny przepływ - local capture, transaction i webhooks - przed kontynuowaniem produkcji.