Fintech · kryptowaluty

Payora — gotowa bramka płatnicza w kryptowalutach

Samodzielnie hostowana, niepowiernicza bramka do akceptacji kryptowalut: jedno API, gotowy do użycia checkout oraz podpisane webhooks. Akceptuje USDT i TON bez zabierania kluczy lub funduszy biznesu.

Kategoria
Fintech · kryptowaluty
Szacowany koszt
od 16 000 €
Oś czasu
≈ 3–4 miesiące
Strona internetowa
payora.money ↗
payora.money
Payora
Strona główna projektu — payora.money

01Przegląd projektu

Payora jest bramką płatności kryptowalutowych, którą firma wdraża na własnej infrastrukturze i w pełni kontroluje. W przeciwieństwie do konwencjonalnych dostawców płatności, Payora nigdy nie stoi pomiędzy kupującym a sprzedającym: środki trafiają bezpośrednio na adresy sprzedawcy, a serwer bramki nie przechowuje kluczy prywatnych i nigdy nie kontroluje pieniędzy. Z tego wynikają dwie definiujące cechy opisane w samym produkcie — samo-hostowany (działa na infrastrukturze właściciela) oraz niepowierniczy (twoje klucze, twoje środki).

Pomysł zrodził się z prostej obserwacji: prawie każda usługa online, która musi akceptować kryptowaluty, wynajduje ten sam moduł płatności na nowo. Niektórzy dodają zewnętrznego procesora i płacą opłaty zarówno za transakcje, jak i za wypłaty; inni piszą akceptację "ręcznie", bez webhooków, bez uzgadniania kwot i bez odpowiedniego obsługiwania niedopłat. Payora łączy tę powtarzającą się pracę w jeden produkt: jedno API, gotowy ekran płatności (hostowane zakupy) oraz podpisane webhooki które informują sklep, że płatność została zrealizowana.

Zaprojektowaliśmy i zbudowaliśmy produkt od podstaw — od infrastruktury i architektury po stronę docelową, pulpit sprzedawcy i dokumentację. Poniżej przechodzimy przez problem, który rozwiązuje Payora, jak działa wewnętrznie oraz decyzje inżynieryjne, które sprawiły, że akceptowanie kryptowalut stało się przewidywalne i bezpieczne.

Kontekst ma również znaczenie. Payora nigdy nie miała być jednorazowym widżetem płatności, ale wspólna warstwa płatnościdla całego zestawu projektów: wdroż ją raz, a możesz akceptować kryptowaluty w dowolnej z twoich usług, rejestrując każdą jako osobnego sprzedawcę. To oszczędza dziesiątki godzin przy każdym nowym produkcie i eliminuje dżunglę niekompatybilnych modułów płatności, które zazwyczaj rozprzestrzeniają się na stronach w miarę upływu czasu. Im więcej projektów prowadzi właściciel, tym wyższy zwrot z jednego bramki: jedno miejsce do aktualizacji, jeden model bezpieczeństwa, jeden zestaw statusów we wszystkich z nich.

02Kontekst i problem

Akceptowanie płatności kryptowalutowych jest łatwe "technicznie" — trudna część to zrobienie tego wiarygodnie i powtarzalnie. Gdy rozbiliśmy zadanie na części, ujawnił się cały zestaw problemów, z którymi każdy, kto akceptuje kryptowaluty na własną rękę, się spotyka:

  • Ryzyko powiernicze. Procesory zewnętrzne trzymają środki same w sobie: oznacza to opłaty, limity i ryzyko zamrożenia lub zniknięcia usługi wraz z pieniędzmi.
  • Zduplikowany kod. Na każdej nowej stronie moduł płatności jest pisany od nowa — generowanie adresów, monitorowanie przychodzących przelewów, uzgadnianie kwot, statusy faktur.
  • Niezawodne powiadomienia. Sklep musi natychmiast dowiedzieć się o płatności i ufać źródłu. Ręcznie tworzone "pingi" są łatwe do sfałszowania, a ręczne sprawdzanie blockchaina oznacza obciążenie i opóźnienia.
  • Dopasowanie płatności do faktury.Jeśli wszyscy płacą na jeden adres, ustalenie, kto za co zapłacił, staje się problematyczne.
  • Niedopłaty i nadpłaty.Stawki się zmieniają, użytkownicy zaokrąglają kwotę, sieć pobiera opłatę — potrzebujesz logiki dla płatności częściowych i akceptowalnych odchyleń.

