diff --git "a/.github/ISSUE_TEMPLATE/\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265-\320\276\320\261-\320\276\321\210\320\270\320\261\320\272\320\265.md" "b/.github/ISSUE_TEMPLATE/\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265-\320\276\320\261-\320\276\321\210\320\270\320\261\320\272\320\265.md"
new file mode 100644
index 0000000..92b4896
--- /dev/null
+++ "b/.github/ISSUE_TEMPLATE/\321\201\320\276\320\276\320\261\321\211\320\265\320\275\320\270\320\265-\320\276\320\261-\320\276\321\210\320\270\320\261\320\272\320\265.md"
@@ -0,0 +1,27 @@
+---
+name: Сообщение об ошибке
+about: Сообщение об ошибке
+title: ''
+labels: ''
+assignees: yourpayments
+
+---
+
+**Опишите ошибку**
+Понятное и полное описание проблемы
+
+**Как воспроизвести**
+Шаги для воспроизведения проблемы:
+1.
+2.
+3.
+
+**Скриншоты и вывод программы**
+Приведите скриншоты и/или тексты ошибок
+
+**Окружение: ваше ПО, например:**
+ - Версия PHP
+ - OS
+ - Браузер
+
+**Дополнительная информация**
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..0871971
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+version: 2
+updates:
+ - package-ecosystem: "Composer"
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
deleted file mode 100644
index 1ef7894..0000000
--- a/.github/workflows/php.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: PHP Composer
-
-on:
- push:
- branches: [ "main" ]
- pull_request:
- branches: [ "main" ]
-
-permissions:
- contents: read
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Validate composer.json and composer.lock
- run: composer validate --strict
-
- - name: Cache Composer packages
- id: composer-cache
- uses: actions/cache@v3
- with:
- path: vendor
- key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
- restore-keys: |
- ${{ runner.os }}-php-
-
- - name: Install dependencies
- run: composer install --prefer-dist --no-progress
-
- # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit"
- # Docs: https://getcomposer.org/doc/articles/scripts.md
-
- # - name: Run test suite
- # run: composer run-script test
diff --git a/.gitignore b/.gitignore
index a67d42b..ff93c1b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,9 @@
composer.phar
/vendor/
+.idea
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
# composer.lock
+
+.ai
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index e762b5f..d15a607 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
Условия лицензирования
-Copyright (c) 2022 PayU Russia
+Copyright (c) ООО НКО "Твои платежи" (YPMN.RU).
Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного обеспечения и сопутствующей
документации (в дальнейшем именуемыми "Программное Обеспечение"), использовать Программное Обеспечение без ограничений,
@@ -8,6 +8,8 @@ Copyright (c) 2022 PayU Russia
сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное
Программное Обеспечение, при соблюдении следующих условий:
+Данное программное обеспечение используется для обработки платежей через API ООО НКО "Твои платежи" (YPMN.RU).
+
Вышеупомянутый копирайт и данные условия должны быть включены во все копии или значимые части данного
Программного Обеспечения.
@@ -20,7 +22,7 @@ Copyright (c) 2022 PayU Russia
MIT License
-Copyright (c) 2022 PayU Russia
+Copyright (c) "Your Payments" Ltd (YPMN.RU).
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -29,6 +31,8 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
+Software is used to process payments with "Your Payments" Ltd (YPMN.RU).
+
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
diff --git a/README.md b/README.md
index f8f8d4b..e64d93f 100644
--- a/README.md
+++ b/README.md
@@ -1,378 +1,78 @@
-# php-payu4
-Примеры использования PayU API v4.
-
-PayU - многофункциональная платёжная система, поддерживающая не только простые платежи с банковских карт, но и множество
-форм оплаты, а также подписки и выплаты на карты.
-
-Данный репозиторий написан по принципам SOLID, и каждый программный интерфейс снабжен подробной документацией на
-русском языке.
-
-Репозиторий также содержит примеры по принципу "одна строка кода - одна строка документации".
+# «Твои Платежи»: Интеграция на PHP
+Готовая библиотека + подробные примеры с комментариями. Требования: [PHP 7.4 и выше](https://github.com/yourpayments/php-api-client/blob/main/composer.json)
-Репозиторий опубликован в виде [пакета Composer](https://packagist.org/packages/payuru/php-payu4) и может использоваться со всеми современными
-фреймворками: Laravel, Symfony, Yii и другими.
+
-Для работы рекомендуется использовать любую современную IDE (VS Code, Intellij Idea/PHPStorm,
-Eclipse, Netbeans, etc), чтобы получать подробные подсказки прямо во время редактирования кода.
-
+[Пакет Composer](https://packagist.org/packages/yourpayments/php-api-client) может
+использоваться с любыми фреймворками, платформами и CMS, включая, но не ограничиваясь: Laravel, Bitrix, Wordpress, Yii, Symfony, и др.
-
-## Требования
-Актуальные требования для использования пакета можно посмотреть
-в файле [composer.json](https://github.com/payuru/php-payu4/blob/main/composer.json)
-в секции "require"
-
-## Установка
-### Composer
-[Composer](https://getcomposer.org/) - это инструмент для управления зависимостями в PHP. Он позволяет вам объявить
-библиотеки, от которых зависит ваш проект, и он будет управлять ими (устанавливать/обновлять) за вас.
+## Установка за 1 минуту
```shell
-composer require payuru/php-payu4
-```
-
-```php
-// Для использования классов, например:
-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 без фреймворков
-Клонируйте или скачайте, а затем подключите файлы этого репозитория
-
-## Примеры использования
-### Начало работы
-```php
-// Создадим объект Мерчанта с помощью Идентификатора Мерчанта и Секретного Ключа Мерчанта
-$merchant = new Merchant('rudevru1', 'hE9I1?3@|C8@w[1I&=y)');
+composer require yourpayments/php-api-client
```
-### Создание (авторизация) платежа
-Метод создаёт платёж (транзакцию) в системе PayU.
-В зависимости от настройки, средства списываются либо сразу,
-либо после отправки метода "capture".
-#### Упрощённая интеграция, минимальный набор полей
-```php
- 'Заказ №' . $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' => '
- Извините, платёжный метод временно недоступен.
- Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.
-
-
' . $exception->getMessage() . '
',
- 'type' => 'danger',
- ]);
-}
-```
-#### Расширенные возможности, полный набор полей
-```php
-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,
-]);
+(если на вашем проекте нет composer, слонируйте или скачайте, а затем подключите ([require](https://www.php.net/manual/ru/function.require.php)) файлы этого репозитория)
-// Опишем Биллинговую (платёжную) информацию
-$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' => '
- Извините, платёжный метод временно недоступен.
- Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.
-
-
';
+
+const successIconSimple = '\n' +
+ ' ';
+
+const failureIconSimple = '\n' +
+ ' ';
+
+/*
+Вывод результата
+ */
+function viewResultSimple(success, title, messages, hideForm = false) {
+ document.getElementById('simple-tab-pane').innerHTML += resultBlockSimple;
+
+ if (success === true) {
+ document.getElementById('simple-icon').innerHTML = successIconSimple;
+ } else {
+ document.getElementById('simple-icon').innerHTML = failureIconSimple;
+ document.getElementById('simple-reset').style.display = 'block';
+ }
+
+ document.getElementById('simple-title').innerHTML = title;
+
+ let div = document.getElementById('simple-message');
+ for (const key in messages) {
+ div.innerHTML += '' + messages[key] + '';
+ }
+
+ if (hideForm === true) {
+ document.getElementById('simple-form').style.display = 'none';
+ }
+ document.getElementById('simple-load').style.display = 'none';
+ document.getElementById('simple-result').style.display = 'flex';
+}
+
+/*
+Вывод информации о редиректе на проверку 3-D Secure
+ */
+function viewRedirectSimple(title, hideForm = false) {
+ document.getElementById('simple-tab-pane').innerHTML += resultBlockSimple;
+
+ document.getElementById('simple-title').innerHTML = title;
+
+ if (hideForm === true) {
+ document.getElementById('simple-form').style.display = 'none';
+ }
+ document.getElementById('simple-load').style.display = 'none';
+ document.getElementById('simple-result').style.display = 'flex';
+}
diff --git a/composer.json b/composer.json
index 10ecf7c..dbe6829 100644
--- a/composer.json
+++ b/composer.json
@@ -1,10 +1,10 @@
{
- "name": "payuru/php-payu4",
- "description": "PayU - powerful payment gateway PHP integration",
+ "name": "yourpayments/php-api-client",
+ "description": "Your Payments - powerful payment gateway PHP integration",
"type": "package",
"keywords": ["payments", "processing"],
"require": {
- "php": ">=8.1.0",
+ "php": ">=7.4.0",
"ext-json": "*",
"ext-curl": "*",
"ext-mbstring": "*"
@@ -12,15 +12,15 @@
"license": "mit",
"authors": [
{
- "name": "PayU Team",
- "email": "help@payu.ru",
- "homepage": "https://dev.payu.ru/ru/documents/apiv4/"
+ "name": "YPMN Team",
+ "email": "itsupport@ypmn.ru",
+ "homepage": "https://dev.ypmn.ru/ru/documents/apiv4/"
}
],
"minimum-stability": "dev",
"autoload": {
"psr-4": {
- "payuru\\phpPayu4\\": "src/"
+ "Ypmn\\": "src/"
}
}
}
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..8d91d2c
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,20 @@
+version: '4'
+name: php-api-client
+
+services:
+ nginx:
+ image: nginx:latest
+ volumes:
+ - ./docker/nginx/.conf:/etc/nginx/conf.d/default.conf
+ - ./:/var/www/php-api-client
+ - ./docker/nginx/logs:/var/log/nginx
+ ports:
+ - "8080:80"
+ depends_on:
+ - php
+ container_name: php-api-client-nginx-container
+ php:
+ build: ./docker/php
+ volumes:
+ - ./:/var/www/php-api-client
+ container_name: php-api-client-php-container
\ No newline at end of file
diff --git a/docker/nginx/.conf b/docker/nginx/.conf
new file mode 100644
index 0000000..508c4b8
--- /dev/null
+++ b/docker/nginx/.conf
@@ -0,0 +1,17 @@
+server {
+ server_name php-api-client;
+ root /var/www/php-api-client;
+
+ index index.php;
+
+ location ~ \.php$ {
+ fastcgi_pass php:9000;
+
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
+ fastcgi_param DOCUMENT_ROOT $realpath_root;
+ }
+
+ error_log /var/log/nginx/project_error.log;
+ access_log /var/log/nginx/project_access.log;
+}
\ No newline at end of file
diff --git a/docker/nginx/logs/.gitignore b/docker/nginx/logs/.gitignore
new file mode 100644
index 0000000..c96a04f
--- /dev/null
+++ b/docker/nginx/logs/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile
new file mode 100644
index 0000000..521728d
--- /dev/null
+++ b/docker/php/Dockerfile
@@ -0,0 +1,5 @@
+FROM php:8.3-fpm
+
+RUN apt-get update && apt-get install -y curl libcurl4-openssl-dev libmcrypt-dev libonig-dev
+
+RUN docker-php-ext-install curl mbstring
\ No newline at end of file
diff --git a/example.php b/example.php
index b9aeee5..0bb7cb0 100644
--- a/example.php
+++ b/example.php
@@ -1,6 +1,6 @@
'Заказ №' . $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' => '
- Извините, платёжный метод временно недоступен.
- Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.
-
-
' . $exception->getMessage() . '
',
- 'type' => 'danger',
- ]);
-
- throw new PaymentException('Платёжный метод временно недоступен');
- }
+ case 'start':
+ include './src/Examples/'.$_GET['function'] . '.php';
break;
+ case 'simpleGetPaymentLink':
case 'getPaymentLink':
- // Оплата по ссылке 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' => 160000,
- '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(),
- ]);
-
- // Либо сделаем редирект (перенаправление) браузера по адресу оплаты:
- // echo Std::redirect($responseData["paymentResult"]['url']);
- } catch (Exception $exception) {
- //TODO: обработка исключения
- echo Std::alert([
- 'text' => '
- Извините, платёжный метод временно недоступен.
- Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.
-
-
' . $exception->getMessage() . '
',
- 'type' => 'danger',
- ]);
-
- throw new PaymentException('Платёжный метод временно недоступен');
- }
- break;
-
+ case 'getPaymentLinkMarketplace':
+ case 'getToken':
+ case 'paymentByToken':
case 'paymentCapture':
- // Запрос на списание денег
- // В зависимости от настройки мерчанта, PayU может списывать денежные средства автоматически,
- // Либо с помощью дополнительного запроса, описанного ниже.
-
- // Создадим такой запрос:
- $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);
-
- break;
case 'paymentGetStatus':
- // Получить номер транзакции в PayU
-
- // Номер заказа
- $merchantPaymentReference = 'primer_nomer__184';
- // Создадим HTTP-запрос к API
- $apiRequest = new ApiRequest($merchant);
- // Включить режим отладки (удалите в рабочей программе!)
- $apiRequest->setDebugMode();
- // Переключиться на тестовый сервер (удалите в рабочей программе!)
- $apiRequest->setSandboxMode();
- // Отправим запрос к API
- $responseData = $apiRequest->sendStatusRequest($merchantPaymentReference);
-
- break;
+ case 'payoutCreate':
case 'paymentWebhook':
- //сформировать вебхук
- break;
case 'paymentRefund':
- // Инициировать возврат средств
-
- // Создадим запрос
- $refund = (new Refund);
-
- // Установим номер платежа PayU - возвращается в ответ на запрос на авторизацию платежа в JSON Response
- // См. пример с запросом Payment выше
- $refund->setPayuPaymentReference(2297597);
- // Cумма исходной операции на авторизацию
- $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);
- break;
-
+ case 'paymentRefundMarketplace':
+ case 'getSession':
+ case 'oneTimeTokenPayment':
case 'returnPage':
- // Страница после оплаты:
- echo '
Благодарим за оплату
Чек выслан вам на почту.';
- echo '
$_GET: ' . print_r($_GET, true) . '
';
- echo '
$_POST: ' . print_r($_POST, true) . '
';
+ case 'secureFields':
+ case 'getReportGeneral':
+ case 'getReportChart':
+ case 'getReportOrder':
+ case 'getReportOrderDetails':
+ case 'getFasterPayment':
+ case 'getBindingFasterPayment':
+ case 'paymentByFasterBinding':
+ case 'qstCreateOrg':
+ case 'qstCreateIp':
+ case 'qstStatus':
+ case 'qstPrint':
+ case 'SOMGetPaymentLink':
+ case 'qstList':
+ require './src/Examples/start.php';
+ @include './src/Examples/'.$_GET['function'] . '__prepend.php';
+ require './src/Examples/'.$_GET['function'] . '.php';
break;
default:
@@ -342,5 +73,3 @@
echo $e->getHtmlMessage();
}
}
-
-include 'example_template.html';
diff --git a/example_footer.html b/example_footer.html
new file mode 100644
index 0000000..be78c5b
--- /dev/null
+++ b/example_footer.html
@@ -0,0 +1,12 @@
+
+
+
+
+