Nette 框架中 Tatra 银行 CardPay 网关的库。
Requires
- php: >=7.1
- nette/application: >=2.3
- nette/di: >=2.4
- nette/http: >=2.3
- nette/utils: >=2.4
- paysys/paysys: ^0.1
Requires (Dev)
- ext-mbstring: *
- jakub-onderka/php-parallel-lint: ~1.0
- nette/tester: ~2.1
- phpstan/phpstan: ~0.10.6
- phpstan/phpstan-nette: ~0.6
This package is not auto-updated.
Last update: 2024-09-14 20:30:32 UTC
README
实现 Tatra 银行 CardPay 网关(版本 1.5,支持 HMAC & ECDSA)的库,在 Nette 框架中。
需求
需要 PHP 7.1 或更高版本。
使用通用库 PaySys\PaySys。
安装
安装 Unique 的最佳方法是使用 Composer 包 PaySys/CardPay
。
$ composer require paysys/cardpay
配置
extensions: cardPay: PaySys\CardPay\DI\CardPayExtension cardPay: mid: '1234' key: '64-bit hexadecimal string'
事件
对象 PaySys\PaySys\Button
服务 PaySys\CardPay\Security\Response
示例
生成支付按钮
设置 PaySys\CardPay\Payment
。
按钮需要 PaySys\PaySys\IConfiguration
服务。使用 DI 生成的工厂 PaySys\PaySys\IButtonFactory
来获取配置的 PaySys\PaySys\Button
组件。
现在在 PaySys\PaySys\Button
上设置 $onPayRequest
事件,以重定向到 CardPay 网关。由服务 PaySys\CardPay\Security\Request->getUrl(PaySys\CardPay\Payment $payment)
生成的签名重定向 URL。
class OrderPresenter extends Presenter { /** @var \PaySys\PaySys\IButtonFactory @inject */ public $cardPayButtonFactory; /** @var \PaySys\CardPay\Security\Request @inject */ public $cardPayRequest; protected function createComponentCardPayButton() { $payment = new \PaySys\CardPay\Payment("12.34", "00456", "John Doe"); $button = $this->cardPayButtonFactory->create($payment); $button->onPayRequest[] = function ($payment) { $this->redirectUrl($this->cardPayRequest->getUrl($payment)); }; return $button; } }
处理支付响应
事件驱动处理
默认情况下,银行响应路由到包含的演示者 CardPay:CardPay:process
。在这种情况下,将自动在服务 PaySys\CardPay\Security\Response
上调用事件。
例如,使用 Kdyby\Events 通过事件处理支付。
自己的演示者
还可以编写自己的 Nette\Application\UI\Presenter
来处理支付。在这种情况下,事件的调用方式与前面的示例相同。
class OrderPresenter extends Presenter { /** @var Nette\Http\IRequest @inject */ public $httpRequest; /** @var \PaySys\CardPay\Security\Response @inject */ public $bankResponse; public function actionProcessCardPay() { 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'); } }
现在只需在配置中添加路由
cardPay: rurl: Order:processCardPay
异常
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 {}