TYPO3:如何允许第三方查询字符串参数?

TYPO3: How can I allow third party query string parameters?

我创建了一个多步骤订单表单扩展,它收集一些用户数据,然后重定向到不同的第三方解决方案以进行支付步骤。

此第三方解决方案(如 PayPal)需要 return url 才能返回我的表单。所以当前的工作流程是这样的:

  1. 我的表单:收集用户数据
  2. 我的表格:使用 return url
  3. 重定向到支付提供商
  4. 支付提供商:收集用户数据进行支付
  5. 支付提供商:重定向回我的表单
  6. 我的表格:显示包含收集数据的订单详细信息
  7. 支付提供商:提交订单
  8. 我的表单:重定向到成功页面

我希望到目前为止这是可以理解的。我坚持到第 4 步,因为从支付提供商返回到我的表单的每个重定向都以 404 结尾,因为支付提供商添加了一些我的表单不知道的查询字符串参数。我认为这里的问题是这个参数不是 cHash 计算的,这就是它们失败的原因。

在第 2 步中,我生成了表单的 return 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

因此生成的从 PayPal 到我的表单的重定向 url 看起来像:

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 不知道参数已经存在于给定的 return 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');

所以我已将 "normal" return url(仅包含我的扩展参数)发送到 PayPal 并向 uri 构建器注册第二个 url 以获取从 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)

那么如何允许第三方应用为特定控制器操作生成的自定义查询字符串参数?

您需要从 cHash 中排除这些参数。

InstallTool 中,您会找到

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

在您输入参数列表(以逗号分隔)的位置,您不想在 cHash 中被考虑。