Zadanie było takie: zbudować bramkę, która zdejmuje całą tę rutynę z barków dewelopera sklepu, podczas gdy nie odbiera kontroli nad pieniędzmi. Handlowiec powinien być w stanie zacząć akceptować kryptowaluty w jeden wieczór, a nie w biegu, i nadal mieć pewność, że środki trafiają bezpośrednio do niego.

Osobna warstwa zadania to zaufanie po stronie kupującego. Ekran płatności musi wyglądać na tyle uspokajająco, aby osoba nie bała się wysłać środków: wyraźna kwota, widoczny adres, kod QR i licznik odliczający do wygaśnięcia faktury. Każda niedbałość w tym miejscu bezpośrednio wpływa na zakończenie płatności, dlatego traktowaliśmy proces zakupu nie jako "ekran techniczny", ale jako pełnoprawną część lejka sprzedażowego.

Na koniec była warstwa infrastruktury. Usługa obsługuje pieniądze, co oznacza, że musi działać w przewidywalnym, izolowanym środowisku z wyraźnymi kontrolami dostępu, ważnymi certyfikatami i ochroną perymetralną. W fintech każdy szczegół pozostawiony "na później" zamienia się w incydent, więc wymagania dotyczące środowiska wprowadziliśmy od samego początku, zamiast dostosowywać je pod obciążeniem.

03Cele projektu

Z krótkiego opisu wyrosły konkretne cele produktowe i inżynieryjne, które mieliśmy na uwadze na każdym etapie:

  • Prosta integracja. Połączenie z witryną to jedno żądanie utworzenia faktury i jeden handler webhooka. Nie tysiąc wierszy SDK, ale proste, czytelne REST.
  • Domyślnie niepowierniczy. Prywatne klucze nigdy nie opuszczają strony właściciela. Serwer bramki działa w trybie tylko do odczytu, jeśli chodzi o akceptację funduszy.
  • Gotowy ekran płatności. Dzięki temu sprzedawca nie musi projektować interfejsu płatności — Payora oferuje hostowane płatności z fakturą, adresem, kodem QR i zegarem.
  • Zaufane powiadomienia. Każdy webhook jest podpisany; sklep weryfikuje podpis i nie da się oszukać fałszywym "opłaconym".
  • Przewidywalność.Przejrzyste statusy faktur, przejrzysta logika dla niedopłat i wygaśnięć, idempotencja.
  • Samodzielne hostowanie.Wdrożenie na własnym serwerze z oddzielnymi subdomenami dla API, płatności i administracji.

Te cele zostały celowo sformułowane jako ograniczenia, a nie życzenia. Każde z nich wykluczało nieodpowiednie opcje architektoniczne na etapie projektowania. Na przykład, wymóg braku powierzenia natychmiast wykluczył wszelkie schematy, w których serwer przechowuje klucze; wymóg prostoty integracji odrzucił ciężkie SDK na rzecz przejrzystego HTTP; a wymóg przewidywalności narzucił ścisły model statusu zamiast "magicznego" zachowania. Efektem jest wąski, skoncentrowany produkt — robi jedną rzecz, ale robi to niezawodnie.

04Co zbudowaliśmy

Payora pakietuje akceptację kryptowalut w trzy wyraźne bloki budowlane, które obejmują cały cykl płatności:

Jedno API

Utwórz fakturę, pobierz jej status i uzyskaj szczegóły płatności za pomocą jednego przewidywalnego interfejsu REST.

Hostowana kasa

Gotowa strona płatności z fakturą, adresem, kodem QR, kwotą i zegarem — bez narzutu po stronie sklepu.

Podpisane webhooki

Powiadomienia serwer-serwer o zmianach statusu faktury, kryptograficznie podpisane i weryfikowane przez sklep.

Niekontrolowane jądro

