Formularz płatności Przelewy24

0

Chcę zrobić formularz płatności w Przelewy24, widzę taka dokumentację:
https://www.przelewy24.pl/storage/app/media/do-pobrania/dokumentacja-techniczna/przelewy24_dokumentacja_3.2.pdf
Przechodzę do punktu 4. Testowanie połączenia, tworze prosty formularzyk z trzema polami... klikam przycisk submit
i wyskakuje błąd: error=1&errorMessage=Wrong CRC
O co chodzi, czy ta dokumentacja jest aktualna?

0

Jak to robisz prosty formularzyk? Pokaż kod.

0

Pokazanie kodu raczej nic nie zmieni.
Tu jest nowa dokumentacja: https://developers.przelewy24.pl/ i wygląda inaczej?
Czyli jak zrobić taki formularz płatności wg. nowej dokumentacji, czy ktoś widział aktualny przykład?

1

@artimman: Masz w odpowiedzi, że masz błędne CRC i tego szukasz w dokumentacji. Stwierdzenie, że "pokazanie kodu raczej nic nie zmieni" jest wielką bzdurą bo raczej problem leży po Twojej stronie w kodzie (co obstawiam) lub też niewłaściwego ustawienia na Twoim koncie przelewy24.

0

Zaloguj sie do przelewy24 i tam w moje dane wybierasz swoj nr konta i tam masz: Klucz do CRC nizej masz pole Adres IP 1 i tam warto zebys wpisal znak %

0

Czy ktoś wie jak stworzyć formularz płatności Przelewy24, wysłać dane transakcji i odebrać "urlStatus" (w PHP) wg. nowej dokumentacji (REST)?

0

To kazdy wie, to sciagasz sobie dokladnie ten plik:
https://github.com/rafal1137/PHP_Smarty/blob/master/przelewy24/Przelewy24_Class.php
Wrzucasz go sobei do swojego projektu np do katalogu Libraries/Przelewy24/Ten wlasnie plik.class.php
Potem robisz include do pliku w ktorym chcesz uzyc tej klasy i dajesz

$P24 = new Przelewy24(
                merchant_id,
                pos_id, 
                api_key,
                crc,
                language,
                sandbox,
            );

            $P24->addValue('sessionId', 'numer zamowienia jako string');
            $P24->addValue('amount', 9900);
            $P24->addValue('currency', 'PLN');
            $P24->addValue('description', 'sub pakiet 99');
            $P24->addValue('email', '[email protected]');
            $P24->addValue('country', 'PL');
            $P24->addValue('language', 'pl');
            $P24->addValue('timeLimit', 10);
            $P24->addValue('channel', 1);
            $P24->addValue('urlReturn', url_return);
            $P24->addValue('urlStatus', url_status);

            $res = $P24->trnRegister();

            if (!empty($res) && $res['error'] == 0) {
                $order->update(['token' => $res['token']]);
                $P24->trnRequest($res['token']);
            }

            die();

w url_return dajesz info po platnosci zeby oczekiwal na wynik, ta stroja nie powie ci czy przelew sie udal czy nie wiec nie mozesz tu kierowac na strone np mowiaca ze wszystko ok, daj info ze platnosc w trakcie realizacji, dziekujemy

url_status tutaj musisz dac jakis plik ze zwrotka np plik niech ma nazwe 48ry3487ty43yg34tog73g8gh78reg.php i. wnim dostajesz info metoda POST o statusie transakcji mozesz ja odebrac tak:

$body = file_get_contents('php://input');
            $data = trim($body);
            $decode_json_data = json_decode($data);

ja pobieram wtedy nr zamowienia, sprawdzam jaki jest status, jesli jest inny niz ZREALIZOWANO lub ODRZUCONY to realizuje dane zamowienie, i aktualizuje ze zrealizowano i jak mi nastenym razem przyjdzie to samo to juz nie obsluguje tego zamowienia..

musisz odberac dane , podpisac is prawdzic czy to wyslal P24 czy ktos kto sie podszywa

if ($order->status != Order::PAID) {

                $calculated_sign = [
                    "sessionId" => $request->sessionId,
                    "orderId" => $request->orderId,
                    "amount" => $request->amount,
                    "currency" => $request->currency,
                    "crc" => crc),
                ];

                $calculated_sign = json_encode($calculated_sign, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
                $calculated_sign = hash('sha384', $calculated_sign);

                if ($calculated_sign == $request->sign) {

                    # confirm transaction
                    $P24 = new Przelewy24(
                      merchant_id,
                      pos_id, 
                      api_key,
                      crc,
                      language,
                      sandbox,
                  );

                    $P24->addValue('merchantId', $request->merchantId);
                    $P24->addValue('posId', $request->posId);
                    $P24->addValue('sessionId', $request->sessionId);
                    $P24->addValue('amount', $request->amount);
                    $P24->addValue('currency', $request->currency);
                    $P24->addValue('orderId', $request->orderId);

                    $RET = $P24->trnVerify();

                    if (!empty($res['error'])) {
                        // aktualziuj ze sie zesralomozesz napisac jakis debuger czy notifikacje na maila ze blad
                        echo "ok";
                    } else if ($res['data']['status'] ?? [] == 'success') {

                        # update order info
                        $order->update([
                            'originAmount'
                            'orderId'
                            'methodId'
                            'statement'
                            'status'
                        ]);
                     $transaction =   array (
                      'merchantId' => 145633,
                      'posId' => 145633,
                      'sessionId' => '6-60c278b4d005f',
                      'amount' => 9900,
                      'originAmount' => 9900,
                      'currency' => 'PLN',
                      'orderId' => 306318013,
                      'methodId' => 218,
                      'statement' => 'p24-D31-A80-G13',
                      'sign' => '6456b0aec45f3f3f0e64654f8c2b31a30bc234d723f2df61b7c4feeadda1229ac1c49c3330a710591e422bb9b75e0fc6',
                    )

                        // zaktualizuj transakcje z p24 do swojej tabelki zebys mial historie wplat i ich statusy
                        echo "zaktualizauj ze zaplacone, rob zamowienie";
                        $this->processing($order);
                    }

                    dd();
                }
            }

            echo "OK";
