TYPO3: Как разрешить сторонние параметры строки запроса? - PullRequest
0 голосов
/ 17 мая 2018

Я создал расширение формы многоэтапного заказа, которое собирает некоторые пользовательские данные и затем перенаправляет их на сторонние решения для этапа оплаты.

Это сторонние решения (такие как PayPal) требуют обратный URL, чтобы найти путь к моей форме. Таким образом, текущий рабочий процесс выглядит следующим образом:

  1. Моя форма: собирать данные пользователя
  2. Моя форма: перенаправить на платежный провайдер с обратным адресом
  3. Платежный провайдер: сбор пользовательских данных для оплаты
  4. Платежный оператор: перенаправить обратно на мою форму
  5. Моя форма: показать детали заказа с собранными данными
  6. Поставщик платежа: оформить заказ
  7. Моя форма: перенаправление на страницу успеха

Надеюсь, это пока понятно. Я придерживался шага 4, потому что каждое перенаправление от провайдера платежей обратно в мою форму заканчивается на 404, потому что провайдер платежей добавляет некоторые параметры строки запроса, которые моя форма не знает. Я думаю, что проблема здесь в том, что эти параметры не рассчитаны cHash, и это является причиной их неудачи.

На шаге 2 я генерирую URL возврата моей формы, это выглядит так:

$returnUrl = $this->uriBuilder
    ->reset()
    ->setTargetPageUid($returnPageId)
    ->setCreateAbsoluteUri(true)
    ->setSection('form-multistep')
    ->uriFor('step5', null, 'CouponItem', 'bookingmanager', 'p2');

Сгенерированный вывод выглядит так:

https://example.com/coupon/?tx_bookingmanager_p2%5Baction%5D=step5&tx_bookingmanager_p2%5Bcontroller%5D=CouponItem&cHash=565dc2e51a8d43bf3836b43b994e98d0#form-multistep

Итак, это URL-адрес, который будет отправляться различным поставщикам платежей, и если я скопирую этот URL-адрес в свой браузер, этот URL-адрес работает, НО поставщики платежей обрабатывают этот URL-адрес и добавляют в него некоторые пользовательские параметры строки запроса, прежде чем перенаправить .

Например, PayPal добавляет следующие параметры строки запроса:

 paymentId, token and PayerID

Таким образом, сгенерированный URL перенаправления из PayPal в мою форму выглядит так:

https://example.com/coupon/?paymentId=XXXXXX&token=XXXXXX&PayerID=XXXXXX&tx_bookingmanager_p2%5Baction%5D=step5&tx_bookingmanager_p2%5Bcontroller%5D=CouponItem&cHash=565dc2e51a8d43bf3836b43b994e98d0#form-multistep

И этот URL заканчивается на 404, потому что я думаю, что cHash больше не подходит для этого манипулируемого URL или я ошибаюсь?

Кроме того, я попытался задать эти параметры, например, так:

$returnUrl = $this->uriBuilder
    ->reset()
    ->setTargetPageUid($this->settings['returnPageId'])
    ->setCreateAbsoluteUri(true)
    ->setSection('form-multistep')
    ->setArguments(['paymentId' => '', 'token' => '', 'PayerID' => ''])
    ->uriFor('step5',null,'CouponItem','bookingmanager','p2');

Если я сделаю что-то подобное, то перенаправление с PayPal на мою форму будет работать, НО, к сожалению, не так, как ожидалось, потому что PayPal не знает, что параметры уже существуют в данном URL возврата, и все еще добавляет эти параметры снова, поэтому сгенерированный URL выглядит так:

https://example.com/coupon/?paymentId=&token=&PayerID=&tx_bookingmanager_p2%5Baction%5D=step5&tx_bookingmanager_p2%5Bcontroller%5D=CouponItem&cHash=bf642fb35a66033689b7d4ff772b3cf9#form-multistep&paymentId=XXXX&token=XXXX&PayerID=XXXX

Кроме того, я не могу получить доступ к параметрам строки запроса, которые PayPal добавил к URL :(. Поэтому я пробовал что-то вроде этого:

$returnUrl = $this->uriBuilder
    ->reset()
    ->setTargetPageUid($this->settings['returnPageId'])
    ->setCreateAbsoluteUri(true)
    ->setSection('form-multistep')
    ->uriFor('step5',null,'CouponItem','bookingmanager','p2');

$this->uriBuilder
    ->reset()
    ->setTargetPageUid($this->settings['returnPageId'])
    ->setCreateAbsoluteUri(true)
    ->setSection('form-multistep')
    ->setArguments(['paymentId' => '', 'token' => '', 'PayerID' => ''])
    ->uriFor('step5',null,'CouponItem','bookingmanager','p2');

Итак, я отправил «нормальный» URL-адрес возврата (только с моими параметрами расширения) в PayPal и зарегистрировал второй URL-адрес в конструкторе uri, чтобы перенаправить из PayPal мою рабочую форму (это уже кажется плохим).

Итак, перенаправление в PayPal через мою форму и перенаправление из PayPal обратно в мою форму работает, НО теперь у меня возникла та же проблема, что и в моей последней попытке. Я получил правильные параметры в своем URL, но не могу получить к ним доступ:

DebuggerUtility::var_dump(GeneralUtility::_GET());

array(3 items)
    tx_bookingmanager_p2 => array(2 items)
      action => 'step5' (5 chars)
      controller => 'CouponItem' (10 chars)
    cHash => 'cbe7c08c1a45e85404a06877c453cb63' (32 chars)
    id => '175' (3 chars)

Так как я могу разрешить настраиваемые параметры строки запроса, которые генерируются сторонним приложением для определенного действия контроллера?

1 Ответ

0 голосов
/ 18 мая 2018

Вам необходимо исключить эти параметры из cHash.

В InstallTool вы найдете значение для

$GLOBALS['TYPO3_CONF_VARS']['FE']['cHashExcludedParameters']

где вы вводите список параметров (через запятую), которые вы не хотите использовать в cHash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...