Skip to content

Commit e51b708

Browse files
author
Ruslan Plotnikov
committed
YP-1357 Add ypmnBindingId examples
1 parent 169ab5b commit e51b708

4 files changed

Lines changed: 333 additions & 0 deletions

File tree

example.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
case 'getFasterPaymentWithReceipts':
4242
case 'getBindingFasterPayment':
4343
case 'paymentByFasterBinding':
44+
case 'paymentByBindingPays':
45+
case 'getBindingPays':
4446
case 'qstCreateOrg':
4547
case 'qstCreateIp':
4648
case 'qstStatus':

example_list.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,18 @@
5252
'docLink' => 'https://ypmn.ru/ru/documentation/',
5353
'link' => '',
5454
],
55+
'getBindingPays' => [
56+
'name' => 'Создание токена SberPay',
57+
'about' => 'В этом примере отправляется запрос на создание токена SberPay с одновременной оплатой',
58+
'docLink' => 'https://ypmn.ru/ru/documentation/#tag/payment-api/paths/~1v4~1payments~1authorize/post',
59+
'link' => '',
60+
],
61+
'paymentByBindingPays' => [
62+
'name' => 'Оплата по токену SberPay',
63+
'about' => 'Это пример демонстрирует оплату через SberPay по средством ранее созданного токена',
64+
'docLink' => 'https://ypmn.ru/ru/documentation/#tag/payment-api/paths/~1v4~1payments~1authorize/post',
65+
'link' => '',
66+
],
5567
'getPaymentLinkMarketplace' => [
5668
'name' => 'Платёж со сплитом',
5769
'about' => 'Это пример платежа со сплитом (разделением оплаты на несколько плательщиков).',

src/Examples/getBindingPays.php

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
<?php
2+
/**
3+
* getBindingPays.php
4+
*/
5+
declare(strict_types=1);
6+
7+
use Ypmn\Product;
8+
use Ypmn\ApiRequest;
9+
use Ypmn\Billing;
10+
use Ypmn\Delivery;
11+
use Ypmn\IdentityDocument;
12+
use Ypmn\Client;
13+
use Ypmn\Payment;
14+
use Ypmn\Authorization;
15+
use Ypmn\PaymentException;
16+
use Ypmn\Std;
17+
use Ypmn\StoredCredentials;
18+
19+
// Подключим файл, в котором заданы параметры мерчанта
20+
include_once 'start.php';
21+
22+
/** @var \Ypmn\Merchant $merchant */
23+
24+
/*
25+
* Оплата через SberPay с запросом на создание токена
26+
*/
27+
28+
/* Опишем первую позицию */
29+
$product1 = new Product();
30+
$product1->setName('Круассаны Цезарь'); // Установим Наименование товара или услуги
31+
$product1->setSku('toy-01'); // Установим Артикул
32+
$product1->setVat(20); // Установим НДС
33+
$product1->setUnitPrice(10); // Установим Стоимость за единицу
34+
$product1->setQuantity(1); // Установим Количество
35+
36+
/* Опишем вторую позицию с помощью сокращённого синтаксиса */
37+
$product2 = new Product([
38+
'name' => 'Ассорти рулетиков Нежность',
39+
'sku' => 'toy-02',
40+
'unitPrice' => 8,
41+
'quantity' => 3,
42+
'vat' => 10,
43+
]);
44+
45+
/* Опишем третью позицию с помощью JSON */
46+
$product3 = new Product(
47+
json_decode(
48+
'{
49+
"name": "Ассорти мини-десертов",
50+
"sku": "toy-03",
51+
"unitPrice": 12,
52+
"quantity": 2,
53+
"vat": 0
54+
}',
55+
true
56+
)
57+
);
58+
59+
/* Опишем Биллинговую (платёжную) информацию */
60+
$billing = new Billing;
61+
$billing->setCountryCode('RU'); // Установим Код страны
62+
$billing->setCity('Москва'); // Установим Город
63+
$billing->setState('Центральный регион'); // Установим Регион
64+
$billing->setAddressLine1('Улица Старый Арбат, дом 10'); // Установим Адрес Плательщика (первая строка)
65+
$billing->setAddressLine2('Офис Ypmn'); // Установим Адрес Плательщика (вторая строка)
66+
$billing->setZipCode('121000'); // Установим Почтовый Индекс Плательщика
67+
$billing->setFirstName('Иван'); // Установим Имя Плательщика
68+
$billing->setLastName('Петров'); // Установим Фамилия Плательщика
69+
$billing->setPhone('9670660742'); // Установим Телефон Плательщика
70+
$billing->setEmail('develop@ypmn.ru'); // Установим Email Плательщика
71+
72+
/* Опишем Доствку и принимающее лицо (необязательно) */
73+
$delivery = new Delivery;
74+
// Установим документ, подтверждающий право приёма доставки
75+
$delivery->setIdentityDocument(
76+
new IdentityDocument(123456, 'PERSONALID')
77+
);
78+
$delivery->setCountryCode('RU'); // Установим Код страны
79+
$delivery->setCity('Москва'); // Установим Город
80+
$delivery->setState('Центральный регион'); // Установим Регион
81+
$delivery->setAddressLine1('Улица Старый Арбат, дом 10'); // Установим Адрес Лица, принимающего заказ (первая строка)
82+
$delivery->setAddressLine2('Офис Ypmn'); // Установим Адрес Лица, принимающего заказ (вторая строка)
83+
$delivery->setZipCode('121000'); // Установим Почтовый Индекс Лица, принимающего заказ
84+
$delivery->setFirstName('Мария'); // Установим Имя Лица, принимающего заказ
85+
$delivery->setLastName('Петрова'); // Установим Фамилия Лица, принимающего заказ
86+
$delivery->setPhone('89670660743'); // Установим Телефон Лица, принимающего заказ
87+
$delivery->setEmail('develop@ypmn.ru'); // Установим Email Лица, принимающего заказ
88+
$delivery->setCompanyName('ООО "Вектор"'); // Установим Название Компании, в которой можно оставить заказ
89+
90+
/* Создадим клиентское подключение */
91+
$client = new Client;
92+
$client->setBilling($billing); // Установим биллинг
93+
$client->setDelivery($delivery); // Установим доставку
94+
$client->setCurrentClientIp(); // Установим IP (автоматически)
95+
$client->setCurrentClientTime(); // И Установим время (автоматически)
96+
97+
/* Создадим платёж */
98+
$payment = new Payment;
99+
$payment->addProduct($product1); // Установим товарную позицию 1
100+
$payment->addProduct($product2); // Установим товарную позицию 2
101+
$payment->addProduct($product3); // Установим товарную позицию 3
102+
$payment->setCurrency('RUB'); // Установим валюту
103+
104+
/* Создадим авторизацию по типу платежа */
105+
$authorization = new Authorization('SBERPAY',false);
106+
107+
/* Запрашиваем подписку */
108+
$storedCredentials = new StoredCredentials();
109+
$storedCredentials->setConsentType("recurring");
110+
$storedCredentials->setSubscriptionPurpose("Ежедневная доставка \"К Завтраку\"");
111+
112+
// Назначим авторизацию для нашего платежа //
113+
$payment->setAuthorization($authorization);
114+
// Запросим подписку
115+
$payment->setStoredCredentials($storedCredentials);
116+
// Установим номер заказа (должен быть уникальным в вашей системе) //
117+
$payment->setMerchantPaymentReference('primer_nomer__' . time());
118+
// Установим адрес перенаправления пользователя после оплаты //
119+
$payment->setReturnUrl('http://' . $_SERVER['SERVER_NAME'] . '/php-api-client/?function=returnPage');
120+
$payment->setClient($client); // Установим клиентское подключение
121+
122+
/* Создадим HTTP-запрос к API */
123+
$apiRequest = new ApiRequest($merchant);
124+
125+
// Включить режим отладки (закомментируйте или удалите в рабочей программе!) //
126+
$apiRequest->setDebugMode();
127+
// Переключиться на тестовый сервер (закомментируйте или удалите в рабочей программе!) //
128+
$apiRequest->setSandboxMode();
129+
130+
// Отправим запрос //
131+
$responseData = $apiRequest->sendAuthRequest($payment);
132+
133+
/* Преобразуем ответ из JSON в массив */
134+
try {
135+
$responseData = json_decode((string) $responseData["response"], true);
136+
137+
// Нарисуем кнопку оплаты
138+
echo Std::drawYpmnButton([
139+
'url' => $responseData["paymentResult"]['url'] ?? "",
140+
'sum' => $payment->sumProductsAmount() ?? 0,
141+
]);
142+
143+
// Либо сделаем редирект (перенаправление) браузера по адресу оплаты:
144+
// echo Std::redirect($responseData["paymentResult"]['url']);
145+
} catch (Exception $exception) {
146+
//TODO: обработка исключения
147+
echo Std::alert([
148+
'text' => '
149+
Извините, платёжный метод временно недоступен.<br>
150+
Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.<br>
151+
<br>
152+
<pre>' . $exception->getMessage() . '</pre>',
153+
'type' => 'danger',
154+
]);
155+
156+
throw new PaymentException('Платёжный метод временно недоступен');
157+
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
<?php
2+
/**
3+
* getFasterPayment.php
4+
*/
5+
declare(strict_types=1);
6+
7+
use Ypmn\Product;
8+
use Ypmn\ApiRequest;
9+
use Ypmn\Billing;
10+
use Ypmn\Delivery;
11+
use Ypmn\IdentityDocument;
12+
use Ypmn\Client;
13+
use Ypmn\Payment;
14+
use Ypmn\Authorization;
15+
use Ypmn\PaymentException;
16+
use Ypmn\Std;
17+
use Ypmn\StoredCredentials;
18+
use Ypmn\MerchantToken;
19+
20+
// Подключим файл, в котором заданы параметры мерчанта
21+
include_once 'start.php';
22+
23+
/** @var \Ypmn\Merchant $merchant */
24+
25+
/*
26+
* Оплата через SberPay с помощью токена
27+
*/
28+
29+
/* Опишем первую позицию */
30+
$product1 = new Product();
31+
$product1->setName('Круассаны Цезарь'); // Установим Наименование товара или услуги
32+
$product1->setSku('toy-01'); // Установим Артикул
33+
$product1->setVat(20); // Установим НДС
34+
$product1->setUnitPrice(10); // Установим Стоимость за единицу
35+
$product1->setQuantity(1); // Установим Количество
36+
37+
/* Опишем вторую позицию с помощью сокращённого синтаксиса */
38+
$product2 = new Product([
39+
'name' => 'Ассорти рулетиков Нежность',
40+
'sku' => 'toy-02',
41+
'unitPrice' => 8,
42+
'quantity' => 3,
43+
'vat' => 10,
44+
]);
45+
46+
/* Опишем третью позицию с помощью JSON */
47+
$product3 = new Product(
48+
json_decode(
49+
'{
50+
"name": "Ассорти мини-десертов",
51+
"sku": "toy-03",
52+
"unitPrice": 12,
53+
"quantity": 2,
54+
"vat": 0
55+
}',
56+
true
57+
)
58+
);
59+
60+
/* Опишем Биллинговую (платёжную) информацию */
61+
$billing = new Billing;
62+
$billing->setCountryCode('RU'); // Установим Код страны
63+
$billing->setCity('Москва'); // Установим Город
64+
$billing->setState('Центральный регион'); // Установим Регион
65+
$billing->setAddressLine1('Улица Старый Арбат, дом 10'); // Установим Адрес Плательщика (первая строка)
66+
$billing->setAddressLine2('Офис Ypmn'); // Установим Адрес Плательщика (вторая строка)
67+
$billing->setZipCode('121000'); // Установим Почтовый Индекс Плательщика
68+
$billing->setFirstName('Иван'); // Установим Имя Плательщика
69+
$billing->setLastName('Петров'); // Установим Фамилия Плательщика
70+
$billing->setPhone('9670660742'); // Установим Телефон Плательщика
71+
$billing->setEmail('develop@ypmn.ru'); // Установим Email Плательщика
72+
73+
/* Опишем Доствку и принимающее лицо (необязательно) */
74+
$delivery = new Delivery;
75+
// Установим документ, подтверждающий право приёма доставки
76+
$delivery->setIdentityDocument(
77+
new IdentityDocument(123456, 'PERSONALID')
78+
);
79+
$delivery->setCountryCode('RU'); // Установим Код страны
80+
$delivery->setCity('Москва'); // Установим Город
81+
$delivery->setState('Центральный регион'); // Установим Регион
82+
$delivery->setAddressLine1('Улица Старый Арбат, дом 10'); // Установим Адрес Лица, принимающего заказ (первая строка)
83+
$delivery->setAddressLine2('Офис Ypmn'); // Установим Адрес Лица, принимающего заказ (вторая строка)
84+
$delivery->setZipCode('121000'); // Установим Почтовый Индекс Лица, принимающего заказ
85+
$delivery->setFirstName('Мария'); // Установим Имя Лица, принимающего заказ
86+
$delivery->setLastName('Петрова'); // Установим Фамилия Лица, принимающего заказ
87+
$delivery->setPhone('89670660743'); // Установим Телефон Лица, принимающего заказ
88+
$delivery->setEmail('develop@ypmn.ru'); // Установим Email Лица, принимающего заказ
89+
$delivery->setCompanyName('ООО "Вектор"'); // Установим Название Компании, в которой можно оставить заказ
90+
91+
/* Создадим клиентское подключение */
92+
$client = new Client;
93+
$client->setBilling($billing); // Установим биллинг
94+
$client->setDelivery($delivery); // Установим доставку
95+
$client->setCurrentClientIp(); // Установим IP (автоматически)
96+
$client->setCurrentClientTime(); // И Установим время (автоматически)
97+
98+
/* Создадим платёж */
99+
$payment = new Payment;
100+
$payment->addProduct($product1); // Установим товарную позицию 1
101+
$payment->addProduct($product2); // Установим товарную позицию 2
102+
$payment->addProduct($product3); // Установим товарную позицию 3
103+
$payment->setCurrency('RUB'); // Установим валюту
104+
105+
/* Создадим запись с токеном привязки */
106+
$merchantToken = new MerchantToken();
107+
$merchantToken->setYpmnBindingId("ab2bb91a-0012-4129-a2bf-cd18418bc726");
108+
109+
/* Создадим авторизацию по типу платежа */
110+
$authorization = new Authorization('SBERPAY',false);
111+
$authorization->setMerchantToken($merchantToken);
112+
113+
/* Запрашиваем подписку */
114+
$storedCredentials = new StoredCredentials();
115+
$storedCredentials->setUseType("merchant");
116+
117+
// Назначим авторизацию для нашего платежа //
118+
$payment->setAuthorization($authorization);
119+
// Запросим подписку
120+
$payment->setStoredCredentials($storedCredentials);
121+
// Установим номер заказа (должен быть уникальным в вашей системе) //
122+
$payment->setMerchantPaymentReference('primer_nomer__' . time());
123+
// Установим адрес перенаправления пользователя после оплаты //
124+
$payment->setReturnUrl('http://' . $_SERVER['SERVER_NAME'] . '/php-api-client/?function=returnPage');
125+
$payment->setClient($client); // Установим клиентское подключение
126+
127+
/* Создадим HTTP-запрос к API */
128+
$apiRequest = new ApiRequest($merchant);
129+
130+
// Включить режим отладки (закомментируйте или удалите в рабочей программе!) //
131+
$apiRequest->setDebugMode();
132+
// Переключиться на тестовый сервер (закомментируйте или удалите в рабочей программе!) //
133+
$apiRequest->setSandboxMode();
134+
135+
// Отправим запрос //
136+
$responseData = $apiRequest->sendAuthRequest($payment, $merchant);
137+
138+
/* Преобразуем ответ из JSON в массив */
139+
try {
140+
$responseData = json_decode((string) $responseData["response"], true);
141+
142+
// Нарисуем кнопку оплаты
143+
echo Std::drawYpmnButton([
144+
'url' => $responseData["paymentResult"]['url'] ?? "",
145+
'sum' => $payment->sumProductsAmount() ?? 0,
146+
]);
147+
148+
// Либо сделаем редирект (перенаправление) браузера по адресу оплаты:
149+
// echo Std::redirect($responseData["paymentResult"]['url']);
150+
} catch (Exception $exception) {
151+
//TODO: обработка исключения
152+
echo Std::alert([
153+
'text' => '
154+
Извините, платёжный метод временно недоступен.<br>
155+
Вы можете попробовать другой способ оплаты, либо свяжитесь с продавцом.<br>
156+
<br>
157+
<pre>' . $exception->getMessage() . '</pre>',
158+
'type' => 'danger',
159+
]);
160+
161+
throw new PaymentException('Платёжный метод временно недоступен');
162+
}

0 commit comments

Comments
 (0)