PHP (7.2+) SDK для интеграции с интернет-эквайрингом от Uniteller (не официальная). Также, SDK интегрирован с библиотекой Payum и вы можете использовать этот шлюз для работы.
Реализовано:
- оплата (метод
pay
) - рекуррентные платежи (метод
recurrent
) - отмена (метод
unblock
) - получение результатов
- callback (проверка сигнатуры)
- обработчик ошибок, кидает эксепшены даже на строку
ERROR: %s
в теле ответа на запрос - единство статусов.
Что осталось:
- прикрутить валидацию, используя декораторы
- добавить билдер для метода
results
- метод
card
- метод
confirm
Чтобы установить пакет, достаточно подключить его в проект, как зависимость:
composer require tmconsulting/uniteller-php-sdk
Примеры использования SDK лежат в папке ./examples
, а так-же README.md
файл,
в котором написан способ установки.
<?php
$uniteller = new \Tmconsulting\Uniteller\Client();
$uniteller->setShopId('you_shop_id');
$uniteller->setLogin('you_login_number');
$uniteller->setPassword('you_password');
$uniteller->setBaseUri('https://wpay.uniteller.ru');
Чтобы произвести оплату, достаточно вызвать метод payment
,
он принимает первым аргументом либо построитель запроса, либо обычный массив параметров.
<?php
use Tmconsulting\Uniteller\Payment\PaymentBuilder;
$builder = new PaymentBuilder();
$builder
->setOrderIdp(mt_rand(10000, 99999))
->setSubtotalP(10)
->setCustomerIdp(mt_rand(10000, 99999))
->setUrlReturnOk('http://google.ru/?q=success')
->setUrlReturnNo('http://google.ru/?q=failure');
$uniteller->payment($builder)->go();
// Если переходить к оплате сразу нет необходимости,
// можно получить готовую ссылку для оплаты
// $uniteller->payment($builder)->getUri();
или
<?php
$uniteller->payment([
'Order_IDP' => mt_rand(10000, 99999),
// ... прочие параметры
])->go();
<?php
use Tmconsulting\Uniteller\Recurrent\RecurrentBuilder;
$builder = (new RecurrentBuilder())
->setOrderIdp(mt_rand(10000, 99999))
->setSubtotalP(15)
->setParentOrderIdp(00000) // id заказа магазина из ранее оплаченных в uniteller
->setParentShopIdp($uniteller->getShopId()); // не обязательно задавать, если родительский платеж из того же магазина
$results = $uniteller->recurrent($builder);
или
<?php
$results = $uniteller->recurrent([
'Order_IDP' => mt_rand(10000, 99999),
// ...
]);
<?php
use Tmconsulting\Uniteller\Cancel\CancelBuilder;
$builder = (new CancelBuilder())->setBillNumber('RRN Number, (12 digits)');
$results = $uniteller->cancel($builder);
или
<?php
use Tmconsulting\Uniteller\Order\Status;
$results = $uniteller->cancel([
'Billnumber' => 'RRN Number, (12 digits)',
// ...
]);
var_dump($results);
foreach ($results as $payment) {
// смотрите в Tmconsulting\Uniteller\Order\Order остальные методы.
if ($payment->getStatus() === Status::CANCELLED) {
// платеж отменён
}
}
<?php
$results = $uniteller->results([
'ShopOrderNumber' => 'Order_IDP number'
]);
var_dump($results);
// $results[0]->getCardNumber();
Проверка сигнатуры при приёме данных от шлюза.
<?php
if (! $uniteller->verifyCallbackRequest(['all_parameters_from_post_with_signature'])) {
return 'invalid_signature';
}
vendor/bin/phpunit
MIT.