Środki trafiają bezpośrednio na adresy sprzedawcy; brama tylko monitoruje przychodzące przelewy i je raportuje.

Na tym jądrze znajduje się strona docelowa z wyraźnym pozycjonowaniem, panel sprzedawcy do tworzenia projektów i przeglądania faktur oraz dokumentacja, z którą programista może integrować się bez żadnych wywołań. Wszystko to jest wdrażane jako jeden produkt na dedykowanej infrastrukturze.

Kluczowe jest to, że te trzy bloki nie są rozdzielone — tworzą zamkniętą pętlę: API tworzy fakturę, kasa pokazuje ją kupującemu, webhook zwraca wynik do sklepu. Każdy element wie dokładnie tyle, ile potrzebuje i nie wkracza w obszar odpowiedzialności innych. Ta spójność odróżnia bramę od stosu skryptów: integrator nie musi łączyć elementów; pracuje z gotowym przepływem "faktura → płatność → powiadomienie".

Produkt w jednym zdaniu: "Jedno API, gotowa kasa i podpisane webhooki. Samodzielnie hostowane i niekontrolowane: twoje klucze, twoje środki. Przestań przepisywać moduł płatności na każdej stronie."

05Architektura rozwiązania

Payora jest podzielona na kilka subdomen — w ten sposób role i obciążenia są fizycznie oddzielone, a dostęp łatwiej zablokować:

  • payora.money — strona docelowa: pozycjonowanie, dokumentacja dewelopera, punkty wejścia do panelu.
  • api.payora.money — interfejs programistyczny: miejsce, w którym sklepy wywołują tworzenie faktur i sprawdzają ich status.
  • pay.payora.money — zewnętrzna płatność: strona płatności, którą widzi kupujący.
  • admin.payora.money — panel administracyjny i pulpit nawigacyjny sprzedawcy: projekty, klucze, historia faktur, ustawienia webhooków.

To podział nie jest kosmetyczny. Pozwala nam na zastosowanie różnych polityk pamięci podręcznej i bezpieczeństwa dla ekranu płatności i API, izolację obszaru administracyjnego oraz skalowanie lub wydobywanie części niezależnie w razie potrzeby. W tle znajduje się stos serwerowy na PHP 8.3, wdrożony w środowisku zarządzanym przez panel, za Cloudflare (DNS, TLS, ochrona perymetryczna).

Logicznie system składa się z czterech bloków: przyjmowanie żądań (API i walidacja), księgowość faktur (stan, statusy, kwoty i terminy), monitorowanie blockchaina (wykrywanie przelewów na adresy faktur), oraz powiadomienie (budowanie i wysyłanie podpisanych webhooków). Każdy blok posiada swoją część cyklu życia płatności i komunikuje się z innymi przez wyraźne granice.

Podział na subdomeny przynosi również korzyści operacyjne: publicznie dostępna strona docelowa i proces płatności działają oddzielnie od obszaru administracyjnego, którego dostęp można dodatkowo ograniczyć. Jeśli którykolwiek blok stanie się w przyszłości wąskim gardłem — powiedzmy, monitorowanie blockchaina w miarę wzrostu liczby faktur — można go wzmocnić lub wydobyć bez dotykania reszty. Architektura została zaprojektowana z myślą o rozszerzeniach od samego początku, a nie tylko na jednorazowe uruchomienie.

06Jak przebiega płatność

Z punktu widzenia integratora cały proces mieści się w kilku krokach, a większość z nich odbywa się bez udziału sklepu:

  • 1. Tworzenie faktury. Sklep wywołuje API: kwota, waluta, identyfikator zamówienia, adres webhooka. W odpowiedzi — faktura z unikalnymi szczegółami i linkiem do hostowanego procesu płatności.
  • 2. Płatność. Kupujący trafia na ekran płatności Payora: widzi kwotę, adres, kod QR i stoper. Płaci z dowolnego portfela.
  • 3. Wykrywanie transferu.Bramka monitoruje adres faktury i rejestruje przychodzący transfer, porównując kwotę z oczekiwaną i dopuszczając akceptowalne odchylenie.
  • 4. Potwierdzenie.Po wymaganej liczbie potwierdzeń faktura przechodzi do statusu "opłacona".
  • 5. Podpisany webhook.Payora wysyła do sklepu powiadomienie serwerowe z statusu i podpisem; sklep weryfikuje podpis i wykonuje swoją akcję — wydaje towary, doładowuje saldo, przyznaje dostęp.

