PaySys\TatraPay
, (*1)
Library for implement TatraPay gateway (v4.0 with HMAC & ECDSA) from Tatra Banka in Nette framework., (*2)
Requirements
Requires PHP 7.1 or later., (*3)
Use universal libraty PaySys\PaySys., (*4)
Installation
The best way to install Unique is use Composer package PaySys/TatraPay
., (*5)
$ composer require paysys/tatrapay
Configuration
extensions:
TatraPay: PaySys\TatraPay\DI\TatraPayExtension
TatraPay:
mid: '1234'
key: '64-bit hexadecimal string'
Events
Event |
Parameters |
Description |
$onBeforePayRequest |
\PaySys\PaySys\IPayment $payment |
Occurs before pay request |
$onPayRequest |
\PaySys\PaySys\IPayment $payment |
Occurs on pay request |
Service PaySys\TatraPay\Security\Response
Event |
Parameters |
Description |
$onResponse |
array $parameters |
Occurs on response from bank |
$onSuccess |
array $parameters |
Occurs on success payment response from bank |
$onFail |
array $parameters |
Occurs on fail payment response from bank |
$onError |
array $parameters, \PaySys\PaySys\Exception $e |
Occurs on damaged response from bank |
Example
Set PaySys\TatraPay\Payment
., (*6)
Button need PaySys\PaySys\IConfiguration
service. Use DI generated factory PaySys\TatraPay\IButtonFactory
for getting configured PaySys\PaySys\Button
component., (*7)
Now set $onPayRequest
event on PaySys\PaySys\Button
for redirect to TatraPay gateway. Signed redirect URL is genereated by service PaySys\TatraPay\Security\Request->getUrl(PaySys\TatraPay\Payment $payment)
., (*8)
class OrderPresenter extends Presenter
{
/** @var \PaySys\TatraPay\IButtonFactory @inject */
public $tatraPayButtonFactory;
/** @var \PaySys\TatraPay\Security\Request @inject */
public $tatraPayRequest;
protected function createComponentTatraPayButton()
{
$payment = new \PaySys\TatraPay\Payment("12.34", "00456", "John Doe");
$button = $this->tatraPayButtonFactory->create($payment);
$button->onPayRequest[] = function ($payment) {
$this->redirectUrl($this->TatraPayRequest->getUrl($payment));
};
return $button;
}
}
Process payment response
Event-driven processing
Default is Bank response routed to included presenter TatraPay:TatraPay:process
. In this case are automatic called events on service PaySys\TatraPay\Security\Response
., (*9)
For processing payment by events use for example Kdyby\Events., (*10)
Own presenter
Too it's possible write own Nette\Application\UI\Presenter
for hnadling payment. In this case are events called same as before example., (*11)
class OrderPresenter extends Presenter
{
/** @var Nette\Http\IRequest @inject */
public $httpRequest;
/** @var \PaySys\TatraPay\Security\Response @inject */
public $bankResponse;
public function actionProcessTatraPay()
{
try {
$this->bankResponse->paid($this->httpRequest->getQuery());
// store info about payment
$this->flashMessage('Thanks for payment.', 'success');
} catch (\PaySys\PaySys\Exception $e) {
// log
$this->flashMessage('Payment failed. Please try it later.', 'danger');
}
$this->redirect('finish');
}
}
Now just add route to configuration:, (*12)
tatraPay:
rurl: Order:processTatraPay
Exceptions
class \PaySys\PaySys\Exception extends \Exception {}
class \PaySys\PaySys\SignatureException extends \PaySys\PaySys\Exception {}
class \PaySys\PaySys\ServerException extends \PaySys\PaySys\Exception {}
class \PaySys\PaySys\InvalidArgumentException extends \PaySys\PaySys\Exception {}
class \PaySys\PaySys\ConfigurationException extends \PaySys\PaySys\Exception {}