我没有从Paypal的URL中接收控制器中的变量,表明交易成功。它们出现在URL中很好但我的控制器由于某些奇怪的原因没有收到它们。我认为代码绝对正确。可能是什么原因?
示例:
控制器,PHP:
function success(){
//get the transaction data
$paypalInfo = $this->input->get();
$data['item_number'] = $paypalInfo["item_number"];
$data['txn_id'] = $paypalInfo["tx"];
$data['payment_amt'] = $paypalInfo["amt"];
$data['currency_code'] = $paypalInfo["cc"];
$data['status'] = $paypalInfo["st"];
//pass the transaction data to view
$this->load->view('paypal/success', $data);
}
我得到所有变量的结果:
答案 0 :(得分:0)
请记住Paypal不通过URL发送数据,因此您无法通过GET
方法接收数据。你应该试试这个
$paypalInfo = $this->input->post();
而不是你现在使用的。如果不起作用,请使用以下
$paypalInfo = $_POST;
它必须工作
答案 1 :(得分:0)
看起来没有设置item_number。对它执行GET可能会导致错误。
您正在使用类函数来获取$_GET
项。
在函数$this->input->get()
中,您应该检查var是否可用(if(isset($_GET[..]))
),否则返回默认值,这样就不会遇到这些问题。
另一方面,您似乎没有向Pay Pal提交item_number。也可能是稍后在脚本中处理您的订单并将其回溯到原始版本的问题...
----还要看下面的答案----
Paypal发送POST变量...
答案 2 :(得分:0)
只需处理$ _POST会给您带来巨大的安全风险!也适用于$ _GET。将$ _POST更改为$ _GET,使用$ _GET代替$ _POST。
我建议至少以下内容;
foreach ($_POST as $key->$value)
{
$cleankey = addslashes($key);
$paypalInfo[$cleankey] = addslashes($value);
}
然后;
$req_keys = array(
'item_number' => 'item_number',
'txn_id' => 'tx',
'payment_amt' => 'amt',
'currency_code' => 'cc',
'status' => 'st',
);
$data = array();
$error = array();
foreach($req_keys as $req_data_key=>$req_paypalinfo_key )
{
if(isset($paypalInfo[$req_paypalinfo_key]))
{
$data[$req_data_key] = $paypalInfo[$req_paypalinfo_key];
}
else
{
$error[] = "missing POST data:".$req_paypalinfo_key;
}
}
if(count($error) > 0)
{
var_dump($error);
}
else
{
$this->load->view('paypal/success', $data);
}
这将使您了解所需的信息是否存在,并为您提供一些防止SQL注入的保护。