0

Dziękuje, ale się postarałeś. Jak na to patrzę to trochę "czarna magia".
Jedno, co mi się rzuca od razu w oczy to w tej klasie Przelewy24Class, że mamy tu wartości z "prefixem p24",np. p24_merchant_id, p24_pos_id itd., tak jak to było w starej wersji API 3.2, w nowym REST nie ma "p24". Coś tu chyba nie pasuje?

0

Nie ma to znaczenia mozesz se dac z prefixem

$P24 = new Przelewy24(
                p24_merchant_id,
                p24_pos_id, 
                 p24_api_key,
                p24_crc,
                p24_language,
                 p24_sandbox,
            );

chodzi tylko o to zebys podmienil te wartosci na swoje, nie wiem jak masz u siebie mozessz dac w stringu albo w zmiennej

$P24 = new Przelewy24(
                $p24_merchant_id,
                $p24_pos_id, 
                 $p24_api_key,
                $p24_crc,
                $p24_language,
                 $p24_sandbox,
            );

albo na sztywno

$P24 = new Przelewy24(
                43225,
                43225, 
                'uhuhiyiguyigyvhbiuguhigiuhgugy_klucz_api',
                'gugut675r57_crc',
                'PL',
                true,
            );

Musisz po zalogowaniu wziac te swoje dane i po prostu podmienic. I to nie czarna magia heheh musisz zaczac od pierwszego kroku, stworzyc obiiekt klasy P24 i podac przy tworzeniu tego obiektu swoje dane zeby system wiedzial ze ty to ty.

0

Powyższe akurat wydawało się oczywiste i od razu zmieniłem na te co mam zdefiniowane, np. URL_RETURN.
Jest jednak coś z tymi nazwami bo daje print_r() i wyskakuje error.

$res = $P24->trnRegister();
print_r($res);

Array ( [error] => 1 [errorMessage] => p24_sessionId:Incorrect session_id [p24_currency:Empty p24_currency] => [p24_email:Empty p24_email] => [p24_urlReturn:Empty p24_urlReturn] => [p24_amount:Incorrect value] => [p24_sign:Incorrect CRC value] => )

Może na początku zrobić coś najprostszego - Test, sprawdzić czy ten system działa :)
https://developers.przelewy24.pl/index.php?pl#tag/Additional-API-functionality
Prośba o taki przykładowy kod, oby poprawny, bo sam zaraz pewnie coś zamieszam i test nie zadziała jak to na początku bywa.

0

POkaz nam kod jakie podajesz dane do stworzenia tej transkacji, bo wszystkim wszystko dziala wiec to cos z danymi

0

Patrząc na konstruktor klasy

/**
     * Obcject constructor. Set initial parameters
     * @param int $merchantId
     * @param int $posId
     * @param string $salt
     * @param bool $testMode
     */
    public function __construct($merchantId, $posId, $salt, $testMode = false)
    {
        $this->merchantId = (int) $merchantId;
        $this->posId = (int) $posId;
        $this->salt = $salt;

        if ($this->merchantId === 0) {
            $this->merchantId = $this->posId;
        }

        if ($testMode) {
            $this->hostLive = $this->hostSandbox;
        }

        $this->addValue("p24_merchant_id", $merchantId);
        $this->addValue("p24_pos_id", $this->posId);
        $this->addValue("p24_api_version", P24_VERSION);

        return true;
    }

zmieniłem wcześniej podany kod na:

$P24 = new Przelewy24(
            MERCHANT_ID,
            POS_ID, 
            KEY_API,
			true
            //KEY_CRC,
            //'pl',
            //URL_SANDBOX,
  );

i wygląda, że to nie dane (jak trzeba to mogę zrobić jakiś podgląd kodu i danych)
a podany konstruktor był nieprawidłowy, teraz przeszło dalej

Array ( [error] => 200 [errorMessage] => call:Page load error (400) )

error 200 czyli jest lepiej ? tylko co z tym call:Page load error (400) ) ?
bo error jak widzę musi być 0, wówczas będzie OK

1 użytkowników online, w tym zalogowanych: 0, gości: 1