2017 © Pedro Peláez
 

library yandex-mone-payout

Module for integration with YandexMoney Payouts. See https://tech.yandex.ru/money/doc/payment-solution/payout/

image

agoalofalife/yandex-mone-payout

Module for integration with YandexMoney Payouts. See https://tech.yandex.ru/money/doc/payment-solution/payout/

  • Thursday, July 5, 2018
  • by agoalofalife
  • Repository
  • 1 Watchers
  • 0 Stars
  • 2 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Библиотека для интеграции с Массовыми выплатами от Яндекс

, (*3)

Описание

Библиотека предоставляет функционал по начислению денег в яндекс выплаты., (*4)

Существует две версии библиотеки:

v1 (Старая версия)

Виды выплат и возможности, (*5)

 ✅ PHP 5

 ✅ На телефон

 ✅ На яндекс кошелек

 ✅ На банковскую карту

 ❌ Интеграция с Laravel

 ❌ Автоинкрементирование clientOrderId

 ❌ Сложный API

v2 (Новая версия)

Виды выплат и возможности, (*6)

 ✅ PHP >=7.3

 ✅ На телефон

 ✅ На яндекс кошелек

 ❌ На банковскую карту

 ✅ Интеграция с Laravel

 ✅ Автоинкрементирование clientOrderId

 ✅ ClientOrderId через модель Eloquent

 ✅ ClientOrderId в формате UUID

 ✅ Легкий API

, (*7)

Установка

composer require agoalofalife/yandex-money-payout

, (*8)

Как пользоваться?

Для работы с пакетом вам надо закончить все юридические и технические моменты с яндекс и получить сертификаты для взаимодействия с серверами ЮKassa., (*9)

, (*10)

Настройка сертификатов и данных

agentId

Получите у менеджера agentId — идентификатор вашего шлюза в ЮKassa., (*11)

cert

Это комбирированный ключ - вам надо выполнить несколько команд:, (*12)

openssl pkcs12 -export -out cert.p12 -in 201111.pem -inkey private.pem

201111.pem - это обычно 201111.cer (просто переименуйте) - сертификат отправляется Яндексом, (*13)

private.pem - это приватный ключ который создаете вы до отправки в yandex, (*14)

После команды вы получите cert.p12, (*15)

Надо будет выполнить следующую команду:, (*16)

openssl pkcs12 -in cert.p12 -out keys.pem -nodes

В итоге вы получите keys.pem - который и надо вставить в параметр cert (Абсолютный путь до него), (*17)

certPassword

Пароль от сертификата privateKey, (*18)

privateKey

Абсолютный путь до файла - приватный ключ - который создается на вашей стороне. Вот ссылка как, (*19)

yaCert

Абсолютный путь до файла - сертификат для расшифровки сообщение от сервера Яндекса, (*20)

Сертификат выдается по запросы в яндекс, он един для всех и его меняют раз в три года., (*21)

Вам необходимо вставить файл с названием deposit_verify_new.cer, (*22)

  $settings = new Settings();
  $settings->agentId = '';
  $settings->cert = 'keys.pem';
  $settings->certPassword = '';
  $settings->privateKey = 'private.pem';
  $settings->yaCert = '';

, (*23)

Генерация clientOrderId

Далее необходимо выбрать способ генерации clientOrderId:, (*24)

ℹ️ UUID, (*25)

YandexPayout\Generators\ClientOrderUuid, (*26)

Генерация clientOrderId через uuid version 4,
случайным образом генерируется уникальный id

php $generator = new \YandexPayout\Generators\ClientOrderUuid();, (*27)

ℹ️ Eloquent Id, (*28)

YandexPayout\Generators\ClientOrderEloquent, (*29)

Генерация номера по порядковому номеру id в базе данных через eloquent 
модель laravel

php $generator = new \YandexPayout\Generators\ClientOrderEloquent(new \App\Models\YandexPayout());, (*30)

ℹ️ Свой вариант, (*31)

Вы можете реализовать свой способ через интерфейс, (*32)

YandexPayout\Contracts\GeneratorClientOrderId, (*33)

- public function getId(): string;
   Получение текущего id, например для id из базы - это следующий номер 
   после крайнего.  

- public function generateNextId(): string;
  Реализация следуеющего номера - это может быть просто порядковый номер 
  или как в случае uuid уникальный - зависит от вас. Метод нужен - если 
  под текущим id - уже есть запись в яндекс и надо повторить запрос с 
  новым clientOrderId

, (*34)

Начисление на телефон

✅ Проверка возможности осуществлении платежа (testDeposition), (*35)

        // Передаем настройки
        $settings = new Settings();
        $settings->agentId = '';
        $settings->cert = '';
        $settings->certPassword = '';
        $settings->privateKey = '';
        $settings->yaCert = '';

        // Выбираем генератор
        $generator = new \YandexPayout\Generators\ClientOrderEloquent(new \App\Models\Reward\MoneyReward\Drivers\YandexPayout());

        $phone = new \YandexPayout\Accounts\Phone($settings, $generator);
        $phone->setDstAccount('79052075556'); // передаем номер строго так
        $phone->setAmount(1);// сумма - ожидает float
        $phone->setContract('Тестовый платеж');

        // Далее несколько стратегий отправки
        $phone->canSend(); // разовый запрос можно ли отправить деньги
        $phone->send(); // сразу попытаться отправить или после информации 
//        от метода выше
        $phone->sendIncrementId(); // будут произвоидится попытки начисления 
//        денег - с последующей генерации следующего clientOrderId, пока 
//        никакаих ограничений нет - будет до победного

        $phone->getReport(); // получение отчета о запросе - где данные об 
