paysys/tatrapay

Nette 框架中 Tatra bank TatraPay 网关的库。

v0.1-alpha.1 2017-03-07 11:18 UTC

This package is not auto-updated.

Last update: 2024-09-15 03:18:57 UTC


README

Build Status Code Quality Code Coverage Packagist MIT

在 Nette 框架中实现 TatraPay 网关(版本 4.0,支持 HMAC 和 ECDSA)的库,来自 Tatra Banka。

需求

需要 PHP 7.1 或更高版本。

使用通用库 PaySys\PaySys

安装

安装 Unique 的最佳方式是使用 ComposerPaySys/TatraPay

$ composer require paysys/tatrapay

配置

extensions:
	TatraPay: PaySys\TatraPay\DI\TatraPayExtension

TatraPay:
	mid: '1234'
	key: '64-bit hexadecimal string'

事件

对象 PaySys\PaySys\Button

服务 PaySys\TatraPay\Security\Response

示例

生成支付按钮

设置 PaySys\TatraPay\Payment

按钮需要 PaySys\PaySys\IConfiguration 服务。使用 DI 生成的工厂 PaySys\TatraPay\IButtonFactory 获取配置的 PaySys\PaySys\Button 组件。

现在在 PaySys\PaySys\Button 上设置 $onPayRequest 事件以重定向到 TatraPay 网关。签名重定向 URL 由服务 PaySys\TatraPay\Security\Request->getUrl(PaySys\TatraPay\Payment $payment) 生成。

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;
	}
}

处理支付响应

事件驱动处理

默认情况下,银行响应路由到包含的表示者 TatraPay:TatraPay:process。在这种情况下,将在服务 PaySys\TatraPay\Security\Response 上自动调用事件。

要使用事件处理支付,例如使用 Kdyby\Events

自定义表示者

还可以编写自定义的 Nette\Application\UI\Presenter 来处理支付。在这种情况下,事件的调用方式与前面的示例相同。

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');
	}
}

现在只需将路由添加到配置中

tatraPay:
	rurl: Order:processTatraPay

异常

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 {}