Redirect 如何从控制器操作重定向post请求?

Redirect 如何从控制器操作重定向post请求?,redirect,post,cakephp,request,Redirect,Post,Cakephp,Request,我一直在Cakephp中集成支付网关。以下是使用的版本: Cakephp:3.4.13 PHP:5.6.15 问题: 我需要使用POST请求向支付网关网站提交表格,但某些字段包含机密数据(商户id等),因此我无法在表格中显示。否则,可以使用开发人员工具(检查元素)读取它们。在提交表单之前,我还需要添加一些自定义字段 因此,我想使用控制器操作的POST请求将用户重定向到带有必填字段的支付网关网站 我试图找到解决办法,但没有成功。发现了一个类似的问题,但没有答案。在CakePHP3.x中有没有同

我一直在Cakephp中集成支付网关。以下是使用的版本:

  • Cakephp:3.4.13

  • PHP:5.6.15

问题:

我需要使用POST请求向支付网关网站提交表格,但某些字段包含机密数据(商户id等),因此我无法在表格中显示。否则,可以使用开发人员工具(检查元素)读取它们。在提交表单之前,我还需要添加一些自定义字段

因此,我想使用控制器操作的POST请求将用户重定向到带有必填字段的支付网关网站

我试图找到解决办法,但没有成功。发现了一个类似的问题,但没有答案。在CakePHP3.x中有没有同样的方法

支付网关表格:

<?= $this->Form->create(false, ['url' => <URL>, 'id'=>'payForm']) ?>
<?= $this->Form->hidden('payment_notification_url', ['value'=> $this->Url->build('/payment/notify', true)]); ?>
<?= $this->Form->hidden('payment_redirect_url', ['value'=>$this->Url->build('/payment/getMoney', true)]); ?>
<?= $this->Form->hidden('merchant_id', ['value'=> <merchant_id>]); ?>
<?= $this->Form->hidden('reference', ['value'=> <reference>]); ?>
<?= $this->Form->hidden('email', ['value'=> <email>]); ?>
<?= $this->Form->hidden('fname', ['value'=> <first_name>]); ?>
<?= $this->Form->hidden('lname', ['value'=> <last_name>]); ?>
<?= $this->Form->hidden('address', ['value'=> <address>]); ?>
<?= $this->Form->hidden('town', ['value'=> <state>]); ?>
<?= $this->Form->hidden('country', ['value'=> <country>]); ?>
<?= $this->Form->hidden('postcode', ['value'=> <zipcode>]); ?>
<?= $this->Form->hidden('amount', ['class' => 'amount', 'value'=> <amount>]); ?>
<?= $this->Form->hidden('currency', ['value'=> 'US']); ?>

<?php echo $this->Form->end() ?>

阅读文档,这可能会有所帮助。您可以向特定操作提交表单,然后从那里使用下面的代码发出
http
请求

获取完整文档

要重定向到外部url,您可以使用

$this->redirect('http://www.google.com');

不可能,无论是在CakePHP还是普通PHP中。请阅读更多信息。即使这是可能的,重定向当然也是可以检查的。如果需要发送必须对用户代理隐藏的机密,则不能使用用户代理发送,或者必须对其进行加密。因此,如果API不支持加密,并且它希望用户代理提交数据,那么数据就不是机密数据。请重新阅读该要求。这不会将用户重定向到支付网关。您尝试过吗?您需要创建一个需要重定向的操作,然后从那里可以调用它。它会重定向,不会重定向。它将作为CURL请求工作。请阅读文档。现在检查代码,我已将重定向代码添加到外部url
$this->redirect('http://www.google.com');