Php 使用codeigniter中的PayPal集成,成功页面不会向我返回任何内容
我真的不知道该怎么办 我只想将PayPal响应插入到我的数据库中,但在处理付款后不会返回任何值 我已经在我的PayPal沙箱帐户中执行了以下操作: 启用自动返回 设置自动返回URL('https://hous3r3nt.000webhostapp.com/houserent/MyApplication/paymentSuccess") 启用的付款数据传输(PDT) 但是仍然没有运气:( 我正在使用000webhostapp使我的网站保持活力,因为我认为如果我不使用localhost,它会起作用,但它仍然不起作用 以下是我在控制器中的代码:Php 使用codeigniter中的PayPal集成,成功页面不会向我返回任何内容,php,codeigniter,paypal,Php,Codeigniter,Paypal,我真的不知道该怎么办 我只想将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捕获时,您已经获得了即时、同步的成功/失败响应。您好,先生,这解决了我的问题。非常感谢您,先生