Kluczowym szczegółem jest idempotencja i zaufanie. Sklep nigdy nie powinien polegać na przekierowaniu użytkownika do strony "dziękujemy za płatność": jedynym źródłem prawdy o pieniądzach jest podpisany webhook z Payora. Dlatego rzeczywiste zaksięgowanie zawsze jest związane z zweryfikowanym powiadomieniem, a nie z akcją w przeglądarce.

Dlaczego to ma takie znaczenie? Przekierowanie jest łatwe do sfałszowania lub po prostu nigdy nie dociera: użytkownik może zamknąć kartę tuż po wysłaniu środków, stracić połączenie lub ręcznie otworzyć stronę "dziękuję" bez płacenia czegokolwiek. Jeśli sklep wydaje towary na podstawie przekierowania, naraża się na nadużycia i straty. Webhook, w przeciwieństwie do tego, przychodzi serwer-do-serwera, jest podpisany tajnym kluczem i odzwierciedla rzeczywisty stan faktury — dlatego to on, i tylko on, służy jako komenda "zwolnienia". Uczyniliśmy tę zasadę wymogiem w dokumentacji, a nie zaleceniem.

07Kluczowe możliwości

Przyjrzyjmy się, co sprawia, że Payora to nie tylko "akceptacja kryptowalut", ale bramka płatnicza klasy produkcyjnej.

Jedno API REST

Cała integracja opiera się na małym zestawie metod: utwórz fakturę, sprawdź jej status, uzyskaj szczegóły płatności. Odpowiedzi są przewidywalne, błędy są czytelne dla maszyn. Programista nie musi pamiętać o specyfice konkretnej sieci — pracuje z pojęciem "faktury", a Payora zajmuje się szczegółami sieci.

Hostowana kasa

Gotowa strona płatności zdejmuje cały ciężar pracy ze sklepu. Na niej kupujący widzi kwotę, adres, kod QR do swojego portfela oraz licznik do wygaśnięcia faktury. Jest to zarówno wygodniejsze dla użytkownika, jak i bezpieczniejsze: bramka sama generuje i wyświetla szczegóły, a sklep nie bierze udziału w pokazywaniu adresu.

Podpisane webhooki

Każde powiadomienie o zmianie statusu faktury jest podpisane tajemnicą sprzedawcy. Sklep weryfikuje podpis po swojej stronie i dopiero wtedy ufa treści. W ten sposób "zapłacono" nie może być sfałszowane, nawet jeśli znany jest adres obsługi.

Logika kwoty i terminu

Stawki się zmieniają, użytkownicy zaokrąglają, sieci pobierają opłatę — więc bramka może pracować z akceptowalnym odchyleniem kwoty, rejestrować częściowe płatności i poprawnie zamykać faktury po wygaśnięciu. To zdejmuje najprzykrą manualną pracę ze sklepu.

Statusy i cykl życia faktury

Faktura w Payora przechodzi przez wyraźny zestaw stanów — od "utworzonej" i "oczekującej na płatność" do "opłaconej", "niedopłaconej" lub "wygasłej". Sklep nie musi zgadywać, co się dzieje: status jest zawsze jednoznaczny, a przejścia między stanami są deterministyczne. Ułatwia to zarówno automatyzację po stronie sklepu, jak i rozwiązywanie sporów w wsparciu — dla każdej faktury można zobaczyć, na jakim etapie się znajduje i dlaczego tam się znalazła.

Idempotencja i niezawodne dostarczanie

Sieć jest zawodna, obsługiwacze się zawieszają, odpowiedzi giną — dlatego powiadomienia są zaprojektowane tak, aby powtórne dostarczenie nie łamało logiki sklepu. Ta sama informacja o płatności może być bezpiecznie przetwarzana kilka razy bez podwójnego kredytowania czegokolwiek. Dla pieniędzy jest to kluczowe: lepiej otrzymać powiadomienie dwa razy i poprawnie je zduplikować, niż stracić jedyne i zostawić klienta bez towaru.

