6 min czytaniaFunkcje

Kod QR EPC: standard kodu QR do płatności SEPA wyjaśniony

Kod QR EPC koduje przelew SEPA, a nie URL, dzięki czemu aplikacja bankowa może wypełnić formularz. Co zawiera payload i dlaczego nie da się go śledzić.

Marius Voß
DevRel · edge infra
Payload kodu QR EPC pokazany jako dwanaście linii zwykłego tekstu zaczynających się od znacznika usługi BCD, obok formularza przelewu w aplikacji bankowej wypełnionego na jego podstawie

Kod QR EPC nie zawiera linku. Zawiera przelew SEPA, zapisany jako krótki blok zwykłego tekstu, a aplikacja bankowa, która rozpoznaje ten format, odczytuje go i wypełnia formularz przelewu. Żaden serwer nie jest kontaktowany, nic nie jest sprawdzane, i nic ze skanowania do ciebie nie dociera.

Ten jeden fakt decyduje o wszystkim innym w sposobie, w jaki te kody są używane. Nie można żadnego skrócić, nie można żadnego przekierować i nie można zliczyć skanów, bo w całym przepływie nie ma żadnego żądania. Standard, który za tym stoi, to EPC069-12 od European Payments Council, kody są zwykle nazywane GiroCode na rynkach niemieckojęzycznych, a format warto dokładnie zrozumieć, zanim wydrukuje się tysiące ich na fakturach. Po ogólny przypadek tego, co może nieść kod, czym jest kod QR opisuje kwestię payloadu.

Co faktycznie zawiera payload

Payload to sekwencja linii w stałej kolejności, każda to osobny element. Parser czyta linię 1, oczekuje BCD, czyta linię 4, oczekuje SCT, i poddaje się, jeśli którejś z nich brakuje.

LiniaZawartośćLimit
Service tagBCDstałe, 3 znaki
Version001 albo 002002 sprawia, że BIC jest opcjonalny
Character set1 dla UTF-8, do 8jedna cyfra
IdentificationSCTstałe, 3 znaki
BICidentyfikator banku odbiorcy11 znaków, często pomijany
Beneficiary nameposiadacz rachunku70 znaków
IBANrachunek odbiorcy34 znaki
AmountEUR po którym następuje kwota0.01 do 999999999.99, w EUR
Purpose codecel ISO, rzadko używany4 znaki
Structured refreferencja wierzyciela, albo35 znaków
Unstructured textzamiast tego wolny tekst tytułem140 znaków
Beneficiary to originatornotatka widoczna dla płatnika70 znaków

Dwie zasady najczęściej mylą ludzi. Referencja ustrukturyzowana i wolny tekst tytułem wykluczają się wzajemnie: wypełnij jedno, zostaw drugie puste. A kwota jest opcjonalna, co jest właściwym wyborem dla kodu na darowiznę, gdzie to płatnik decyduje, i złym wyborem dla faktury, gdzie chcesz mieć wypełnioną dokładną kwotę.

Cały blok jest ograniczony do 331 bajtów. Wytyczne EPC069-12 ustalają też poziom korekcji błędów na M i ograniczają symbol do wersji 13, więc drukowany kod ma znany pułap liczby modułów. Jeśli budujesz to w kodzie zamiast klikać w generator, dokumentacja biblioteki Segno pokazuje kolejność pól i zasady kodowania w formie, którą można przetestować.

Cztery bloki payloadu kodu QR EPC, od stałego znacznika usługi przez dane odbiorcy i kwotę po referencję tytułem płatności

Dlaczego nie można go skrócić ani śledzić

Śledzony kod QR działa poprzez kodowanie URL-a, który należy do ciebie. Skan otwiera ten URL, twoje przekierowanie odpowiada, zliczasz żądanie, a odwiedzający trafia tam, gdzie aktualnie kieruje link. Kody QR dynamiczne kontra statyczne opisuje ten mechanizm w pełni.

Nic z tego tutaj nie ma zastosowania. Aplikacja bankowa nie jest przeglądarką. Parsuje tekst, dopasowuje format i otwiera formularz płatności lokalnie na urządzeniu. Nie ma żadnego żądania HTTP do przechwycenia, więc:

  • Liczba skanów nie istnieje nigdzie. Ani w twoim narzędziu, ani w narzędziu banku.
  • Nic nie da się przekierować. Błędny IBAN oznacza ponowny druk.
  • Owinięcie payloadu w krótki link psuje go całkowicie, bo parser widzi https tam, gdzie oczekuje BCD.

