Pobieranie danych
Closed this issue · 14 comments
Cześć,
chciałem zrobić integracje na swoim stronie z formularzem kontaktowym, aby można było wykonywać określone płatności. Aktualnie utknąłem na błędzie z wykonaniem Requestu.
Obliczyłem signaturekey oraz wpisałem apikey - wszystkie z konta sandboxowego. Jednak na stronie po walce z tym wszystkim wychodzi
Fatal error: Uncaught Paynow\Exception\PaynowException: Error occurred during processing request in /usr/home/olszowkapokoje/domains/dev.olszowkapokoje.com.pl/public_html/vendor/pay-now/paynow-php-sdk/src/Paynow/Service/Payment.php:32 Stack trace: #0 /usr/home/olszowkapokoje/domains/dev.olszowkapokoje.com.pl/public_html/index.php(35): Paynow\Service\Payment->authorize(Array, '15df79791cde568...') #1 {main} thrown in /usr/home/olszowkapokoje/domains/dev.olszowkapokoje.com.pl/public_html/vendor/pay-now/paynow-php-sdk/src/Paynow/Service/Payment.php on line 32
Co mogę robić nie tak?
@Blaaszkovsky Sprawdź czy poprawnie skopiowałeś i wprowadziłeś klucze.
Jeśli złapiesz sobie wyjątek, to będziesz w stanie sprawdzić co jest powodem.
try {
$response = $paymentService->authorize($paymentData, 'idempotencyKey123');
// ... do something
} catch (PaynowException $exception) {
// catch error from $exception->getCode() or $exception->getErrors()
}
Nawet po wprowadzeniu wyjątku, nie pobiera mi go. Cały kod wygląda tak:
Wydaje mi się, że wszystkie klucze dobrze wprowadzam i gdzieś się wywala, ale nie mam pojęcia gdzie może być przyczyna.
require_once('vendor/autoload.php');
use Paynow\HttpClient;
use Paynow\Payment;
$orderReference = "1";
$idempotencyKey = uniqid($orderReference, true);
$paymentData = [
"amount" => 10,
"externalId" => $orderReference,
"description" => "Payment description",
"buyer" => [
"email" => "wujek.blacha@gmail.com"
]
];
$hash = new \Paynow\Util\SignatureCalculator('KLUCZ DO OBLICZANIA PODPISU', $paymentData);
$client = new \Paynow\Client('KLUCZ DO API', $hash, '', 'Zaliczki');
$payment = new \Paynow\Service\Payment($client);
// print_r($payment);exit;
//$result = $payment->authorize($paymentData, $idempotencyKey);
try {
$result = $payment->authorize($paymentData, $idempotencyKey);
var_dump($result);
} catch (PaynowException $exception) {
// catch error from $exception->getCode() or $exception->getErrors()
$exception->getErrors();
}
Nie musisz wyliczać hash'a, zrobi to za Ciebie SDK podczas wysyłania wiadomości.
W pliku README.md znajdziesz przykład:
$client = new \Paynow\Client('TestApiKey', 'TestSignatureKey', Environment::SANDBOX);
gdzie:
- TestApiKey - klucz do API
- TestSignatureKey - klucz do podpisu
Jeśli chcesz natomiast zobaczyc jakim błędem odpowiedziało do Ciebie API:
var_dump($exception->getErrors());
Zrobiłem tak jak mówiłeś i dalej jest ten sam błąd. Usunąłem wyliczanie hashu i skopiowałem cały klucz i dalej ten sam błąd.
try {
$payment = new \Paynow\Service\Payment($client);
$result = $payment->authorize($paymentData, $idempotencyKey);
} catch (PaynowException $exception) {
// catch errors
var_dump($exception->getErrors());
}
Co dostałeś w odpowiedzi z API ? Czy zmieniłeś TestApiKey
oraz TestSignatureKey
na wartości skopiowane z Panelu Merchanta?
@emilleszczak2 zmieniłem wartości w TestApiKey
oraz TestSignatureKey
na wartości skopiowane z merchanta. Najpierw obliczałem to, ale gdy powiedziałeś, że SDK zrobi to za mnie, to zmieniłem tak jak wskazałeś wyżej.
Po wrzuceniu tego w try
mimo wszystko mam błąd, który wysłałem w pierwszej wiadomości.
Dodatkowo nie wiem czemu, ale przy użyciu Environment::SANDBOX
mam błąd, że klasa Environment nie istnieje.
@emilleszczak2 spróbowałem zrobić to za pomocą zwykłego połączenia GuzzleHttp - występuje błąd z weryfikacją Signature Key, mimo, że podaję taki jaki mam w panelu merchanta.
<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$paymentData = [
"amount" => 10,
"externalId" => 'abcdefgh',
"description" => "Description",
"buyer" => [
"email" => "wujek.blacha@gmail.com"
]
];
class HashCalculator {
private $hmacAlgorithm = "sha256";
private $key = "SINGATURE KEY";
public function calculateHmac(array $data) {
return base64_encode(hash_hmac($this->hmacAlgorithm, json_encode($data), $this->key, true));
}
}
$hash = new HashCalculator;
$signature = $hash->calculateHmac($paymentData);
$request = $client->request('POST', 'https://api.sandbox.paynow.pl/v1/payments', [
'headers' => [
'Api-Key' => 'API KEY',
'Signature' => $signature,
'Indempotency-Key' => 'Test',
'Accept' => '*/*',
'Content-Type' => 'application/json'
],
'Accept' => 'application/json'
]);
var_dump($request);
// try {
// var_dump($request)
// } catch ()
Prześlij na support@paynow.pl swój plik z integracją. Spróbujemy pomóc.
@emilleszczak2 pisałem, mam nadzieję, że szybko podejmiecie działanie.
@Blaaszkovsky nie dostaliśmy od Ciebie maila z plikiem.
@emilleszczak2 poszło.
@Blaaszkovsky
Poniżej wrzucam poprawiony Twój plik:
<?php
require 'vendor/autoload.php';
use Paynow\Environment;
use Paynow\Exception\PaynowException;
use Paynow\Service\Payment;
$client = new \Paynow\Client('API_KEY', 'SIGNATURE_KEY', Environment::SANDBOX);
$idempotencyKey = 'Test';
$paymentData = [
"amount" => 100,
"currency" => "PLN",
"externalId" => '12345dsfsdf',
"description" => "Description",
"buyer" => [
"email" => "wujek.blacha@gmail.com"
]
];
try {
$payment = new Payment($client);
$result = $payment->authorize($paymentData, $idempotencyKey);
var_dump($result);
} catch (PaynowException $exception) {
var_dump($exception->getErrors());
}
Teraz wszystko działa, na czym polegał błąd. skoro wszystko wygląda praktycznie tak samo? :D