Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kodowanie znaków w Przelewy24
Forum PHP.pl > Forum > Przedszkole
Malinaa
Napisałem Apkę zintegrowaną z systemem płatności Przelewy24 jak już myślałem, że wszystko śmiga pojawił się problem z kodowaniem znaków.
Po dokonaniu transakcji, przechodzę do w panelu -> transakcje i w polu opis zamiast polskich liter z ogonkami są znaczki.

Kod funkcjonuje na dokumentacji P24 w wersji 3.2.
Dodaję: $payments->addValue('p24_encoding', 'UTF-8') i nic nie pomaga.
No nie i zakręciło mi się w głowie, kto wie co tu nie gra?
Salvation
A sam plik wysyłki w jakim kodowaniu zapisałeś? UTF-8 (bez BOM)?
Malinaa
Sam plik wysyłki, tzn. u mnie to jest adres w kontrolerze.

  1. /* @Route: "/payments/receiver" */
  2. public function receiver(): void
  3. {
  4. $request = $_POST questionmark.gif [];
  5. $payments = $this->service->initializePayments();
  6. $serviceReceiver = new ReceiverService($payments, $this->model);
  7. $serviceReceiver->process($request);
  8. }


a cała akcja dzieje się w ->process() i już sprawdzałem plik kontrolera i serwisu, gdzie jest process()
Notepad++ pokazuje UTF-8 czyli bez BOM, poza tym edytor Visual Studio Code robi dobrze kodowanie.
Przelewy24 niestety nie tak dobrze... i zostaje chyba kopać w kodzie, a raczej napisać do wsparcia.

Zleciał dzionek na szukaniu drobiazgu i nadal coś nie pasuje, napisałem więc do wsparcia i otrzymałem m.in. info, że domyślne kodowanie to 'ISO-8859-2', zakładałem, że 'UTF-8'.
No to już wiem co można zrobić, aby mieć polskie znaki diakrytyczne. Pozostaje jednak pytanie po co jest parametr 'p24_encoding' - system kodowania przesyłanych znaków?

Kod był taki:
  1. $payments = $this->payments;
  2.  
  3. $payments->addValue('p24_session_id', $formData['session']);
  4. $payments->addValue('p24_description', $description);
  5. $payments->addValue('p24_encoding', 'UTF-8');
  6. ...

dopisałem:
  1. $description = $formData['description'];
  2. $encoding = mb_detect_encoding($description);
  3.  
  4. if (!empty(ConstantConfig::P24_ENCODING) && ($encoding !== ConstantConfig::P24_ENCODING)) {
  5. $description = mb_convert_encoding($description, ConstantConfig::P24_ENCODING, 'auto');
  6. }
  7.  
  8. // Odznaczone 'p24_encoding' (nie działa, więc usuwam)
  9. // $payments->addValue('p24_encoding', 'UTF-8');

gdzie P24_ENCODING = 'ISO-8859-2' i śmiga.

Tylko dupy nie urywa, bo nadal nie wiem po co jest 'p24_encoding' i muszę wykonać mb_convert_encoding().
Problem rozwiązany, tylko pozostało wrażenie sprytnej małej rybki, a wolałbym wcielić się w rolę Rekina smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.