Widziałem zespół, który spędził tydzień, próbując uzyskać atrybucję dla kodu płatności, zanim ktoś przeczytał specyfikację. Uczciwa odpowiedź jest taka, że strona płatności i strona pomiaru to dwa różne kody, a jeśli w układzie jest miejsce tylko na jeden, wygrywa kod płatności.

To, co można zmierzyć, to wszystko wokół niego. Jeśli przesyłka zawiera fakturę z kodem płatności, umieść na piśmie osobny śledzony krótki link do portalu klienta, regulaminu albo strony wsparcia, i odczytuj zaangażowanie stamtąd. Funkcje kodów QR Elido opisują tę śledzalną połowę arkusza, a kod płatności pozostaje dokładnie taki, jakiego wymaga standard.

Gdzie to działa, a gdzie nie

Wsparcie leży w poszczególnych aplikacjach bankowych, dlatego pokrycie jest nierówne w sposób, który listy krajów zawyżają. Austriackie i niemieckie aplikacje odczytują te kody od lat, fińskie i holenderskie są ogólnie niezawodne, belgijskie wsparcie jest dobre. Poza tym testuj, zanim zdecydujesz się na nakład druku.

Dwóch sąsiadów jest z nim powszechnie mylonych. Szwajcarski QR-bill to inna specyfikacja z własnym układem i szwajcarskim krzyżem pośrodku symbolu; to nie jest kod EPC i aplikacje ze strefy euro nie odczytają go jako płatności. A link płatniczy od procesora kart to zupełnie coś innego: to zwykły URL w kodzie QR, z hostowaną kasą na końcu, i zachowuje się jak każdy inny link internetowy, wliczając w to śledzenie, które z nim przychodzi.

Po szerszą odpowiedź na pytanie, co regulowana firma płatnicza albo pożyczkowa może pokazać klientom, skracacze URL dla fintechu opisują części, w które zaangażowany jest link.

Kod QR do płatności zdekodowany offline do formularza przelewu, zestawiony z kodem QR z linkiem, który dociera do przekierowania i generuje analitykę

Jak wyprodukować kod bez żalu

Sześć sprawdzeń, w kolejności, w jakiej oszczędzają ci pieniądze.

  1. Zwaliduj IBAN przed wygenerowaniem, nie po wydrukowaniu. Test sumy kontrolnej nic nie kosztuje, a ponowny druk kosztuje cały nakład.
  2. Zdecyduj świadomie w kwestii kwoty. Stała dla faktur, pusta dla plakatów z darowiznami, gdzie powinna być możliwa dowolna kwota.
  3. Preferuj referencję ustrukturyzowaną zamiast wolnego tekstu. Jest krótsza, uzgadnia się automatycznie w twojej księgowości i utrzymuje payload mały.
  4. Testuj w co najmniej trzech aplikacjach bankowych, na obu platformach telefonów. Parsery różnią się tym, jak restrykcyjnie traktują pola opcjonalne.
  5. Dobierz rozmiar wydrukowanego kodu do odległości, z jakiej będzie skanowany, dokładnie tak jak w przypadku każdego innego kodu. Jak duży powinien być kod QR ma odpowiednią arytmetykę.
  6. Zachowaj matowość. Błyszczący lakier na kodzie płatności na fakturze pod biurowym oświetleniem to zgłoszenie do wsparcia, które czeka, żeby się wydarzyć.

Problem naklejki

Istnieje jeden prawdziwy wektor oszustwa, i jest on fizyczny, a nie cyfrowy. Statyczny kod płatności wydrukowany na fakturze, parkomacie, tabliczce straganu na targu albo plakacie charytatywnym można zakryć naklejką z innym IBAN-em. Nic w kodzie się temu nie przeciwstawia, bo payloadem jest papier.

Środki zaradcze są równie fizyczne. Drukuj kod wewnątrz układu faktury, tam gdzie naklejka byłaby oczywista, zamiast na przyklejanej łatce. Pokaż nazwę odbiorcy i ostatnie cyfry IBAN-u w tekście obok kodu, żeby płatnik mógł je porównać. A w instrukcjach potwierdzenia płatności powiedz ludziom, żeby czytali nazwę wyświetlaną przez ich aplikację bankową, zanim potwierdzą, bo ten ekran to jedyne miejsce, w którym podmiana staje się widoczna. Czy kody QR są bezpieczne i czym właściwie jest quishing opisuje szerszy wzorzec ataku, z którego większość dotyczy też kodów z linkami, które drukujesz gdzie indziej na tej samej stronie.

