payuru / php-payu4
PayU - powerful payment gateway PHP integration
Installs: 50
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 2
Forks: 3
Open Issues: 2
Type:package
Requires
- php: >=8.1.0
- ext-curl: *
- ext-json: *
- ext-mbstring: *
This package is auto-updated.
Last update: 2024-12-11 13:31:36 UTC
README
Примеры использования PayU API v4.
PayU - многофункциональная платёжная система, поддерживающая не только простые платежи с банковских карт, но и множество форм оплаты, а также подписки и выплаты на карты.
Данный репозиторий написан по принципам SOLID, и каждый программный интерфейс снабжен подробной документацией на русском языке.
Репозиторий также содержит примеры по принципу "одна строка кода - одна строка документации".
Репозиторий опубликован в виде пакета Composer и может использоваться со всеми современными фреймворками: Laravel, Symfony, Yii и другими.
Для работы рекомендуется использовать любую современную IDE (VS Code, Intellij Idea/PHPStorm, Eclipse, Netbeans, etc), чтобы получать подробные подсказки прямо во время редактирования кода.
Требования
Актуальные требования для использования пакета можно посмотреть в файле composer.json в секции "require"
Установка
Composer
Composer - это инструмент для управления зависимостями в PHP. Он позволяет вам объявить библиотеки, от которых зависит ваш проект, и он будет управлять ими (устанавливать/обновлять) за вас.
composer require payuru/php-payu4
// Для использования классов, например: use payuru\phpPayu4\Authorization; use payuru\phpPayu4\Delivery; use payuru\phpPayu4\IdentityDocument; use payuru\phpPayu4\Merchant; use payuru\phpPayu4\Payment; use payuru\phpPayu4\Client; use payuru\phpPayu4\Billing; use payuru\phpPayu4\ApiRequest; use payuru\phpPayu4\PaymentException; use payuru\phpPayu4\Product; use payuru\phpPayu4\Capture; use payuru\phpPayu4\Refund; use payuru\phpPayu4\Std; // Подключите загрузчик классов от Composer require vendor/autoload.php;
PHP без фреймворков
Клонируйте или скачайте, а затем подключите файлы этого репозитория
Примеры использования
Начало работы
// Создадим объект Мерчанта с помощью Идентификатора Мерчанта и Секретного Ключа Мерчанта $merchant = new Merchant('rudevru1', 'hE9I1?3@|C8@w[1I&=y)');
Создание (авторизация) платежа
Метод создаёт платёж (транзакцию) в системе PayU. В зависимости от настройки, средства списываются либо сразу, либо после отправки метода "capture".
Упрощённая интеграция, минимальный набор полей
<?php // Оплата по ссылке PayU // Минимальный набор полей // Представим, что мы не хотим передавать товары, только номер заказа и сумму // Установим номер (ID) заказа (номер заказа в вашем магазине, должен быть уникален в вашей системе) $merchantPaymentReference = "order_id_" . time(); $orderAsProduct = new Product([ 'name' => 'Заказ №' . $merchantPaymentReference, 'sku' => $merchantPaymentReference, 'unitPrice' => 1.42, 'quantity' => 2, ]); // Опишем Биллинговую (платёжную) информацию $billing = new Billing; // Установим Код страны $billing->setCountryCode('RU'); // Установим Имя Плательщика $billing->setFirstName('Иван'); // Установим Фамилия Плательщика $billing->setLastName('Петров'); // Установим Email Плательщика $billing->setEmail('test1@payu.ru'); // Установим Телефон Плательщика $billing->setPhone('+7-800-555-35-35'); // Установим Город $billing->setCity('Москва'); // Создадим клиентское подключение $client = new Client; // Установим биллинг $client->setBilling($billing); // Создадим платёж $payment = new Payment; // Установим позиции $payment->addProduct($orderAsProduct); // Установим валюту $payment->setCurrency('RUB'); // Создадим и установим авторизацию по типу платежа $payment->setAuthorization(new Authorization('CCVISAMC',true)); // Установим номер заказа (должен быть уникальным в вашей системе) $payment->setMerchantPaymentReference($merchantPaymentReference); // Установим адрес перенаправления пользователя после оплаты $payment->setReturnUrl('http://127.0.0.1:8080/?function=returnPage'); // Установим клиентское подключение $payment->setClient($client); // Создадим HTTP-запрос к API $apiRequest = new ApiRequest($merchant); // Включить режим отладки (удалите в рабочей программе!) $apiRequest->setDebugMode(); // Переключиться на тестовый сервер (удалите в рабочей программе!) $apiRequest->setSandboxMode(); // Отправим запрос $responseData = $apiRequest->sendAuthRequest($payment, $merchant); // Преобразуем ответ из JSON в массив try { $responseData = json_decode((string) $responseData["response"], true); // Нарисуем кнопку оплаты echo Std::drawPayuButton([ 'url' => $responseData["paymentResult"]['url'], 'sum' => $payment->sumProductsAmount(), ]); // .. или сделаем редирект на форму оплаты (опционально) // Std::redirect($responseData["paymentResult"]['url']); } catch (Exception $exception) { //TODO: обработка исключения echo Std::alert([ 'text' => ' Извините, платёжный метод временно недоступен.<br> Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.<br> <br> <pre>' . $exception->getMessage() . '</pre>', 'type' => 'danger', ]); }
Расширенные возможности, полный набор полей
<?php // Оплата по ссылке PayU // Представим, что нам надо оплатить пару позиций: Синий Мяч и Жёлтый Круг // Опишем первую позицию $product1 = new Product; // Установим Наименование (название товара или услуги) $product1->setName('Синий Мяч'); // Установим Артикул $product1->setSku('ball-05'); // Установим Стоимость за единицу $product1->setUnitPrice('500'); // Установим Количество $product1->setQuantity(1); // Установим НДС $product1->setVat(20); //Опишем вторую позицию с помощью сокращённого синтаксиса: $product2 = new Product([ 'name' => 'Жёлтый Круг', 'sku' => 'toy-15', 'unitPrice' => '1600', 'quantity' => '3', 'vat' => 0, ]); // Опишем Биллинговую (платёжную) информацию $billing = new Billing; // Установим Код страны $billing->setCountryCode('RU'); // Установим Город $billing->setCity('Москва'); // Установим Регион $billing->setState('Центральный регион'); // Установим Адрес Плательщика (первая строка) $billing->setAddressLine1('Улица Старый Арбат, дом 10'); // Установим Адрес Плательщика (вторая строка) $billing->setAddressLine1('Офис PayU'); // Установим Почтовый Индекс Плательщика $billing->setZipCode('121000'); // Установим Имя Плательщика $billing->setFirstName('Иван'); // Установим Фамилия Плательщика $billing->setLastName('Петров'); // Установим Телефон Плательщика $billing->setPhone('+79670660742'); // Установим Email Плательщика $billing->setEmail('test1@payu.ru'); // (необязательно) Опишем Доствку и принимающее лицо $delivery = new Delivery; // Установим документ, подтверждающий право приёма доставки $delivery->setIdentityDocument( new IdentityDocument('123456', 'PERSONALID') ); // Установим Код страны $delivery->setCountryCode('RU'); // Установим Город $delivery->setCity('Москва'); // Установим Регион $delivery->setState('Центральный регион'); // Установим Адрес Лица, принимающего заказ (первая строка) $delivery->setAddressLine1('Улица Старый Арбат, дом 10'); // Установим Адрес Лица, принимающего заказ (вторая строка) $delivery->setAddressLine1('Офис PayU'); // Установим Почтовый Индекс Лица, принимающего заказ $delivery->setZipCode('121000'); // Установим Имя Лица, принимающего заказ $delivery->setFirstName('Мария'); // Установим Фамилия Лица, принимающего заказ $delivery->setLastName('Петрова'); // Установим Телефон Лица, принимающего заказ $delivery->setPhone('+79670660743'); // Установим Email Лица, принимающего заказ $delivery->setEmail('test2@payu.ru'); // Установим Название Компании, в которой можно оставить заказ $delivery->setCompanyName('ООО "Вектор"'); // Создадим клиентское подключение $client = new Client; // Установим биллинг $client->setBilling($billing); // Установим доставку $client->setDelivery($delivery); // Установим IP (автоматически) $client->setCurrentClientIp(); // И Установим время (автоматически) $client->setCurrentClientTime(); // Создадим платёж $payment = new Payment; // Установим позиции $payment->addProduct($product1); $payment->addProduct($product2); // Установим валюту $payment->setCurrency('RUB'); // Создадим и установим авторизацию по типу платежа $payment->setAuthorization(new Authorization('CCVISAMC',true)); // Установим номер заказа (должен быть уникальным в вашей системе) $payment->setMerchantPaymentReference('primer_nomer__' . time()); // Установим адрес перенаправления пользователя после оплаты $payment->setReturnUrl('http://127.0.0.1:8080/?function=returnPage'); // Установим клиентское подключение $payment->setClient($client); // Создадим HTTP-запрос к API $apiRequest = new ApiRequest($merchant); // Включить режим отладки (удалите в рабочей программе!) $apiRequest->setDebugMode(); // Переключиться на тестовый сервер (удалите в рабочей программе!) $apiRequest->setSandboxMode(); // Отправим запрос $responseData = $apiRequest->sendAuthRequest($payment, $merchant); // Преобразуем ответ из JSON в массив try { $responseData = json_decode((string) $responseData["response"], true); // Нарисуем кнопку оплаты echo Std::drawPayuButton([ 'url' => $responseData["paymentResult"]['url'], 'sum' => $payment->sumProductsAmount(), ]); // .. или сделаем редирект на форму оплаты (опционально) // Std::redirect($responseData["paymentResult"]['url']); } catch (Exception $exception) { //TODO: обработка исключения echo Std::alert([ 'text' => ' Извините, платёжный метод временно недоступен.<br> Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.<br> <br> <pre>' . $exception->getMessage() . '</pre>', 'type' => 'danger', ]); }
Страница пользователя после совершения платежа
Данные о состоянии платежа после его создания передаются в параметрах POST ($_POST)
print_r($_POST);
Получить номер транзакции в PayU (GetStatus)
<php // Получить номер транзакции в PayU // Номер заказа $merchantPaymentReference = 'primer_nomer__184'; // Создадим HTTP-запрос к API $apiRequest = new ApiRequest($merchant); // Включить режим отладки (удалите в рабочей программе!) $apiRequest->setDebugMode(); // Переключиться на тестовый сервер (удалите в рабочей программе!) $apiRequest->setSandboxMode(); // Отправим запрос к API $responseData = $apiRequest->sendStatusRequest($merchantPaymentReference);
Списание средств (Capture)
В зависимости от настройки мерчанта, PayU может списывать денежные средства автоматически, // Либо с помощью дополнительного запроса, описанного ниже.
<php // Запрос на списание денег // Создадим такой запрос: $capture = (new Capture); // Номер платежа PayU (возвращается в ответ на запрос на авторизацию в JSON Response) $capture->setPayuPaymentReference(2297597); // Cумма исходной операции на авторизацию $capture->setOriginalAmount(5300); // Cумма фактического списания $capture->setAmount(3700); // Валюта $capture->setCurrency('RUB'); // Создадим HTTP-запрос к API $apiRequest = new ApiRequest($merchant); // Включить режим отладки (удалите в рабочей программе!) $apiRequest->setDebugMode(); // Переключиться на тестовый сервер (удалите в рабочей программе!) $apiRequest->setSandboxMode(); // Отправим запрос к API $responseData = $apiRequest->sendCaptureRequest($capture, $merchant);
Отмена платежа (Refund)
<?php // Инициировать возврат средств // Создадим запрос $refund = (new Refund); // Установим номер платежа PayU - возвращается в ответ на запрос на авторизацию платежа в JSON Response // См. пример с запросом Payment выше $refund->setPayuPaymentReference(2297597); // Cумма исходной операции на списание (Capture) // Пример: если сумма авторизации была 5300, а сумма списания 3700 (частичное списание), указать 3700 $refund->setOriginalAmount(3700); // Cумма фактического списания $refund->setAmount(3700); // Установим валюту $refund->setCurrency('RUB'); // Создадим HTTP-запрос к API $apiRequest = new ApiRequest($merchant); // Включить режим отладки (удалите в рабочей программе!) $apiRequest->setDebugMode(); // Переключиться на тестовый сервер (удалите в рабочей программе!) $apiRequest->setSandboxMode(); // Отправим запрос к API $responseData = $apiRequest->sendRefundRequest($refund, $merchant);
Ссылки
- Докуметация по API
- Основной сайт PayU Россия
- Начните знакомство с кодом с этих файлов: example.php и класса PaymentInterface.php
- Задать вопрос или сообщить о проблеме