Git Product home page Git Product logo

paynow-php-sdk's People

Contributors

developermovecloser avatar emilleszczak2 avatar mateusz0lejnik avatar mateusztwardowski avatar michalskladanowski avatar pperzyna avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

paynow-php-sdk's Issues

Old version of curl-client

This package is requiring curl-client in version ^1.7

This is old version, conflicting with i.e. php-http/httplug-bundle
Please update dependency to version ^2.x

Adres notyfikacji URL - feature.

Cześć,
Mam dla Was przyszłościową opcję bez której w sumie nie mogę Was teraz zintegrować :)

Mam platformę, na której ludzie mogą tworzyć własne sklepy pod własnym adresem URL (!!), w których są 4 rodzaje produktów, które mają osobne skrypty do otrzymywania powiadomień o płatności.

W takim razie każdy sklep ma 4 różne możliwe adresy URL do otrzymywania powiadomień o płatności - u Was jest opcja wpisania jednego adresu notyfikacji i to tylko w ustawieniach konta :) potrzebuję opcji w której mogę Wam przekazać adres do dostarczenia mi notyfikacji poprzez API.

Inne serwisy takie jak Paypal, Tpay, PayU, Dotpay, Przelewy24, Hotpay mają zintegrowany formularz z opcjonalną zmienną typu „notification_url” podczas tworzenia transakcji, gdzie przesyłają status transakcji - jak widać nie jest to głupio wymyślona opcja przeze mnie :) ale stosowana od dawna przez innych.

Możecie to wdrożyć jak najszybciej?
Pozdrawiam

Laravel 9 - empty array on getPaymentMethods

Hello,

I'm integrating Paynow with Laravel 9 project / PHP 7.4.

public function availablePaymentMethods()
    {
        $client = new Client(config('paynow.api_key'), config('paynow.signature_key'), Environment::SANDBOX);
        try {
            $payment = new Payment($client);
            $paymentMethods = $payment->getPaymentMethods();
            $availablePaymentMethods = $paymentMethods->getAll();
            return response()->json($availablePaymentMethods);
        } catch (PaynowException $exception) {
            return response()->json('Error occurred', 400);
        }
    }

API returns 200, but it's content is only empty elements:

[
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{},
	{}
]

Http Client:

