bluepayment-plugin / bm-sdk

GNU Lesser General Public License v3.0
9 stars 19 forks source link

Call to undefined method BlueMedia\Transaction\ValueObject\TransactionInit::getRedirectUrl() due to EMPTY_VALUE reason #3

Open amswiatkowski opened 3 years ago

amswiatkowski commented 3 years ago

Przy wywołaniu poniższego kodu:

          $serviceId = get_option('service_id');
          $sharedKey = get_option('shared_key');
          $client = new BlueMedia\Client($serviceId, $sharedKey, 'sha256', '|');
          $orderId = uniqid();
      $ip = ($_SERVER['HTTP_CLIENT_IP'] ?? isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

            $data = [
                'gatewayUrl' => 'https://pay-accept.bm.pl',
                'transaction' => [
                    'orderID' => $orderId,
                    'amount' => number_format(34*1.0, 2, '.', ''),
                    'currency' => 'PLN',
                    'customerEmail' => 'aaa@bbb.cd',
                    'customerIP' => $ip,
                    'gateway' => '0',
                    'title' => 'Opłata za '.implode( ', ', $request['items']),

                ]
            ];
            $result = $client->doTransactionInit($data);
            $transactionContinue = $result->getData();
            print_r([$result, $transactionContinue->getConfirmation(), $transactionContinue->getReason()]);
            $gatewayUrl = $transactionContinue->getRedirectUrl();

Otrzymuję błąd:

Uncaught Error: Call to undefined method BlueMedia\Transaction\ValueObject\TransactionInit::getRedirectUrl()

Wyłapałem nast. błąd rozpoczęcia transakcji:

[confirmation:BlueMedia\Transaction\ValueObject\TransactionInit:private] => NOTCONFIRMED [reason:BlueMedia\Transaction\ValueObject\TransactionInit:private] => EMPTY_VALUE

Wszystkie dane w tablicy $data są wypełnione, co więcej, na przykładzie z https://github.com/bluepayment-plugin/bm-sdk/blob/master/README.md, również występuje ten sam błąd:

$result = $client->doTransactionInit([
    'gatewayUrl' => 'https://pay-accept.bm.pl',
    'transaction' => [
        'orderID' => '123',
        'amount' => '1.20',
        'description' => 'Transakcja 123-123',
        'gatewayID' => '0',
        'currency' => 'PLN',
        'customerEmail' => 'test@hostname.domain'
    ]
]);

$transactionContinue = $result->getData();

$transactionContinue->getRedirectUrl();
ShinJii89 commented 3 years ago

To samo u mnie... nie mogę się przez to zintegrować ;/

lstosik commented 3 years ago

Co znajduje się na liście błędów w panelu admina ("Błędy transakcji"), tam powinna być informacja co poszło nie tak. W sekcji https://github.com/bluepayment-plugin/bm-sdk#przedtransakcja-brak-kontynuacji są opisane 2 pola w których można sprawdzić występowanie błędów przy starcie(confirmation/reason)

ShinJii89 commented 3 years ago

@lstosik nie wiem czy coś zrobiliście z moim kontem (bo pisałem z Waszym supportem o tym bugu na mailu i podawałem ID serwisu w którym występuje ten problem) ale nagle redirecturl już działa i poprawnie przenosi do płatności... ale... jak zrobiłem to do czego dałeś link czyli echo $bluemedia_transactionContinue->getConfirmation(); echo '-' . $bluemedia_transactionContinue->getReason();

Jest znowu zabawnie i wyskakuje error Fatal error: Uncaught Error: Call to undefined method BlueMedia\Transaction\ValueObject\TransactionContinue::getConfirmation()

scardinius commented 3 years ago

@ShinJii89 być może to Ci pomoże... W zależności od tego czy parametry do przedtransakcji są prawidłowe czy nieprawidłowe to zwracany jest inny obiekt! Wg mnie to jest słabe, ale tak działa.

a co za tym idzie, inne metody są dostępne

$result = $client->doTransactionInit([
  'gatewayUrl' => $gatewayUrl,
  'transaction' => $transaction,
]);
$transactionContinue = $result->getData();

if ($transactionContinue instanceof TransactionContinue) {
  // jest dobrze, status PENDING
  // redirect na $transactionContinue->getRedirectUrl()
}

if ($transactionContinue instanceof TransactionInit) {
  // jest źle, confirmation NOTCONFIRMED
  // nie ma linka do przekierowania
}
akurzajewska commented 3 years ago

@lstosik integracja mogla się psuć przez niezaktualizowane realasy - ale wrzuciłam już nowy

ShinJii89 commented 3 years ago

@akurzajewska niestety w dalszym ciągu mam:

Fatal error: Uncaught Error: Call to undefined method BlueMedia\Transaction\ValueObject\TransactionInit::getRedirectUrl() in /var/www/html/ajax/abonament.ajax.php:260 Stack trace: #0 {main} thrown in /var/www/html/ajax/abonament.ajax.php on line 260

Kod: $bluemedia_result = $bluemedia_client->doTransactionInit([ 'gatewayUrl' => 'https://pay-accept.bm.pl', 'transaction' => [ 'orderID' => $bluemedia_control, 'amount' => $bluemedia_price, 'description' => $paytitle, 'gatewayID' => '0', 'currency' => $currency, 'customerEmail' => $userdata['email'], 'customerIP' => $_SERVER['REMOTE_ADDR'], 'returnURL' => $return_page ] ]); $bluemedia_transactionContinue = $bluemedia_result->getData(); $bluemedia_url = $bluemedia_transactionContinue->getRedirectUrl();

ShinJii89 commented 3 years ago

@akurzajewska Potwierdzam to co napisał @scardinius - tak się dzieje przez status NOTCONFIRMED - pytanie czemu za każdym razem mam taki status? wina jakiejś konfiguracji w sandboxie czy co?

scardinius commented 3 years ago

@ShinJii89 zaloguj się do panelu i sprawdź jaki masz błąd. Ja najczęściej miałem niedozwolony znak w polu description

(menu) Sklepy > (link) nazwa sklepu > (link) Błędy transakcji

lista błędnych przedtransakcji ze szczegółami będzie widoczna po kliknięciu przycisku Filtruj

ShinJii89 commented 3 years ago

@scardinius nie widzę czegoś takiego w sandboxie...a po drugie tytuł mam "Testowy tytuł" [bez cudzysłowia] także nie widzę tutaj niedozwolonych znaków :D

ShinJii89 commented 3 years ago

@scardinius odnośnie Twojego rozwiązania to mam lepsze:

$transactionContinue = $result->getData();
$status=$transactionContinue->getConfirmation();
if ($status!=='NOTCONFIRMED') {
  // redirect na $transactionContinue->getRedirectUrl()
}
scardinius commented 3 years ago

@ShinJii89 nie byłbym taki pewny... nie znalazłem metody getConfirmation() w klasie TransactionContinue. Zadziałał ten Twój kod?

ShinJii89 commented 3 years ago

@scardinius w przypadku "NOTCONFIRMED" działa, a w innym nie wiem bo póki co wszystkie transakcje mam z tym statusem...nie mogę tego przeskoczyć.

scardinius commented 3 years ago

@ShinJii89 a spróbuj napisać nowy skrypt bazując na tym z dokumentacji https://developers.bluemedia.pl/online/sdk/php#przedtransakcja-link-do-kontynuacji-platnosci - taki sam kod ale swoje klucze do sklepu

i jeszcze panel, korzystasz rozumiem z tego https://oplacasie-accept.bm.pl/admin/login ? konto na początku nie jest zweryfikowane i to jest taki "sandbox". Ja mam dojście do błędów transakcji, rozejrzyj się jeszcze raz

ShinJii89 commented 3 years ago

@scardinius mam identyczny kod ;P Co do panelu - daj screena gdzie to masz, ja mam tylko TRANSAKCJE, co ciekawe nie ma tam żadnej transakcji z dzisiaj ;D

scardinius commented 3 years ago

@ShinJii89 tych nieudanych (NOTCONFIRMED) nie widać na liście transakcji, tylko właśnie w błędach.

Górne menu:

bluemedia-menu-panelu

a może Twoje konto ma niższe uprawnienia, hmm?

ShinJii89 commented 3 years ago

@scardinius o to chodzi, że nie widzę nigdzie menu z błędami ;p a na screenie mi dałeś po prostu sklepy... klikam tam i nic nie mam o błędach albo jestem ślepy ;D

Możliwe, że mam coś nie tak z tym kontem... już ostatnim razem mi developerzy niby coś "naprawili" i zaczęło działać, ale znowu nie działa od tygodnia:) no nic... chyba muszę poczekać na ich reakcję ;)

ShinJii89 commented 1 year ago

Minęły prawie 2 lata, a ten błąd dalej nie naprawiony:))) Jeżeli ktoś ma niezgodne znaki w tytule transakcji z patternem, który w bluemedia jest ubogi (nawet polskich znaków nie akceptują, halo, mamy 2023 rok) to wciąż zamiast błąd się catchować i wypluć jakąś ładną wiadomość to jest 500tka z Fatal error: Uncaught Error: Call to undefined method BlueMedia\Transaction\ValueObject\TransactionInit::getRedirectUrl()

Naprawi ktoś to w końcu? @akurzajewska @bmmichal @Karol-BM @marendarskibm

ShinJii89 commented 6 months ago

kolejny rok, chyba czas zacząć obchodzić jakieś rocznice w firmie Autopay z tej okazji ;))))

ShinJii89 commented 6 months ago

@scardinius @amswiatkowski poradziliscie sobie jakos z tym problemem czy po prostu przestaliscie uzywac ich wtyczki i zintegrowalisce to "natywnie" za pomoca ich apI? :D