Uspokajająca część: płatność nadal wymaga człowieka, który potwierdzi ją w uwierzytelnionej aplikacji bankowej. Kod wypełnia formularz, nigdy nie przesyła pieniędzy.

Przeczytaj serię filarową

Ten artykuł należy do klastra funkcji. Po drukowany przepływ pracy wokół każdego generowanego kodu, kampania z kodem QR od podstaw jest artykułem filarowym, a przewodnik po kodach QR w dokumentacji opisuje generowanie śledzalnej odmiany przez API.

Powiązane na blogu

Najczęściej zadawane pytania

Czym jest kod QR EPC?

Kod QR, który koduje dane przelewu SEPA jako zwykły tekst, dzięki czemu aplikacja bankowa może go odczytać i wypełnić formularz przelewu. Został ustandaryzowany przez European Payments Council w wytycznych EPC069-12 i jest też znany jako GiroCode. Payload to stała sekwencja linii, zaczynająca się od znacznika usługi BCD, i nie zawiera żadnego adresu internetowego.

Które kraje obsługują płatności GiroCode?

Wsparcie leży po stronie aplikacji bankowej, nie kraju, ale w praktyce kody są szeroko odczytywane w Austrii, Niemczech, Finlandii, Holandii i Belgii. W pozostałych krajach strefy euro pokrycie jest nierówne, a poza nią kod nie ma żadnego znaczenia. Szwajcaria używa własnego standardu QR-bill, który wygląda podobnie i nie jest kompatybilny.

Czy kod QR EPC może być dynamiczny albo śledzalny?

Nie. Dane płatności znajdują się wewnątrz wydrukowanego wzoru, a telefon dekoduje je offline, bez kontaktu z jakimkolwiek serwerem, więc nie ma nic do przekierowania i nic do zliczenia. Jeśli trzeba zmienić kwotę albo referencję, generuje się nowy kod. Wszystko, co jest sprzedawane jako dynamiczny kod QR do płatności, to link do strony płatności, czyli zupełnie inny produkt.

Co się stanie, jeśli umieszczę krótki link w kodzie QR EPC?

Aplikacja bankowa nie potrafi go sparsować i albo pokazuje błąd, albo domyślnie traktuje kod jak zwykły URL. Parser oczekuje, że pierwsza linia to BCD, a czwarta to SCT; URL nie pasuje do żadnej z nich. Kody QR do płatności i kody QR z linkiem to dwa oddzielne kody, które akurat mają ten sam kształt symbolu.

Jak duży może być payload?

331 bajtów, co ogranicza kod QR do wersji 13 z poziomem korekcji błędów M zgodnie z wytycznymi EPC. W praktyce to tekst tytułem płatności najczęściej go wypełnia, więc długa referencja w formie wolnego tekstu jest polem, które najłatwiej przekracza limit. Trzymaj referencję ustrukturyzowaną i krótką, a kod pozostanie na tyle rzadki, żeby dało się go zeskanować z wydrukowanej faktury.

Czy kody QR do płatności są bezpieczne na wydrukowanych fakturach?

Sam kod nie niesie żadnej wykonywalnej zawartości, a płatnik potwierdza przelew w swojej aplikacji bankowej, która pokazuje nazwę odbiorcy i IBAN, zanim cokolwiek zostanie przesłane. Prawdziwe ryzyko jest fizyczne: naklejka umieszczona na wydrukowanym kodzie, przekierowująca płatność na inne konto. Drukuj kod wewnątrz układu faktury, nie na etykiecie, i mów płatnikom, żeby sprawdzali nazwę na ekranie potwierdzenia.

Wypróbuj Elido

Wklej URL, otrzymaj krótki link

Bez rejestracji. Link działa 30 dni. Zarejestruj się, aby zachować go na zawsze.

Za darmo, bez rejestracji · 2 dziennie

Wypróbuj Elido

Skracarka URL hostowana w UE: własne domeny, głęboka analityka i otwarte API. Darmowy plan - bez karty kredytowej.

Tagi
epc qr code
girocode
sepa payment qr code
qr code payment
static qr code
invoice qr code

Czytaj dalej