08Bezpieczeństwo i projekt bezdepozytowy

Podstawową zasadą Payora jest nie stawać się depozytariuszem. Pieniądze kupującego trafiają do adresów kontrolowanych przez samą firmę, podczas gdy serwer bramki, po stronie akceptacji, działa w trybie "tylko do obserwacji": może obliczać adresy dla faktur i śledzić przychodzące przelewy, ale nie posiada kluczy prywatnych, które mogłyby być użyte do wydania tych funduszy.

To zmienia model zagrożeń w korzystnym kierunku. Nawet w najgorszym przypadku kompromitacji serwera, atakujący nie ma dostępu do pieniędzy — nie ma nic, co można by "zabrać". Podpisywanie webhooków chroni sklepy przed fałszywymi powiadomieniami, podział subdomeny zawęża powierzchnię ataku, a obwód jest zamknięty przez Cloudflare. Dla firmy oznacza to coś prostego: kontrola nad funduszami pozostaje w ich rękach, a nie w zewnętrznej usłudze.

Na dodatek zastosowaliśmy zasadę najmniejszych uprawnień na poziomie infrastruktury: dedykowane konto systemowe dla całej usługi, separacja ról w subdomenach oraz podpisywanie sekretów, które zna tylko sprzedawca. Im mniej uprawnień i danych ma każdy komponent, tym mniejszy zasięg ewentualnego błędu lub wycieku — a tym spokojniej można obsługiwać produkt, który obsługuje pieniądze.

Kluczowa idea: bezpieczeństwo tutaj nie jest "funkcją dodatkową", ale samym kształtem architektury. Serwer, który fizycznie nie ma prywatnych kluczy akceptacji, nie może ich zgubić — a to jest silniejsze niż jakakolwiek obrona perymetralna.

09TON i USDT: unikalne adresy

Payora akceptuje TON i USDT w sieci TON — szybkie, niskokosztowe aktywa wygodne do płatności online. Ale wspieranie waluty to tylko połowa pracy. Druga, subtelniejsza połowa to jak dopasuj konkretną płatność do konkretnej faktury.

Wybraliśmy ścieżkę unikalny adres na fakturę: dla nowej faktury oddzielny adres odbiorczy jest deterministycznie wyprowadzany. Kiedy transfer tam przychodzi, brama dokładnie wie, do którego zamówienia należy — bez notatek, komentarzy do płatności czy ręcznego dopasowywania, które są tak łatwe do zgubienia. Wyprowadzanie adresów jest zaimplementowane w taki sposób, że serwer nie potrzebuje kluczy prywatnych do akceptacji: oblicza adresy i je monitoruje, pozostając w trybie tylko do odczytu.

Deterministyczne wyprowadzanie dotyczy również możliwości odzyskiwania. Adres każdej faktury można obliczyć ponownie na podstawie oryginalnych parametrów, co oznacza, że system nie zależy od kruchiego "adres ↔ zamówienie": połączenie jest przywracane z logiki wyprowadzania. Dla akceptacji USDT-on-TON i natywnego TON jest to szczególnie wygodne — obie waluty funkcjonują w tej samej sieci, co upraszcza monitorowanie i obniża opłaty w porównaniu do "cięższych" łańcuchów.

Dlaczego to ma znaczenie: "wspólny adres + komentarz" jest częstym źródłem zagubionych płatności. Unikalny adres na fakturę przekształca dopasowywanie w niezawodną operację i eliminuje całą klasę błędów wsparcia.

Payora
Interfejs projektu — Payora

10Niedopłaty, nadpłaty i terminy

W kryptowalutach "dokładnie kwota na fakturze" rzadko przychodzi. Kurs między aktywem a ceną fiat waha się, portfele zaokrąglają, sieć pobiera opłatę, a użytkownik może się pomylić o ułamek. Dlatego brama została zaprojektowana od samego początku wokół idei akceptowalnej odchyłki: mała różnica między oczekiwaną a rzeczywistą kwotą liczy się jako poprawna płatność, a faktura zamyka się czysto.

