0

问题

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

形式

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

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)) {
        ...

逻辑有缺陷

我知道我的逻辑有缺陷,但是根据我的研究,您无法从控制器发布,所以我最终得到了一个有效的保存按钮或一个有效的远程发布。

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

非常感谢。

4

1 回答 1

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 做一些研究:)

于 2012-12-06T14:39:10.237 回答