yandex-money/yandex-checkout-payout-sdk-php

This package is abandoned and no longer maintained. The author suggests using the yoomoney/yookassa-payout-sdk-php package instead.

1.0.3 2020-09-22 14:59 UTC

This package is auto-updated.

Last update: 2020-12-04 18:08:23 UTC


README

Build Status Latest Stable Version Total Downloads Monthly Downloads License

Клиент для работы по Протоколу массовых выплат

Возможности

С помощью этого SDK вы можете:

  1. Генерировать сертификат для взаимодействия с Яндекс.Кассой.
  2. Переводить деньги физическим лицам на кошельки в Яндекс.Деньгах, номера мобильных телефонов, банковские карты и счета (makeDeposition).
  3. Проверять возможность зачисления переводов на кошельки в Яндекс.Деньгах (testDeposition).
  4. Отслеживать баланс выплат (balance).
  5. Получать уведомления о неуспешном статусе переводов на банковский счет, карту, мобильный телефон (errorDepositionNotification).

Требования

PHP 5.6.0 (и выше) с расширением libcurl и libxml

Установка

Установите SDK одним из трех способов

В консоли с помощью Composer

  1. Установите менеджер пакетов Composer.
  2. В консоли выполните команду
composer require yandex-money/yandex-checkout-payout-sdk-php

В файле composer.json своего проекта

  1. Добавьте строку "yandex-money/yandex-checkout-payout-sdk-php": "*" в список зависимостей вашего проекта в файле composer.json
...
    "require": {
        "php": ">=5.6.0",
        "yandex-money/yandex-checkout-payout-sdk-php": "*"
...
  1. Обновите зависимости проекта: в консоли перейдите в каталог с файлом composer.json и выполните команду:
composer update
  1. В коде вашего проекта подключите автозагрузку файлов SDK Яндекс.Кассы:
require __DIR__ . '/vendor/autoload.php';

Вручную

  1. Скачайте архив Yandex.Checkout Payout API PHP Client Library, распакуйте его и скопируйте каталог lib в папку вашего проекта, где будет размещен SDK.
  2. В коде вашего проекта подключите автозагрузку файлов SDK Яндекс.Кассы:
require __DIR__ . '/lib/autoload.php'; 

Получение сертификата для аутентификации запросов

Для взаимодействия с Яндекс.Кассой необходимо получить сертификат. Для этого:

  1. Создайте приватный ключ и запрос на получение сертификата (CSR).
  2. Заполните заявку на сертификат.
  3. Обменяйтесь данными с Яндекс.Кассой.

Шаг 1. Создание приватного ключа и CSR

С помощью метода SDK

  1. мпортируйте классы для создания CSR
use YandexCheckoutPayout\Client;
use YandexCheckoutPayout\Model\Organization;
  1. Создайте экземпляр класса Organization с данными для создания заявки. Все данные нужно вводить латиницей.
$organization = new Organization();
$organization->setEmailAddress('test@mail.ru') //Адрес электронной почты
             ->setOrganizationName('ooo sdk.com') //Название вашей организации (латиницей)
             ->setCommonName('/business/test123'); //Имя сервера без пробелов, например название вашей организации; должно начинаться с «/business/»
  1. Создайте CSR и приватный ключ.
$client->createCsr($organization, './output/', '') //Укажите место, куда должны сохраниться файлы, и пароль для приватного ключа (при необходимости)

В результате SDK сгенерирует приватный ключ, CSR и текстовый файл с электронной подписью (нужно для дальнейших шагов).

Через консоль

  1. В консоли перейдите в папку вашего проекта, где расположен SDK.
cd <путь к SDK>
  1. Выполните команду:
php bin/yamoney get:csr
  1. Введите данные для сертификата, следуя указаниям на экране. Текст необходимо вводить латинскими буквами. В результате 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 год.
Разместите полученный сертификат на своем сервере

Начало работы

  1. Определите, какие виды выплат вам нужны и хотите ли вы проверять баланс.
  2. Импортируйте обязательные классы
use YandexCheckoutPayout\Client;
use YandexCheckoutPayout\Request\Keychain;
  1. Импортируйте классы, необходимые для решения ваших задач.
  2. Создайте экземпляр класса Keychain, передав в него путь к публичному ключу, путь к приватному ключу и, при необходимости, пароль приватного ключа..
$keychain = new Keychain('publicCert.cer', 'privateCert.pem', 'password');
  1. Создайте экземпляр класса Client и передайте идентификатор шлюза из личного кабинета Яндекс.Кассы и экземпляр класса Keychain.
$client = new Client('000000', $keychain);
  1. Вызовите нужный метод. Подробнее о проведении выплат

Пример выплаты на банковский счет

// Импорт классов
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);