Jawne niedopłaty i nadpłaty są bardziej skomplikowane. Jeśli przychodzi zauważalnie mniej, faktura otrzymuje odpowiedni status, a sklep decyduje, co zrobić: czekać na doładowanie, zwrócić pieniądze lub zamknąć częściowo. Jeśli przychodzi więcej, ten fakt również jest rejestrowany i przekazywany do sklepu, zamiast być cicho pomijanym. Logika jest zbudowana tak, aby żaden rzeczywisty transfer nie umknął uwadze, a każdy z nich miał jasne rozwiązanie.

Osobną kwestią jest terminy. Faktura ma okno czasowe, w którym może być opłacona; podczas realizacji zamówienia to okno jest widoczne jako timer. Gdy wygasa, faktura przechodzi do statusu "wygasła", co ma znaczenie z dwóch powodów: po pierwsze, stawka w momencie płatności nie "dryfuje" daleko od zablokowanej; po drugie, sklep otrzymuje wyraźny sygnał, że zamówienie może zostać anulowane lub odtworzone. Wszystkie te przejścia — niedopłata, nadpłata, wygaśnięcie — są odzwierciedlane w statusach i w podpisanych webhookach, więc integrator zawsze ma maszynowo czytelny obraz tego, co się dzieje.

Dopuszczalna odchylenie

Mała różnica kwotowa traktowana jest jako poprawna płatność — brak fałszywych "niedopłat".

Częściowa płatność

Jawna niedopłata otrzymuje swój własny status; decyzja pozostaje w gestii sklepu.

Wygasnięcie faktury

Czas życia faktury jest ograniczony przez timer; po wygaśnięciu — status "wygasły" i sygnał do sklepu.

11Panel sprzedawcy i administracja

Aby produkt mógł funkcjonować samodzielnie, sama API nie wystarczy — potrzebujesz interfejsu, w którym sprzedawca zarządza swoimi projektami. W obszarze administracyjnym (admin.payora.money) firma tworzy projekty, uzyskuje klucze i sekret do podpisywania webhooków, konfiguruje adres obsługi i waluty oraz przegląda historię faktur z statusami.

To obejmuje codzienne scenariusze bez angażowania dewelopera bramki: utwórz nowy projekt dla nowej strony, wydaj ponownie klucz, sprawdź, czy konkretna płatność dotarła, zbadaj sporną fakturę. W istocie, pulpit nawigacyjny jest "konsolą" dla wszystkiego, co API robi programowo.

Każdy projekt sprzedawcy jest izolowany: ma swoje własne klucze, własny sekret podpisu, własny zestaw walut i własny adres webhooka. Dzięki temu jeden właściciel może prowadzić kilka całkowicie różnych stron z jednego pulpitu nawigacyjnego, nie myląc swoich płatności ani nie dając jednemu projektowi dostępu do danych innego. Historia faktur z wyraźnymi statusami przekształca pulpit nawigacyjny w narzędzie wsparcia: dla każdej płatności zawsze możesz zobaczyć, na jakim etapie się znajduje, jaka kwota była oczekiwana i dotarła oraz który webhook został wysłany.

12Integracje: przetestowane w boju

Payora nie istnieje w próżni — została zbudowana jako wspólna warstwa płatności dla całego ekosystemu projektów. Jednym z pierwszych prawdziwych integratorów jest rynek freelancerów 24freelance: doładowanie salda użytkownika odbywa się za pośrednictwem Payora. Sklep tworzy fakturę, użytkownik płaci na hostowanym kasie, a po potwierdzeniu Payora wysyła podpisany webhook, na podstawie którego saldo jest automatycznie uznawane.

Ta integracja jest dobrym testem architektury w rzeczywistym świecie: pokazała, że nowy projekt można szybko połączyć z bramką i że wybrany model (faktura → realizacja → podpisany webhook → kredytowanie) odpowiada rzeczywistemu produktowi bez obejść. Każda podłączona usługa jest rejestrowana jako osobny projekt handlowy z własnymi kluczami, co izoluje je od siebie.