//        ответе сервиса и данные из запроса, для получения данных - 
//        предоставлены get методы

, (*36)

Начисление на яндекс кошелек

✅ Проверка возможности осуществлении платежа (testDeposition), (*37)

        // Передаем настройки
        $settings = new Settings();
        $settings->agentId = '';
        $settings->cert = '';
        $settings->certPassword = '';
        $settings->privateKey = '';
        $settings->yaCert = '';

        // Выбираем генератор
        $generator = new \YandexPayout\Generators\ClientOrderUuid();

        $phone = new \YandexPayout\Accounts\YandexPurse($settings, $generator);
        $phone->setDstAccount('4100116075156746'); // передаем номер строго так
        $phone->setAmount(1);// сумма - ожидает float
        $phone->setContract('Тестовый платеж');

        // Далее несколько стратегий отправки
        $phone->canSend(); // разовый запрос можно ли отправить деньги
        $phone->send(); // сразу попытаться отправить или после информации 
//        от метода выше
        $phone->sendIncrementId(); // будут произвоидится попытки начисления 
//        денег - с последующей генерации следующего clientOrderId, пока 
//        никакаих ограничений нет - будет до победного

        $phone->getReport(); // получение отчета о запросе - где данные об 
//        ответе сервиса и данные из запроса, для получения данных - 
//        предоставлены get методы

, (*38)

Структура ответа

Структура ответа $phone->getReport(), (*39)

    // Примерная структура такая
    YandexPayout\ReportOfRequest {#1637 ▼
      -clientOrderId: "1"
      -amount: 1.0
      -dstAccount: "79052075556"
      -contract: "Тестовый платеж"
      -agentId: "201111"
      -currency: 643
      -response: YandexPayout\Response\Response {#1652 ▼ // Объект 
    // response можно получить через метод $phone->getReport()->response()
        -balance: "200.36"
        -processedDT: "2021-10-20T21:29:50.747+03:00"
        -identification: "reviewed"
        -techMessage: null
        -status: "0"
        -error: null
      }
    }

, (*40)

Обработка ошибок

В процессе работы с yandex - могут возникнуть ошибки: - Внутренния ошибка яндекс - Проблемы с мобильным телефоном - Истек сертификат, (*41)

И так далее.., (*42)

Запросы send или sendIncrementId возвращают bool в случае успеха. Для более читабельного варианта можно использовать isSuccessRequest, (*43)

// ....
    $phone->sendIncrementId(); 
 if ($phone->isSuccessRequest()) {
    // save storage
 } else {
   $phone->getReport()->response()->getStatus();// самостоятельная обработка
   $phone->getReport()->response()->getError();// код ошибка
 }

Перечень кодов можно прочитать тут , (*44)

Интеграция с Laravel

Пакет имеет некоторое упрощении в использовании - через контейнер laravel, (*45)

Скопируем файл конфигурации в папку config, (*46)

php artisan vendor:publish --tag= yandex-payouts

Далее надо передать все настройки и выбрать генератор по-умолчанию, (*47)

    'cardSynonimUrl' => '',
    'agentId'        => env('YANDEX_MONEY_PAYOUT_AGENT_ID', ''),
    'certPassword'   => env('YANDEX_MONEY_PAYOUT_CERT_PASSWORD', ''),
    'cert' => env('YANDEX_MONEY_PAYOUT_CERT', ''),
     // абсолютный путь keys.pem
    'privateKey' => env('YANDEX_MONEY_PAYOUT_CERT_PRIVATE', ''),
    // абсолютный путь private.pem
    'yaCert' => env('YANDEX_MONEY_PAYOUT_CERT_REQUEST', ''), 
    // абсолютный путь request.cer

    'generator' => [
        'type' => \YandexPayout\Generators\ClientOrderEloquent::class,
        'model' => \App\Models\YandexPayout::class
    ]

Далее использование - сводится к получению объектов из контейнера. Вы можете получать эти объекты в других местах(контроллеры, очереди) - везде где есть авто resolve, (*48)

  $yandexPurse = new \YandexPayout\Accounts\YandexPurse(app(Settings::class), app(GeneratorClientOrderId::class));
  $yandexPurse->setDstAccount('4100116075156746');
  $yandexPurse->setAmount(1);
  $yandexPurse->setContract('Тестовый платеж');
  dd($yandexPurse->sendIncrementId(), $yandexPurse->getReport());

, (*49)

Дополнительный материалы

  • Документация яндекса здесь

, (*50)

Угостить чаем или кофем 😌

Этот пакет был создан с целью экономии времени для коллег разработчиков. Если он вам помог сэкономить время - то я буду рад вашей поддержки в виде звезды или скромного доната., (*51)

Этот простой знак внимания - даст мне понять - что труды не напрасны., (*52)

https://money.yandex.ru/to/410019109036855, (*53)

The Versions

05/07 2018

dev-master

9999999-dev

Module for integration with YandexMoney Payouts. See https://tech.yandex.ru/money/doc/payment-solution/payout/

  Sources   Download

MIT

The Development Requires

by Ilya Chubarov
by Shnell Pavel

yandex yandex-money yandex-kassa yandex-payout

05/07 2018

v0.2.0

0.2.0.0

Module for integration with YandexMoney Payouts. See https://tech.yandex.ru/money/doc/payment-solution/payout/

  Sources   Download

MIT

The Development Requires

by Ilya Chubarov
by Shnell Pavel

yandex yandex-money yandex-kassa yandex-payout

28/06 2018

v0.1.0

0.1.0.0

Module for integration with YandexMoney Payouts. See https://tech.yandex.ru/money/doc/payment-solution/payout/

  Sources   Download

MIT

The Development Requires

by Shnell Pavel