Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用codeigniter中的PayPal集成,成功页面不会向我返回任何内容_Php_Codeigniter_Paypal - Fatal编程技术网

Php 使用codeigniter中的PayPal集成,成功页面不会向我返回任何内容

Php 使用codeigniter中的PayPal集成,成功页面不会向我返回任何内容,php,codeigniter,paypal,Php,Codeigniter,Paypal,我真的不知道该怎么办 我只想将PayPal响应插入到我的数据库中,但在处理付款后不会返回任何值 我已经在我的PayPal沙箱帐户中执行了以下操作: 启用自动返回 设置自动返回URL('https://hous3r3nt.000webhostapp.com/houserent/MyApplication/paymentSuccess") 启用的付款数据传输(PDT) 但是仍然没有运气:( 我正在使用000webhostapp使我的网站保持活力,因为我认为如果我不使用localhost,它会起作用,

我真的不知道该怎么办

我只想将PayPal响应插入到我的数据库中,但在处理付款后不会返回任何值

我已经在我的PayPal沙箱帐户中执行了以下操作:

启用自动返回

设置自动返回URL('https://hous3r3nt.000webhostapp.com/houserent/MyApplication/paymentSuccess")

启用的付款数据传输(PDT)

但是仍然没有运气:(

我正在使用000webhostapp使我的网站保持活力,因为我认为如果我不使用localhost,它会起作用,但它仍然不起作用

以下是我在控制器中的代码:

    // Paypal integration

    function buyProduct($property_id){
        // Set variables for paypal form
        $returnURL = base_url().'MyApplication/paymentSuccess'; //payment success url
        $cancelURL = base_url().'MyApplication/paymentFail'; //payment fail url
        $notifyURL = base_url().'MyApplication/ipn'; //ipn url

        // Get product data from the database
        $property = $this->MyApplicationModel->getPropertyApplication($property_id);

        // Get current user ID from the session (optional)
        $userID = !empty($_SESSION['id'])?$_SESSION['id']:1;

        // Add fields to paypal form
        $this->paypal_lib->add_field('return', $returnURL);
        $this->paypal_lib->add_field('cancel_return', $cancelURL);
        $this->paypal_lib->add_field('notify_url', $notifyURL);
        $this->paypal_lib->add_field('item_name', $property['property_name']);
        $this->paypal_lib->add_field('custom', $userID);
        $this->paypal_lib->add_field('item_number',  $property['property_id']);
        $this->paypal_lib->add_field('amount',  $property['property_price']);

        // Render paypal form
        $this->paypal_lib->paypal_auto_form();
    }

    function paymentSuccess(){
            // Get the transaction data
            $paypalInfo = $this->input->get();

            $productData = $paymentData = array();
            if(!empty($paypalInfo['item_number']) && !empty($paypalInfo['tx']) && !empty($paypalInfo['amt']) && !empty($paypalInfo['cc']) && !empty($paypalInfo['st'])){
                    $item_name = $paypalInfo['item_name'];
                    $item_number = $paypalInfo['item_number'];
                    $txn_id = $paypalInfo["tx"];
                    $payment_amt = $paypalInfo["amt"];
                    $currency_code = $paypalInfo["cc"];
                    $status = $paypalInfo["st"];

                    // Get product info from the database
                    $productData = $this->MyApplicationModel->getPropertyApplication($item_number);

                    // Check if transaction data exists with the same TXN ID
                    $paymentData = $this->payment->getPayment(array('txn_id' => $txn_id));
            }

            // Pass the transaction data to view
            $data['product'] = $productData;
            $data['payment'] = $paymentData;
            $this->load->view('paypal/paymentSuccess', $data);
    }

     function paymentFail(){
            // Load payment failed view
            $this->load->view('paypal/paymentFail');
     }

     function ipn(){
            // Retrieve transaction data from PayPal IPN POST
            $paypalInfo = $this->input->post();

            if(!empty($paypalInfo)){
                    // Validate and get the ipn response
                    $ipnCheck = $this->paypal_lib->validate_ipn($paypalInfo);

                    // Check whether the transaction is valid
                    if($ipnCheck){
                            // Check whether the transaction data is exists
                            $prevPayment = $this->payment->getPayment(array('txn_id' => $paypalInfo["txn_id"]));
                            if(!$prevPayment){
                                    // Insert the transaction data in the database
                                    $data['user_id']    = $paypalInfo["custom"];
                                    $data['product_id']    = $paypalInfo["item_number"];
                                    $data['txn_id']    = $paypalInfo["txn_id"];
                                    $data['payment_gross']    = $paypalInfo["mc_gross"];
                                    $data['currency_code']    = $paypalInfo["mc_currency"];
                                    $data['payer_name']    = trim($paypalInfo["first_name"].' '.$paypalInfo["last_name"], ' ');
                                    $data['payer_email']    = $paypalInfo["payer_email"];
                                    $data['status'] = $paypalInfo["payment_status"];

                                    $this->payment->insertTransaction($data);
                            }
                    }
            }
    }

请帮帮我,我真的不知道现在该怎么办。

自动退货和PDT是HTML支付标准的古老设置,这是一种无API的集成。不要依赖自动退货或PDT来完成任何重要的事情,尤其是在数据库中记录信息。退货永远不会发生。客户可能是在PayPal上查看收据时,可能无法单击返回,或者他们的客户端可能崩溃或出现任何问题。绝对没有任何业务逻辑应该依赖于这些功能,它们仅适用于信息/感谢消息目的

但是,您发布的代码是针对IPN的,因此至少是朝着正确的方向迈出的一步,因为IPN服务是一个独立的东西,尽管它非常古老,不推荐使用,但可以用于异步接收通知

要确定您没有收到IPN通知的原因,请首先检查您自己的IPN侦听器/通知URL的Web服务器日志,以及您的PayPal帐户

您可以使用IPN模拟器测试IPN侦听器


为了获得最佳效果,请将您的集成升级到不依赖IPN的版本。最佳解决方案是在服务器上创建两个路由,一个用于“创建订单”,另一个用于“捕获订单”,如下所示:--这些路由应返回JSON输出(且仅返回JSON)。第二个,在返回JSON之前,应该检查是否有成功的响应,然后编写数据库

将两条路线与以下审批流配对:


这样,就不需要异步IPN消息服务。当您通过API捕获时,您已经获得了即时、同步的成功/失败响应。

您好,先生,这解决了我的问题。非常感谢您,先生