Główną wartością pierwszej integracji jest to, że dokładnie podążała ścieżką wbudowaną w produkt — bez objazdów, bez "tymczasowych" hacków. Doładowanie salda jest doskonałym polem doświadczalnym, ponieważ niezawodność kredytowania jest tutaj kluczowa: błąd oznaczałby albo utratę pieniędzy użytkownika, albo nieuzasadnione kredytowanie salda. Fakt, że cały proces działał na powiązaniu z podpisanym webhookiem, potwierdził kluczową hipotezę: bramka wdrożona raz naprawdę staje się wspólną warstwą płatności, do której nowe projekty łączą się jako handlowcy, zamiast być przepisywana od zera za każdym razem.

13Stos technologiczny i infrastruktura

Dla Payora zebraliśmy dedykowane, izolowane środowisko — z własnym użytkownikiem systemowym, subdomenami i politykami. Jest to zarówno czystsze z punktu widzenia bezpieczeństwa, jak i łatwiejsze w obsłudze.

PHP 8.3REST APIPodpisane webhookiTONUSDT (TON)Wyprowadzenie adresuCloudflareLet's EncryptSamodzielnie hostowane
  • Backend — PHP 8.3: API, księgowość faktur, budowanie i wysyłanie webhooków, logika statusu.
  • Warstwa blockchain — praca z TON i USDT-on-TON: obliczanie adresów faktur i monitorowanie transferów w trybie tylko do odczytu.
  • Infrastruktura — oddzielne, izolowane konto z subdomenami api/pay/admin, za Cloudflare (DNS, TLS, ochrona) i z ważnymi certyfikatami Let's Encrypt.
  • Bezpieczeństwo — separacja ról w subdomenach, podpisywanie sekretów po stronie sprzedawcy, brak akceptacji prywatnych kluczy na serwerze.

Wybór PHP 8.3 jest pragmatyczny: dojrzała, szybka platforma, na której wygodnie hostować API, renderowanie po stronie serwera kasy i obszar administracyjny w jednym przewidywalnym środowisku. Cloudflare zamyka obwód i przejmuje zakończenie TLS oraz podstawową ochronę, podczas gdy Let's Encrypt zapewnia ważne certyfikaty we wszystkich subdomenach. Całe środowisko ma być samodzielnie hostowane: właściciel wdraża je na własnej infrastrukturze i zachowuje pełną kontrolę — co wynika bezpośrednio z niepowierniczej natury produktu.

14Projektowanie i UX

Produkt fintechowy sprzedaje zaufanie, więc interfejsy Payory uczyniliśmy spokojnymi i technicznymi, wolnymi od wizualnego hałasu. Strona docelowa wyjaśnia wartość w kilka sekund: czym jest, dla kogo jest, jak się różni (samodzielnie hostowane, niepowiernicze) i jak zacząć. Dokumentacja i punkty wejścia do pulpitu nawigacyjnego są na wyciągnięcie ręki.

Szczególną uwagę poświęcono ekranowi płatności. To moment, w którym użytkownik rozstaje się z pieniędzmi, a wszelkie niejasności kosztują konwersję. Dlatego na hostowanej kasie wszystko sprowadza się do niezbędnych elementów: kwota, adres, kod QR, timer i wyraźny status. Im mniej bałaganu na tym ekranie, tym wyższy wskaźnik płatności zrealizowanych do końca.

Traktowaliśmy UX procesu płatności jako część problemu inżynieryjnego, a nie jako "stylizację". Każdy element na ekranie płatności rozwiązuje konkretny problem zaufania: widoczny adres i kod QR usuwają strach przed pytaniem "gdzie mam zapłacić", licznik rozwiewa niepewność "jak długo mam czekać", a status faktury na żywo odpowiada na główne pytanie kupującego — "czy moje pieniądze dotarły". Razem to zmniejsza liczbę porzuconych płatności i zapytań wsparcia, co dla produktu płatniczego jest tak samo ważne jak techniczna niezawodność w tle.

15Jak pracowaliśmy

