【问题标题】:Not receiving URL variables in controller with GET, codeigniter使用 GET、codeigniter 在控制器中未接收 URL 变量
【发布时间】:2016-10-05 18:18:00
【问题描述】:

我的控制器中没有收到来自 Paypal 的 URL 中的变量,表明交易成功。它们出现在 URL 中很好,但我的控制器由于某种奇怪的原因没有收到它们。我认为代码是绝对正确的。可能是什么原因?

例子:

收到的网址:http://example.com/Paypal/success?tx=8FA47070HF454623K&st=Completed&amt=20%2e00&cc=USD&cm=&item_number=

控制器,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);
     }

我得到了所有变量的这个结果:

【问题讨论】:

  • 在配置中设置$config['allow_get_array'] = TRUE;
  • splash58,已经是真的了。

标签: php codeigniter paypal get


【解决方案1】:

仅处理 $_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 注入的保护。

【讨论】:

    【解决方案2】:

    记住 Paypal 不通过 URL 发送数据,因此您无法通过 GET 方法接收数据。你应该试试这个

    $paypalInfo = $this->input->post();
    

    而不是你现在使用的。如果它不起作用,请使用以下

    $paypalInfo = $_POST;
    

    它必须工作

    【讨论】:

    • rm 设置为 2,但如果启用“支付数据传输”,Paypal 仍会通过 GET 发送数据。使用 POST 进行操作是行不通的。
    【解决方案3】:

    看起来 item_number 没有设置。对其执行 GET 可能会导致错误。

    您正在使用类函数来获取$_GET 项目。

    在函数 $this->input->get() 中,您应该检查 var 是否可用 (if(isset($_GET[..]))),否则返回默认值,这样就不会遇到这些问题。

    另一方面,您似乎没有向 Pay Pal 提交 item_number。稍后在脚本中处理您的订单并将其回溯到原始订单也可能是一个问题......

    ----另请参阅下面的答案----

    Paypal 发送 POST 变量...

    【讨论】:

    • 尝试了所有建议。问题依然存在。 :(
    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2015-12-10
    • 2013-12-02
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多