我已成功发布到远程支付网站,但同时我需要将订单的详细信息保存到数据库中
这是提交数据的表单,其中大部分存储在配置中。
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)) {
...
我知道我的逻辑是有缺陷的,但是从我的研究中你不能从控制器发布,所以我要么最终得到一个工作保存按钮或一个工作的远程帖子。
我需要做两者,但我还没有找到一个好方法,希望你们中的一个好人可以让我直截了当。
非常感谢。
答案 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进行一些研究:)