Realizowaliśmy projekt w sekwencyjnych etapach, demonstrując wynik na każdym kroku:

  • Badania.Sporządziliśmy mapę scenariuszy akceptacji kryptowalut, punktów bólu, wymagań dotyczących bezpieczeństwa oraz modelu "faktura → płatność → powiadomienie".
  • Architektura.Zaprojektowaliśmy podział subdomen, format API, schemat statusu faktury oraz mechanizm podpisywania webhooków.
  • Podstawowy rozwój.Zbudowaliśmy API, księgowość faktur, pochodzenie adresów i monitorowanie transferów, hostowane zakupy oraz dostarczanie webhooków.
  • Integracja i uruchomienie.Połączyliśmy pierwszy prawdziwy projekt (doładowanie salda 24freelance) i przetestowaliśmy cały proces w praktyce.
  • Uruchomienie i infrastruktura.Wdrożyliśmy środowisko za Cloudflare z subdomenami i certyfikatami oraz przygotowaliśmy stronę docelową i dokumentację.

Ta kolejność nie jest przypadkowa: najpierw naprawiliśmy umowę — format API, schemat statusu i podpisywanie webhooków — a dopiero potem zbudowaliśmy implementację wokół niej. Pozwoliło nam to rozwijać rdzeń i integrację niemal równolegle: podczas gdy logika serwera była składana, umowa była już wystarczająco stabilna, aby przygotować pierwszego integratora. Pokazy na każdym etapie umożliwiły wczesne dostrzeganie niezgodności i ich naprawę, zanim "ustabilizowały się" w kodzie.

16Wynik

To, co otrzymaliśmy, to nie "skrypt akceptacji kryptowalut", ale samodzielna bramka płatności, którą możesz wdrożyć samodzielnie i połączyć z dowolną liczbą projektów.

1 API
utwórz fakturę + status + szczegóły
0
klucze prywatne akceptacji na serwerze
TON · USDT
obsługiwane aktywa (sieć TON)
  • Akceptacja płatności kryptograficznych jest połączona w jeden wieczór — jedno żądanie utworzenia faktury i jeden handler webhooka.
  • Firma zachowuje pełną kontrolę nad funduszami: non-custodial i self-hosted.
  • Podpisane webhooki i unikalne adresy eliminują całe klasy błędów: fałszywe powiadomienia i zagubione płatności.
  • Architektura została potwierdzona przez rzeczywistą integrację i jest gotowa do skalowania na nowe projekty.

Ale główny wynik nie tkwi w pojedynczych liczbach — chodzi o zmianę modelu. Wcześniej każda nowa strona, którą właściciel budował, oznaczała nowy moduł płatności od podstaw; teraz to po prostu kolejny projekt handlowy w wspólnej bramce. Logika płatności przestała być jednorazowym zadaniem i stała się zasobem wielokrotnego użytku, który zwraca się tym bardziej, im więcej projektów się do niej podłącza.

17Wnioski

Payora jest przykładem tego, jak inżynieryjna rzetelność przekształca "modny temat" w działające narzędzie. Najcenniejszą rzeczą tutaj nie jest to, że produkt "akceptuje kryptowaluty", ale jakrobi to: bez ryzyka powierniczego, z zaufanymi powiadomieniami i z przewidywalną logiką fakturowania. To właśnie te nieefektowne, ale kluczowe szczegóły oddzielają bramkę płatniczą o standardzie produkcyjnym od kolejnej ręcznie robionej akceptacji.

Dla nas był to projekt na styku fintech, blockchain i infrastruktura — dokładnie taki rodzaj pracy, w którym zarówno myślenie produktowe, jak i dyscyplina techniczna mają znaczenie. Jeśli potrzebujesz akceptacji płatności, integracji z blockchainem lub złożonej usługi z wyraźnym API i panelem, wiemy, jak to zrealizować do uruchomienia.

I jeszcze jedna, bardziej metodologiczna, lekcja. Najlepsze rozwiązania fintechowe prawie zawsze dotyczą tego, czego nie widać na ekranie: modelu zagrożeń, idempotencji, tego, co liczy się jako jedyne źródło prawdy o pieniądzach. Te decyzje podejmuje się raz, na początku, a następnie chronią produkt przed całymi klasami problemów przez lata. Dokładnie w ten sposób podchodzimy do pracy — najpierw odpowiednie granice i umowy, a dopiero potem wszystko inne.