远程发布表单并将数据从会话保存到数据库

时间:2012-12-05 16:46:17

标签: php cakephp

问题

我已成功发布到远程支付网站,但同时我需要将订单的详细信息保存到数据库中

表格

这是提交数据的表单,其中大部分存储在配置中。

echo $this->Form->create(null, array('url' => Configure::read('Payment.strPurchaseURL'))); ?>

echo $this->Form->hidden('navigate', array(
    'name'  => 'navigate',
    'value' => ''
));
echo $this->Form->hidden('VPSProtocol', array(
    'name'  => 'VPSProtocol',
    'value' => Configure::read('Payment.strProtocol')
));
echo $this->Form->hidden('TxType', array(
    'name'  => 'TxType',
    'value' => Configure::read('Payment.strTransactionType')
));
echo $this->Form->hidden('Vendor', array(
    'name'  => 'Vendor',
    'value' => Configure::read('Payment.strVendorName')
));
echo $this->Form->hidden('Crypt', array(
    'name'  => 'Crypt',
    'value' => $encrypted
));
echo $this->Form->end(__('Proceed to payment'));

控制器

视图的其余控制器正确地完成了它的工作,但是这个if语句永远不会被调用,因为post的操作会将它从控制器中移除。 $post_data是会话中的数据,由前一个表单生成。

    if ($this->request->is('post')) {
        $this->Order->create();
        if ($this->Order->save($post_data)) {
        ...

逻辑有缺陷

我知道我的逻辑是有缺陷的,但是从我的研究中你不能从控制器发布,所以我要么最终得到一个工作保存按钮或一个工作的远程帖子。

我需要做两者,但我还没有找到一个好方法,希望你们中的一个好人可以让我直截了当。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我认为你应该能够使用PHP cURL来实现你想要的。保存订单后,您可以对辅助URL执行POST请求。这是一个未经测试的例子:

if ($this->request->is('post')) {
    $this->Order->create();
    if ($this->Order->save($post_data) {
        $url = 'http://domain.com/post.php';

        //url-ify the data for the POST
        $fields_string = http_build_query($post_data);

        //open connection
        $ch = curl_init();

        //set the url, number of POST vars, POST data
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_POST, count($post_data));
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

        //execute post
        $result = curl_exec($ch);

        //close connection
        curl_close($ch);
    }
}

您最好的选择是对cURL进行一些研究:)