httpClient: Paynow\HttpClient\HttpClient {#499 ▼
    #client: Symfony\Component\HttpClient\Psr18Client {#503 ▼
      -client: Symfony\Component\HttpClient\CurlHttpClient {#506 ▶}
      -responseFactory: Nyholm\Psr7\Factory\Psr17Factory {#504}
      -streamFactory: Nyholm\Psr7\Factory\Psr17Factory {#505}
    }

Missing option to override notification url

API should allow to override notification url set in panel, same as it allows to override return_url

It would simplify clients workflow in end applications - there would be no need to instruct user to put in proper notification url in panel.

Kwoty z groszami

Gdy podaje amount zawierający grosze to nie działa. Bardzo proszę o pomoc.
Podaje kwotę: 101.21
$exception->getErrors() zwraca błąd:
[0] => Paynow\Exception\Error Object
(
[type:Paynow\Exception\Error:private] => VALIDATION_ERROR
[message:Paynow\Exception\Error:private] => amount: invalid numeric value: 101.2099999999999937472239253111183643341064453125
)

Metoda Paynow\Response\PaymentMethods\PaymentMethods::getAll() może zwrócić null

Deklaracja parametru metody wygląda w ten sposób:

    /**
     * @var PaymentMethod[]
     */
    private $list;

A getter dla tego parametru wygląda tak:

    /**
     * Retrieve all available payment methods
     *
     * @return PaymentMethod[]
     */
    public function getAll()
    {
        return $this->list;
    }

Jest to jednak zbyt optymistyczne podejście...

Konstruktor klasy wygląda tak:

    public function __construct($body)
    {
        if (! empty($body)) {
            foreach ($body as $group) {
                if (! empty($group->paymentMethods)) {
                    foreach ($group->paymentMethods as $item) {
                        $this->list[] = new PaymentMethod(
                            $item->id,
                            $group->type,
                            $item->name,
                            $item->description,
                            $item->image,
                            $item->status,
                            $item->authorizationType ?? null
                        );
                    }
                }
            }
        }
    }

Istnieje więc szansa, że zmienna $body lub $group->paymentMethods będzie pusta, więc w rezultacie nie dojdziemy nawet do wypełnienia $this->list.

Rozwiązanie:
Zmienić deklarację parametru na taką:

private array $list = [];

Swoją drogą, kiedy przejście kodem na PHP 8.2?

Bazowanie na paymentId w przypadku podnoszenia płatności nie jest dobrym rozwiązaniem brakuje funkcjonalności

Scenariusz pozytywny

  1. Dodawanie płatności - otrzymujemy zwrotnie paymentId (XXX-XX-XX-XX), status (NEW), redirectUrl
  2. za pomocą redirectUrl przekierowujemy klienta do bramki
  3. klient opłaca i wraca. Sprawdzamy z URL paymentId ?paymentId=XXX-XX-XX-XX&paymentStatus=CONFIRMED.
  4. Sprawdzamy status płatności wykorzystując paymentId przez API i mamy informacje o wpłacie do konkretnego zamówienia (oczywiście paymentId XXX-XX-XX-XX rejestrujemy w bazie podczas tworzenia płatności aby odpytać API o status płatności i porównać z URL powrotu).

Scenariusz problematyczny

  1. Dodawanie płatności - otrzymujemy zwrotnie paymentId (XXX-XX-XX-XX), status (NEW), redirectUrl
  2. za pomocą redirectUrl przekierowujemy klienta do bramki
  3. klient ma problem z płatnością (błędny BLIK czy cokolwiek). Ponawia płatność i po stronie bramki generuje się nowy paymentId (YYY-YY-YY-YY). Załóżmy, że zapłaci i wraca do sklepu ale jego paymentId to YYY-YY-YY-YY. Sprawdzamy z URL paymentId ?paymentId=YYY-YY-YY-YY&paymentStatus=CONFIRMED. Symbol XXX-XX-XX-XX ma status ABANDONED i nie ma żadnych informacji o powiazaniu YYY-YY-YY-YY z XXX-XX-XX-XX
  4. Sprawdzamy status płatności wykorzystując paymentId powrotu YYY-YY-YY-YY ( ?paymentId=YYY-YY-YY-YY&paymentStatus=CONFIRMED). I nie możemy z niczym tego powiązać.

Na początku utrzymujemy paymentId XXX-XX-XX-XX (przykład) następnie podczas podnoszenia płatności w bramce (poza sklepem) tworzona jest nowa sesja YYY-YY-YY-YY. ?paymentId=YYY-YY-YY-YY&paymentStatus=CONFIRMED. Do czego podpiąć YYY-YY-YY-YY my nie mamy informacji jakiej transakcji to dotyczy.

Jak wykonać zwrot kiedy to też bazuje na paymentId? My mamy informacje o XXX-XX-XX-XX a nie o YYY-YY-YY-YY
Rozwiązanie kiedy ktoś musi łączyć wpłaty logując się do panelu jest słabe.

[2.0] odpowiedź serwera w Paynow\Service\Payment::authorize() może być pusta

STR:

  1. utwórz zamówienie na kwotę < 1zł
  2. uruchom Paynow\Service\Payment::authorize()
  3. uruchom to samo ponownie z tym samym idempotencyKey

W odpowiedzi przychodzi pusty obiekt, czyli redirectUrl/paymentId/status są null - a to powoduje błąd:

TypeError: Return value of Paynow\Response\Payment\Authorize::getPaymentId() must be of the type string, null returned
Paynow\Response\Payment\Authorize::getPaymentId(), line 34

Teoretycznie dokumentacja nie przewiduje takiej odpowiedzi, ale myślę, że warto, żeby paynow-php-sdk uwzględniało ten przypadek i np. wyrzucało jakiś wyjątek

(przy okazji w Payment.php jest literówka: $decpdedApiResponse)

Pobieranie danych

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?

Refund API Error

Dear PayNow,

I've tried to use your Refund Service, but it looks like there is an API error.
The underlying HTTP request in the create function returns null.

How to replicate it?

$refund = new Refund(new Client($this->config['key'], $this->config['signature'], $this->config['environment']));
$response = $refund->create('R3FU-UND-D8K-WZD', '5e3b80f7-c48c-429c-9686-ddba817e8231', 1000, 'RMA');

Expected output:
The Status object

Błąd podczas zwracania środków

Próbuję dokonać zwrotu środków, ale podczas wywoływania metody create na obiekcie klasy Refund otrzymuję poniższy błąd:

( ! ) Fatal error: Uncaught TypeError: Return value of Paynow\Response\Refund\Status::getStatus() must be of the type string, null returned in /home/pfilipek/homewww/omnipay-paynow/vendor/pay-now/paynow-php-sdk/src/Paynow/Response/Refund/Status.php on line 28
( ! ) TypeError: Return value of Paynow\Response\Refund\Status::getStatus() must be of the type string, null returned in /home/pfilipek/homewww/omnipay-paynow/vendor/pay-now/paynow-php-sdk/src/Paynow/Response/Refund/Status.php on line 28

Poniżej fagment kodu, który próbuję wywołać:

$client = new Client('api_key', 'signature_key', Environment::SANDBOX);
$refund = new Refund($client);
		
$result = $refund->create(
    'NOHH-7I9-BJM-7DU',
    '61379fb47c049',
    200,
    'OTHER'
);

Sprawdziłem w vendorze i faktycznie, z klienta HTTP faktycznie nie dostajemy żadnej odpowiedzi. Brzmi to trochę jak problem z API, a nie z samą biblioteką.

Błąd przy pobieraniu statusu płatności

Przy próbie pobrania statusu płatności dostaję błąd:

Fatal error: Uncaught Paynow\Exception\PaynowException: Error occurred during processing request in D:\Bank danych\Projekty WWW\Payments\vendor\pay-now\paynow-php-sdk\src\Paynow\Service\Payment.php on line 53

Mój kod poniżej:

require __DIR__ . '/vendor/autoload.php';
if(isset($_GET['paymentId']) && isset($_GET['paymentStatus'])) {

	$client = new \Paynow\Client('XXX', 'XXX', 'sandbox');
	try {
		$paymentID = $_GET['paymentId'];
		
		$payment = new \Paynow\Service\Payment($client);
		$result = $payment->status($paymentID);
		var_dump($result);
	} catch (PaynowException $exception) {
	   var_dump($exception->getErrors());
	}
}

Klucze i sygnatury są prawidłowe.

błędny phpdoc w Paynow\Service\Payment::authorize()

 class Payment extends Service
{
    /**
     * @return ApiResponse
     */
    public function authorize(array $data, $idempotencyKey = null)
    {
        try {
            return $this->getClient()
                ->getHttpClient()
                ->post(
                    Configuration::API_VERSION.'/payments',
                    $data,
                    $idempotencyKey ? $idempotencyKey : $data['externalId']
                )
                ->decode();

Powyższy kod zwraca zdekodowanego JSONa a nie ApiResponse tak jak jest w phpdoc

Nie działa środowisko sandbox

Kiedy zacznie działać ?
Ta witryna jest nieosiągalnaNie udało się znaleźć adresu IP serwera ze stroną rrev.online.mbank.pl.
DNS_PROBE_FINISHED_NXDOMAIN

Wdrożenie płatności formularz danych POST

Wdrożenie płatności.

Witam mam problem z koncepcja Państwa płatności, a [email protected] niestety NIE RACZY opowiadać!

Zatem o co mi chodzi - W systemie przeley24, PayPal itd... w celu zainicjowania płatności = obsłużenia wysyłamy dane POST z formularza w którym may klienta, za co płaci, cenę itd...

<form action="https://sandbox.przelewy24.pl/trnDirect" method="post" class="form" id="formplatonline">
<input type="text" name="p24_session_id" value="<?php echo $p24_session_id;?>">
<input type="text" name="p24_merchant_id" value="<?php echo $p24_merchant_id;?>">
<input type="text" name="p24_pos_id" value="<?php echo $p24_merchant_id;?>">
<input type="text" name="p24_amount" value="<?php echo $p24_amount;?>">
ITD....
<input type="submit" value="go" />
</form>

ITD.... Wysłanie formularza przenosi do systemu transakcyjnego na stronę wyboru banku itd...

Drugim etapem jest mechanizm odbioru płatności ale to się dzieje w tle.

Wiec pytanie brzmi jak to samo zrealizować u Was paynow.pl ?
W dokumentacji nie znajduje nic o analogicznym formularzu ?

Poprawka w dokumentacji notyfikacji

W README mamy opisane jak używać notyfikacji przy pomocy SDK, ale w dokumentacji nie ma nawet słowa co taka notyfikacja zwraca, w jakim formacie itd. Jest tylko opisane jak zmienić adres do notyfikacji.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.