Nette 框架中 Tatra 银行 CardPay 网关的库。

v0.1.2 2019-10-06 23:59 UTC

This package is not auto-updated.

Last update: 2024-09-14 20:30:32 UTC


README

Build Status Code Quality Code Coverage Packagist MIT

实现 Tatra 银行 CardPay 网关(版本 1.5,支持 HMAC & ECDSA)的库,在 Nette 框架中。

需求

需要 PHP 7.1 或更高版本。

使用通用库 PaySys\PaySys

安装

安装 Unique 的最佳方法是使用 ComposerPaySys/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 {}