如何从控制器操作重定向发布请求?

时间:2018-09-17 13:30:25

标签: redirect post cakephp request

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

  • Cakephp:3.4.13

  • PHP:5.6.15

问题:

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

因此,我想使用Controller动作中的POST请求,将用户重定向到具有必填字段的付款网关网站。

我试图找到解决方案,但未能成功。找到了类似的问题here,但没有答案。 Cakephp 3.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() ?>

1 个答案:

答案 0 :(得分:0)

阅读文档可能会有所帮助。您可以提交表单以执行特定操作,然后可以使用以下代码从此处提出http请求。

有关完整文档Http Client

use Cake\Http\Client;

$http = new Client();

// Simple get
$response = $http->get('http://example.com/test.html');

// Simple get with querystring
$response = $http->get('http://example.com/search', ['q' => 'widget']);

// Simple get with querystring & additional headers
$response = $http->get('http://example.com/search', ['q' => 'widget'], [
  'headers' => ['X-Requested-With' => 'XMLHttpRequest']
]);

要重定向到外部网址,您可以使用此

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