TYPO3: Как я могу разрешить сторонние параметры строки запроса?

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

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

  1. Моя форма: сбор пользовательских данных
  2. Моя форма: перенаправление на платежную систему с обратным URL
  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)

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


person Fox    schedule 17.05.2018    source источник
comment
Просто некоторые идеи (не уверен, что работает, поэтому не ответ): а) попробуйте отключить генерацию cHash при создании URL-адреса перенаправления. Используйте для этого $this->uriBuilder->setUseCacheHash(false);. b) Сделать сгенерированный URI некэшируемым. Используйте для этого $this->uriBuilder->setNoCache(true);. c) Сделайте так, чтобы cHash расчет не учитывал дополнительные параметры от PayPal. Вы можете настроить параметры, которые будут игнорироваться для расчета cHash, в Инструменте установки/LocalConfiguration.php, клавиша [FE][cHashExcludedParameters].   -  person Jost    schedule 18.05.2018
comment
Привет Йост, спасибо за ваш ответ. Если я использую а) или б), я снова получаю ошибку 404, возможно, потому, что для [FE][pageNotFoundOnCHashError] установлено значение true. Но c), похоже, работает, поэтому мне не нужно регистрировать второй построитель uri с пустыми параметрами PayPal. Итак, редирект теперь работает, но я все еще не могу получить доступ к добавленным параметрам из PayPal :(.   -  person Fox    schedule 18.05.2018
comment
Это работает сейчас :). Проблема была вызвана добавлением setSection('form-multistep') к URL-адресам перенаправления, кажется, что поставщики платежей избегают этого и добавляют параметры после него, поэтому все параметры после # не работали.   -  person Fox    schedule 18.05.2018


Ответы (1)


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

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

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

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

person Bernd Wilke πφ    schedule 18.05.2018
comment
Привет Бернд, спасибо за ваш ответ. Я добавил параметры PayPal и других платежных провайдеров в исключенные параметры cHash, и перенаправления от платежных провайдеров обратно в мою форму теперь работают без регистрации дополнительных uri через конструктор uri, но мне все равно, какой платежный провайдер я. используя, я все еще не могу получить доступ к их добавленным параметрам строки запроса :(. Любая идея? - person Fox; 18.05.2018
comment
Это работает сейчас :). Проблема была вызвана добавлением setSection('form-multistep') к URL-адресам перенаправления, кажется, что поставщики платежей избегают этого хэша и добавляют параметры после него, поэтому все параметры после # не работали. - person Fox; 18.05.2018
comment
'#' в URL-адресе переключается с параметров на привязку. якорный текст может быть любым. Добавление параметров к такому URL-адресу изменит только привязку: параметры не распознаются. - person Bernd Wilke πφ; 18.05.2018