yandex-money / yandex-checkout-payout-sdk-php
Requires
- php: >=5.6.0
- ext-curl: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- ext-openssl: *
- ext-simplexml: *
- psr/log: ^1.0
Requires (Dev)
- ext-xml: *
- mockery/mockery: ^0.9.9
- phpunit/phpunit: ^4.8.35 || ^5.7
This package is auto-updated.
Last update: 2020-12-04 18:08:23 UTC
README
Клиент для работы по Протоколу массовых выплат
Возможности
С помощью этого SDK вы можете:
- Генерировать сертификат для взаимодействия с Яндекс.Кассой.
- Переводить деньги физическим лицам на кошельки в Яндекс.Деньгах, номера мобильных телефонов, банковские карты и счета (makeDeposition).
- Проверять возможность зачисления переводов на кошельки в Яндекс.Деньгах (testDeposition).
- Отслеживать баланс выплат (balance).
- Получать уведомления о неуспешном статусе переводов на банковский счет, карту, мобильный телефон (errorDepositionNotification).
Требования
PHP 5.6.0 (и выше) с расширением libcurl и libxml
Установка
Установите SDK одним из трех способов
В консоли с помощью Composer
- Установите менеджер пакетов Composer.
- В консоли выполните команду
composer require yandex-money/yandex-checkout-payout-sdk-php
В файле composer.json своего проекта
- Добавьте строку
"yandex-money/yandex-checkout-payout-sdk-php": "*"
в список зависимостей вашего проекта в файле composer.json
...
"require": {
"php": ">=5.6.0",
"yandex-money/yandex-checkout-payout-sdk-php": "*"
...
- Обновите зависимости проекта: в консоли перейдите в каталог с файлом composer.json и выполните команду:
composer update
- В коде вашего проекта подключите автозагрузку файлов SDK Яндекс.Кассы:
require __DIR__ . '/vendor/autoload.php';
Вручную
- Скачайте архив Yandex.Checkout Payout API PHP Client Library, распакуйте его и скопируйте каталог lib в папку вашего проекта, где будет размещен SDK.
- В коде вашего проекта подключите автозагрузку файлов SDK Яндекс.Кассы:
require __DIR__ . '/lib/autoload.php';
Получение сертификата для аутентификации запросов
Для взаимодействия с Яндекс.Кассой необходимо получить сертификат. Для этого:
- Создайте приватный ключ и запрос на получение сертификата (CSR).
- Заполните заявку на сертификат.
- Обменяйтесь данными с Яндекс.Кассой.
Шаг 1. Создание приватного ключа и CSR
С помощью метода SDK
- мпортируйте классы для создания CSR
use YandexCheckoutPayout\Client;
use YandexCheckoutPayout\Model\Organization;
- Создайте экземпляр класса
Organization
с данными для создания заявки. Все данные нужно вводить латиницей.
$organization = new Organization();
$organization->setEmailAddress('test@mail.ru') //Адрес электронной почты
->setOrganizationName('ooo sdk.com') //Название вашей организации (латиницей)
->setCommonName('/business/test123'); //Имя сервера без пробелов, например название вашей организации; должно начинаться с «/business/»
- Создайте CSR и приватный ключ.
$client->createCsr($organization, './output/', '') //Укажите место, куда должны сохраниться файлы, и пароль для приватного ключа (при необходимости)
В результате SDK сгенерирует приватный ключ, CSR и текстовый файл с электронной подписью (нужно для дальнейших шагов).
Через консоль
- В консоли перейдите в папку вашего проекта, где расположен SDK.
cd <путь к SDK>
- Выполните команду:
php bin/yamoney get:csr
- Введите данные для сертификата, следуя указаниям на экране. Текст необходимо вводить латинскими буквами. В результате SDK сгенерирует приватный ключ, CSR и текстовый файл с электронной подписью (нужно для дальнейших шагов).
Шаг 2. Заполнение заявки на сертификат
Скачайте заявку на сертификат, заполните и распечатайте. Поставьте подпись и печать. Отсканируйте.
Параметр | Описание |
---|---|
CN | Должно соответствовать значению параметра Common Name (eg, YOUR name). Например, /business/predpriyatie. |
Электронная подпись запроса на сертификат | Текстовое представление, полученное на предыдущем шаге. |
Наименование организации латинскими буквами | Должно соответствовать значению параметра Organization Name (eg, company) [Internet Widgits Pty Ltd]. |
Причина запроса | Возможные варианты:
|
Контактное лицо (ФИО, телефон, e-mail) | Контакты специалиста для связи при возникновении вопросов по выданному сертификату. |
Шаг 3. Обмен данными с Яндекс.Кассой
Отправьте файл запроса на сертификат (request.csr) и скан заявки по электронной почте своему менеджеру Яндекс.Кассы. В ответ на заявку менеджер в течение 2 рабочих дней пришлет файл с сертификатом. Срок действия сертификата 1 год.
Разместите полученный сертификат на своем сервере
Начало работы
- Определите, какие виды выплат вам нужны и хотите ли вы проверять баланс.
- Импортируйте обязательные классы
use YandexCheckoutPayout\Client; use YandexCheckoutPayout\Request\Keychain;
- Импортируйте классы, необходимые для решения ваших задач.
- Создайте экземпляр класса
Keychain
, передав в него путь к публичному ключу, путь к приватному ключу и, при необходимости, пароль приватного ключа..
$keychain = new Keychain('publicCert.cer', 'privateCert.pem', 'password');
- Создайте экземпляр класса
Client
и передайте идентификатор шлюза из личного кабинета Яндекс.Кассы и экземпляр классаKeychain
.
$client = new Client('000000', $keychain);
- Вызовите нужный метод. Подробнее о проведении выплат
Пример выплаты на банковский счет
// Импорт классов
use YandexCheckoutPayout\Client;
use YandexCheckoutPayout\Model\Recipient\BankAccountRecipient;
use YandexCheckoutPayout\Request\Keychain;
use YandexCheckoutPayout\Request\MakeDepositionRequest;
// Создание ключницы и экземпляра клиента
$keychain = new Keychain('./250000.cer', './privateKey.pem', 12345);
$client = new Client('250000', $keychain);
// Подготовка данных о получателе выплаты
$recipient = new BankAccountRecipient();
$recipient->setPdrLastName('Иванов')
->setPdrFirstName('Иван')
->setPdrMiddleName('Иванович')
->setDocNumber('1234567890')
->setPofOfferAccepted(true)
->setPdrDocIssueDate('01.02.2018')
->setSmsPhoneNumber('79000000000')
->setPaymentPurpose('Назначение выплаты')->setBankBIK(5435435435)->setBankCorAccount('');
// Проведение выплаты
$deposition = new MakeDepositionRequest();
$deposition->setDstAccount('25700120202056919')
->setAmount(100)
->setCurrency(CurrencyCode::RUB)
->setContract('test')
->setPaymentParams($recipient);
$client->createDeposition($deposition);