Модуль позволяет организовать прием платежей через шлюз Сбербанка на вашем yii2-проекте. Предусмотрено использование как одностадийной системы оплаты, так и двухстадийной. Для понимания принципов осуществления платежей через шлюз Сбербанка, пожалуйста, ознакомьтесь с официальной документацией, которую высылает техподдержка Сбербанка при регистрации мерчанта в их системе. При возникновении вопросов - пишите на контактную почту компании Pantera Digital, указанную в профиле компании на Github. Также мы готовы доработать модуль для вас, с предложениями также пишите на почту., (*1)
composer require pantera-digital/yii2-sberbank-pay "@dev"
php yii migrate --migrationPath=@pantera/yii2/pay/sberbank/migrations
'modules' => [ 'sberbank' => [ 'class' => 'pantera\yii2\pay\sberbank\Module', 'components' => [ 'sberbank' => [ 'class' => pantera\yii2\pay\sberbank\components\Sberbank::class, // время жизни инвойса в секундах (по умолчанию 20 минут - см. документацию Сбербанка) // в этом примере мы ставим время 1 неделю, т.е. в течение этого времени покупатель может // произвести оплату по выданной ему ссылке 'sessionTimeoutSecs' => 60 * 60 * 24 * 7, // логин api мерчанта 'login' => 'ваш логин', // пароль api мерчанта 'password' => 'ваш пароль', // использовать тестовый режим (по умолчанию - нет) 'testServer' => false, // использовать двухстадийную оплату (по умолчанию - нет) 'registerPreAuth' => false ], ], // страница вашего сайта с информацией об успешной оплате 'successUrl' => '/paySuccess', // страница вашего сайта с информацией о НЕуспешной оплате 'failUrl' => '/payFail', // обработчик, вызываемый по факту успешной оплаты 'successCallback' => function($invoice) { // какая-то ваша логика, например $order = \your\models\Order::findOne($invoice->order_id); $client = $order->getClient(); $client->sendEmail('Зачислена оплата по вашему заказу №' . $order->id); // .. и т.д. }, // обработчик, вызываемый по факту НЕуспешной оплаты 'failCallback' => function($invoice) { // какая-то ваша логика, например $order = \your\models\Order::findOne($invoice->order_id); $client = $order->getClient(); $client->sendEmail('Ошибка при оплате по вашему заказу №' . $order->id); // .. и т.д. }, // необязательный callback для генерации uniqid инвойса, необходим // в том случае, если по каким-то причинам используемый по умолчанию // формат `#invoice_id#-#timestamp#` вам не подходит 'idGenerator' => function(Invoice $invoice, int $id) { // $id - это uniqid, сгенерированный по умолчанию // вместо него используем собственный алгоритм, например такой return '000-AAA-' . $invoice->id; }, ], ]
В вашем контроллере после сохранения заказа, либо на событие создания заказа вам необходимо создать инвойс, передав в него номер и сумму вашего заказа:, (*2)
// ...здесь какая-то ваша логика по сохранению заказа, например это объект $order // создаем и сохраняем инвойс, передаем в него номер и сумму вашего заказа $invoice = \pantera\yii2\pay\sberbank\models\Invoice::addSberbank($order->id, $order->price); // в параметре $data при необходимости можно передать данные инвойса, которые требуется // сохранить для дальнейшего использования, например, e-mail покупателя и т.п. $invoice = \pantera\yii2\pay\sberbank\models\Invoice::addSberbank($order->id, $order->price, null, ['email' => $userEmail]);
Далее для перенаправления пользователя на шлюз оплаты Сбербанка вам нужно выдать пользователю ссылку (либо автоматически перенаправить его) на url:, (*3)
\yii\helpers\Html::a('Оплатить заказ', ['/sberbank/default/create', 'id' => $invoice->id /* id инвойса */])
При переходе пользователя по этой ссылке (либо автоматическом перенаправлении) будет произведено обращение к API сбербанка для создания инвойса у них в системе, и перенаправление уже на платежную форму Сбербанка., (*4)
После успешной оплаты на шлюзе Сбербанка пользователь будет преренаправлен на yoursite.com/paySuccess
. В случае неуспешной оплаты пользователь будет преренаправлен на yoursite.com/payFail
. paySuccess
и payFail
задаются в настройках модуля, см. пример конфигурации., (*5)
По умолчанию используется одностадийная система оплаты. Но если необходимо использовать двухстадийную оплату, то в файле конфигурации для параметра registerPreAuth
необходимо задать значение true
., (*6)
В таком случае, успешно предавторизованные платежи будут помечены статусом P
., (*7)
I - initial, инвойс создан P - pre-authorised, предавторизованная сумма удержана (для двухстадийной оплаты) S - success, успешно оплачен