pantera-digital/yii2-sberbank-pay 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

pantera-digital/yii2-sberbank-pay

Composer 安装命令:

composer require pantera-digital/yii2-sberbank-pay

包简介

README 文档

README

Модуль позволяет организовать прием платежей через шлюз Сбербанка на вашем yii2-проекте. Предусмотрено использование как одностадийной системы оплаты, так и двухстадийной. Для понимания принципов осуществления платежей через шлюз Сбербанка, пожалуйста, ознакомьтесь с официальной документацией, которую высылает техподдержка Сбербанка при регистрации мерчанта в их системе. При возникновении вопросов - пишите на контактную почту компании Pantera Digital, указанную в профиле компании на Github. Также мы готовы доработать модуль для вас, с предложениями также пишите на почту.

Установка через композер

composer require pantera-digital/yii2-sberbank-pay "@dev"

Запустить миграции

php yii migrate --migrationPath=@pantera/yii2/pay/sberbank/migrations

Настройка, добавить в config/main.php

'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;
        },
    ],
]

Создание заказа

В вашем контроллере после сохранения заказа, либо на событие создания заказа вам необходимо создать инвойс, передав в него номер и сумму вашего заказа:

// ...здесь какая-то ваша логика по сохранению заказа, например это объект $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:

\yii\helpers\Html::a('Оплатить заказ', ['/sberbank/default/create', 'id' => $invoice->id /* id инвойса */])

При переходе пользователя по этой ссылке (либо автоматическом перенаправлении) будет произведено обращение к API сбербанка для создания инвойса у них в системе, и перенаправление уже на платежную форму Сбербанка.

После успешной оплаты на шлюзе Сбербанка пользователь будет преренаправлен на yoursite.com/paySuccess. В случае неуспешной оплаты пользователь будет преренаправлен на yoursite.com/payFail. paySuccess и payFail задаются в настройках модуля, см. пример конфигурации.

Двухстадийная оплата

По умолчанию используется одностадийная система оплаты. Но если необходимо использовать двухстадийную оплату, то в файле конфигурации для параметра registerPreAuth необходимо задать значение true.

В таком случае, успешно предавторизованные платежи будут помечены статусом P.

Статусы инвойсов

I - initial, инвойс создан
P - pre-authorised, предавторизованная сумма удержана (для двухстадийной оплаты)
S - success, успешно оплачен

统计信息

  • 总下载量: 17.14k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 33
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 33
  • Watchers: 5
  • Forks: 7
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2018-02-16