DevGroup-ru / dotplant2

E-Commerce CMS - Yii Framework 2 (yii2, shop)
http://dotplant.ru/
Other
641 stars 252 forks source link

Issue with Robokassa #291

Closed Nks closed 8 years ago

Nks commented 8 years ago

I this this issue may occur and in other payment method. When we trying to pay with this payment type it's must redirect us to other website here:

  $SignatureValue = $this->getSignature();
        $data['SignatureValue'] = $SignatureValue;
        $url = 'http://' . $this->merchantUrl . '/Index.aspx?' . http_build_query($data);

        return $this->redirect($url);
    }

And in pay view we have this

echo $paymentType->getPayment($order, $orderTransaction)->content();

In this case we will get typecasting error when we try to echo redirect.

fps01 commented 8 years ago

@Nks I think Yii::$app->end(); is better solution than return false;. What about it? May you try it?

Nks commented 8 years ago

@fps01 я думаю мы в любом случае не достигнем и return false и Yii::$app->end() так что по сути это будет излишним. Вообще в идеале: если не сработал редирект - это ошибка, а человека перекинуть на урл в любом случае надо. Можно сгенерировать некий js код типа:

<script>
window.location='http://robokassa/payment/url';
</script>

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

Philosoft commented 8 years ago

@Nks, прикол в том, что $this->redirect просто устанавливает заголовки, настоящего редиректа и прерывания выполнения тут не происходит, поэтому return false всё сломает, а Yii::$app->end() тут необходим, чтобы прервать выполнение и сформировать ответ с заголовками редиректа

fps01 commented 8 years ago

@Nks Если мне не изменяет память, то $this->redirect() не прекращает выполнение приложения, а просто изменяет данные в Yii::$app->response. Таким образом, если после (например, в представлении) у нас будет код, то он выполнится, а это будет лишним в данном случае.

Nks commented 8 years ago

@fps01 хорошо, тогда пусть будет с Yii::$app->end().

fps01 commented 8 years ago

@Nks ждем PR. И удали, пожалуйста файл installed.mark из .gitignore.

Nks commented 8 years ago

@fps01 сделано.

fps01 commented 8 years ago

Thanks.