Подключаем платежную систему Робокасса через дополнение yii2-robokassa

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
supermaster
Сообщения: 1
Зарегистрирован: 2018.04.25, 05:32

Подключаем платежную систему Робокасса через дополнение yii2-robokassa

Сообщение supermaster » 2018.04.25, 05:36

Здравствуйте!
Два года не занимался программированием.
Есть свой сайт.
https://super-master.pro/
Решил вновь заниматься им.
Стала задача подключить платежную систему Робокасса.
Так как Робокасса работает с физическими лицами - подключаем именно ее.

Нашел дополение - https://github.com/y.../yii2-robokassa
Успешно установил ее через composer

Далее пытаюсь действовать по инструкции:
Добавил в файл config/web.php в массив components элемент robokassa со своими паролями и логином магазина.

Код: Выделить всё

'components' => [
    'robokassa' => [
            'class' => '\robokassa\Merchant',
            'baseUrl' => 'https://auth.robokassa.ru/Merchant/Index.aspx',
            'sMerchantLogin' => '',
            'sMerchantPass1' => '',
            'sMerchantPass2' => '',
            'isTest' => !YII_ENV_PROD,
    ]
    ...
]
На данном этапе все верно?

Далее создал контроллер controllers/PaymentController.php
В котором код:

Код: Выделить всё

<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
class PaymentController extends Controller
{
    public function actionInvoice()
    {
            $model = new Invoice();
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
                    /** @var \robokassa\Merchant $merchant */
                    $merchant = Yii::$app->get('robokassa');
                    return $merchant->payment($model->sum, $model->id, 'Пополнение счета', null, Yii::$app->user->identity->email);
            } else {
                    return $this->render('invoice', [
                            'model' => $model,
                    ]);
            }
    }
/**
  * @inheritdoc
  */
    public function actions()
    {
            return [
                    'result' => [
                            'class' => '\robokassa\ResultAction',
                            'callback' => [$this, 'resultCallback'],
                    ],
                    'success' => [
                            'class' => '\robokassa\SuccessAction',
                            'callback' => [$this, 'successCallback'],
                    ],
                    'fail' => [
                            'class' => '\robokassa\FailAction',
                            'callback' => [$this, 'failCallback'],
                    ],
            ];
    }
/**
  * Callback.
         * @param \robokassa\Merchant $merchant merchant.
         * @param integer $nInvId invoice ID.
         * @param float $nOutSum sum.
         * @param array $shp user attributes.
  */
    public function successCallback($merchant, $nInvId, $nOutSum, $shp)
    {
            $this->loadModel($nInvId)->updateAttributes(['status' => Invoice::STATUS_ACCEPTED]);
            return $this->goBack();
    }
    public function resultCallback($merchant, $nInvId, $nOutSum, $shp)
    {
            $this->loadModel($nInvId)->updateAttributes(['status' => Invoice::STATUS_SUCCESS]);
            return 'OK' . $nInvId;
    }
    public function failCallback($merchant, $nInvId, $nOutSum, $shp)
    {
            $model = $this->loadModel($nInvId);
            if ($model->status == Invoice::STATUS_PENDING) {
                    $model->updateAttributes(['status' => Invoice::STATUS_FAIL]);
                    return 'Ok';
            } else {
                    return 'Status has not changed';
            }
    }
    /**
         * @param integer $id
         * @return Invoice
         * @throws \yii\web\BadRequestHttpException
         */
    protected function loadModel($id) {
            $model = Invoice::find($id);
            if ($model === null) {
                    throw new BadRequestHttpException;
            }
            return $model;
    }
}
А что делать далее я не представляю.
Вообще нужно чтобы при оформлении заказа из корзины на страничке https://super-master.pro/cart/view
При нажатии на кнопку "оформить заказ" - заказ оформлялся (падал в базу данных и отправлялось письмо по e-mail что сейчас уже функционирует)
Но нужно доделать чтобы открывалась эта самая робокасса с возможностью оплаты товара.

p/s магазин в системе робокасса создан и активирован!
Заранее спасибо за ответы.

trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Подключаем платежную систему Робокасса через дополнение yii2-robokassa

Сообщение trueorfalse » 2018.05.01, 18:08

Как я вижу.
В оформление заказа нажимаю кнопку, и перекидываю в робокасса, в робокассе оплатил и нажимаю вернуться в магазин, так вот нужны тебе ссылки для обработки заказа, к примеру /success, /fail. Если оплатил, то перекинет его на success и там покажи ему в что заказ оформлен, и наоборот с fail.
Пути для успешной/не удачной оплаты думаю сам сможешь написать в робокассе.

Технически помочь не могу, с робокассой не работал, и в yii опыт на уровне одного проекта.

Ответить