GithubHelp home page GithubHelp logo

pantera-digital / yii2-sberbank-pay Goto Github PK

View Code? Open in Web Editor NEW
32.0 6.0 7.0 58 KB

Модуль позволяет организовать прием платежей через шлюз Сбербанка на вашем yii2-проекте. Если данный модуль вам пригодился, то нас можно отблагодарить, поставив репозиторию ⭐

License: Apache License 2.0

PHP 100.00%
yii yii2 yii2-modules sberbank billing php7

yii2-sberbank-pay's Introduction

Yii2 Sberbank payment module

Модуль позволяет организовать прием платежей через шлюз Сбербанка на вашем 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, успешно оплачен

yii2-sberbank-pay's People

Contributors

dven84 avatar nekrasoft avatar singletonn avatar webmayak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

yii2-sberbank-pay's Issues

Ошибка с миграцией

После выполнения команды

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

Получаю ошибку:

Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1049] Unknown database 'yii2advanced''

Понятно что этой базы у меня просто нет, но вопрос зачем вообще эта команда? Какая база эй нужна и где настраивать подключение к ней. У меня шаблон advanced.

Так же общий вопрос по системе оплаты через Сбербанк. Мне нужно внедрить в приложение оплату, но конкретно у меня не заключен договор со Сбербанком и логина и пароля у меня нет. Но у людей которые будут разворачивать - есть.
В связи с этим существует ли какой - то тестовый режим для проверки оплаты и что необходимо будет выполнить конечному потребителю? просто прописать логин api мерчента и пароль?

Не срабатывает callback для генерации uniqid инвойса

Добрый день.
В callback idGenerator прописал правила для создания uniqid, но он не отрабатывает. Проверил, в models/Invoice->generateUniqid() на стр. 68 - Module::getInstance() всегда возвращает null, никогда не возвращает модуль.
В других местах, где вызывается тот же Module::getInstance(), модуль возвращается успешно.
Причем если заменить Module::getInstance() на Yii::$app->getModule('sberbank'), то модуль возвращается и, соответственно, callback idGenerator отрабатывает.
Вы с этим не сталкивались? Что может быть причиной?

Yii2 Advanced 2.0.34
PHP 7.2
Пробовал и на локальном ПК Windows 10 под OpenServer, и на хостинге под Linux

Trying to get property 'idGenerator' of non-object

Здравствуйте. Хотел использовать Ваше расширение yii2-sberbank-pay но при использовании вылезла такая ошибка

Trying to get property 'idGenerator' of non-object

Я так понимаю что в PHP 7.2 условие его определяет как объект а не переменню if ($module->idGenerator)
наверное надо заменить
if (!is_null(module->idGenerator))

Не могу понять, что это за свойство attributes модели Invoice, к которому вы обращаетесь в DefaultController.php

    /**
     * Сюда будет перенаправлен результат оплаты
     * @throws NotFoundHttpException
     * @throws \Exception
     * @throws \Throwable
     * @throws \yii\db\StaleObjectException
     */
    public function actionComplete()
    {
        /* @var $model Invoice */
        if (is_null(Yii::$app->request->get('orderId'))) {
            throw new NotFoundHttpException();
        }
        $model = Invoice::find()
            ->where([
                'AND',
                ['=', 'status', 'I'],
                ['=', 'orderId', Yii::$app->request->get('orderId')],
            ])
            ->one();
        if (is_null($model)) {
            throw new NotFoundHttpException();
        }
        $result = $this->module->sberbank->complete(Yii::$app->request->get('orderId'));
        //Проверяем статус оплаты если всё хорошо обновим инвойс и редерекним
        if (isset($result['OrderStatus']) && ($result['OrderStatus'] == $this->module->sberbank->classRegister->successStatus())) {
            $model->attributes = $this->module->sberbank->classRegister->getDataForUpdate();
            $model->update();
            if ($this->module->successCallback) {
                $callback = $this->module->successCallback;
                $callback($model);
            }
            $this->redirect($this->module->successUrl);
        } else {
            if ($this->module->failCallback) {
                $callback = $this->module->failCallback;
                $callback($model);
            }
            $this->redirect($this->module->failUrl);
        }
    }

В модели Invoice не вижу такого свойства, attributes.... (( Что это за "магическое" свойство такое?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.