pantera-digital/yii2-sberbank-pay

此包的最新版本(dev-master)没有可用的许可证信息。

安装: 11,343

依赖者: 0

建议者: 0

安全: 0

星标: 32

关注者: 6

分支: 7

开放问题: 2

类型:yii2-extension

dev-master 2023-01-27 06:24 UTC

This package is auto-updated.

Last update: 2024-09-27 10:04:10 UTC


README

模块允许您在yii2项目中通过俄罗斯联邦储蓄银行网关组织接收支付。支持使用单阶段和双阶段支付系统。要了解通过俄罗斯联邦储蓄银行网关进行支付的原则,请参阅俄罗斯联邦储蓄银行在注册商家到其系统时提供的官方文档。如有任何问题,请联系Pantera Digital公司提供的联系邮箱,该邮箱位于Github公司简介中。我们还可以根据您的需求进行模块的定制开发,有关建议也请发送邮件。

通过Composor安装

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/payFailpaySuccesspayFail 在模块设置中指定,请参阅配置示例。

双阶段支付

默认情况下,使用单阶段支付系统。但若需要使用双阶段支付,则必须在配置文件中将参数 registerPreAuth 设置为 true

在这种情况下,成功预授权的支付将被标记为状态 P

发票状态

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