2016-02-26 57 views
0

在這個時候我沒有ssl證書。我剛剛命令它,我需要建立一個新的網絡服務器作爲目前,而我建立這個應用程序我使用我的現有服務器與附加域。當我完成它,我會得到我的新的專用服務器和ssl證書安裝。現在我只想讓這個工作....付款部分是最後一點...我有4天完成這個工作!paypal IPN通知沒有被髮送

我正在使用以下按鈕;

<form target="paypal" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_xclick"> 
<input type="hidden" name="amount" value="25"> 
    <input type="hidden" name="item_number" value="1111"> 
<input type="hidden" name="currency_code" value="GBP"> 
<input type="hidden" name="custom" value="123456"> 
<input type="hidden" name="business" value="[my-business-paypal-email]"> 
<input type="hidden" name="notify_url" value="http://www.[mywebsiteURL].com/gdpripnh-exec.php"> 
<input type="hidden" name="return" value="http://www.[mywebsiteURL].com/upgrade.php"> 

我已經安裝我的貝寶IPN的網址在我的PayPal開發者的控制面板,因爲它沒有工作,我加入了notify_url到按鈕。

我試過ipn測試模擬器,並得到了這個錯誤響應; IPN未被髮送,握手未被驗證。請查看您的信息。

我使用這個腳本IPN

<?php 

// CONFIG: Enable debug mode. This means we'll log requests into 'ipn.log' in the same directory. 
// Especially useful if you encounter network errors or other intermittent problems with IPN (validation). 
// Set this to 0 once you go live or don't require logging. 
define("DEBUG", 1); 

// Set to 0 once you're ready to go live 
define("USE_SANDBOX", 1); 


define("LOG_FILE", "./giggdipn.log"); 


// Read POST data 
// reading posted data directly from $_POST causes serialization 
// issues with array data in POST. Reading raw POST data from input stream instead. 
$raw_post_data = file_get_contents('php://input'); 
$raw_post_array = explode('&', $raw_post_data); 
$myPost = array(); 
foreach ($raw_post_array as $keyval) { 
    $keyval = explode ('=', $keyval); 
    if (count($keyval) == 2) 
     $myPost[$keyval[0]] = urldecode($keyval[1]); 
} 
// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-validate'; 
if(function_exists('get_magic_quotes_gpc')) { 
    $get_magic_quotes_exists = true; 
} 
foreach ($myPost as $key => $value) { 
    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
     $value = urlencode(stripslashes($value)); 
    } else { 
     $value = urlencode($value); 
    } 
    $req .= "&$key=$value"; 
} 

// Post IPN data back to PayPal to validate the IPN data is genuine 
// Without this step anyone can fake IPN data 

if(USE_SANDBOX == true) { 
    $paypal_url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; 
} else { 
    $paypal_url = "https://www.paypal.com/cgi-bin/webscr"; 
} 

$ch = curl_init($paypal_url); 
if ($ch == FALSE) { 
    return FALSE; 
} 


curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 

if(DEBUG == true) { 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, 1); 
} 

// CONFIG: Optional proxy configuration 
//curl_setopt($ch, CURLOPT_PROXY, $proxy); 
//curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 

// Set TCP timeout to 30 seconds 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); 

// CONFIG: Please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
// of the certificate as shown below. Ensure the file is readable by the webserver. 
// This is mandatory for some environments. 

//$cert = __DIR__ . "./cacert.pem"; 
//curl_setopt($ch, CURLOPT_CAINFO, $cert); 

$res = curl_exec($ch); 
if (curl_errno($ch) != 0) // cURL error 
    { 
    if(DEBUG == true) { 
     error_log(date('[Y-m-d H:i e] '). "Can't connect to PayPal to validate IPN message: " . curl_error($ch) . PHP_EOL, 3, LOG_FILE); 
    } 
    curl_close($ch); 
    exit; 

} else { 
     // Log the entire HTTP response if debug is switched on. 
     if(DEBUG == true) { 
      error_log(date('[Y-m-d H:i e] '). "HTTP request of validation request:". curl_getinfo($ch, CURLINFO_HEADER_OUT) ." for IPN payload: $req" . PHP_EOL, 3, LOG_FILE); 
      error_log(date('[Y-m-d H:i e] '). "HTTP response of validation request: $res" . PHP_EOL, 3, LOG_FILE); 

      // Split response headers and payload 
      list($headers, $res) = explode("\r\n\r\n", $res, 2); 
     } 
     curl_close($ch); 
} 

// Inspect IPN validation result and act accordingly 

if (strcmp ($res, "VERIFIED") == 0) { 
    // check whether the payment_status is Completed 
    // check that txn_id has not been previously processed 
    // check that receiver_email is your PayPal email 
    // check that payment_amount/payment_currency are correct 
    // process payment and mark item as paid. 

    // assign posted variables to local variables 
    $item_name = $_POST['item_name']; 
    $item_number = $_POST['item_number']; 
    $payment_status = $_POST['payment_status']; 
    $payment_amount = $_POST['mc_gross']; 
    $payment_currency = $_POST['mc_currency']; 
    $txn_id = $_POST['txn_id']; 
    $receiver_email = $_POST['receiver_email']; 
    $payer_email = $_POST['payer_email']; 
$custom = $_POST['custom']; 

include($_SERVER['DOCUMENT_ROOT'].'/addme/config/connect.php'); 

include($_SERVER['DOCUMENT_ROOT'].'/functions/global-functions.php'); 




if (strtolower($payment_status) == 'completed'){ 

//good stuff happens here 


}else{ 

//bad stuff happens here 

} 

    if(DEBUG == true) { 
     error_log(date('[Y-m-d H:i e] '). "Verified IPN: $req ". PHP_EOL, 3, LOG_FILE); 
    } 
} else if (strcmp ($res, "INVALID") == 0) { 
    // log for manual investigation 
    // Add business logic here which deals with invalid IPN messages 
    if(DEBUG == true) { 
     error_log(date('[Y-m-d H:i e] '). "Invalid IPN: $req" . PHP_EOL, 3, LOG_FILE); 
    } 
} 
exit(); 
?> 

,所以我按PayPal按鈕,並重定向到貝寶沙箱頁面,在這裏我用登錄測試帳戶和付款。支付成功,我回到了我指定的頁面。沒有任何IPN活動是如此。

我在哪裏//好東西發生在這裏我正在收集信息並將其輸入到我的sql數據庫中。我也在更新我用於測試的日誌文件。但沒有任何事情發生。

我很困惑,因爲我確實只有一次登錄giggdipn.log。它說, [2016年2月26日17:27美國/芝加哥]無法連接到PayPal,以驗證IPN消息:SSL連接錯誤

我刪除了它,並試圖再次,只是爲了看看,現在我不明白它根本就沒有。 nada,沒什麼,拉鍊。

所以我google了一下,試圖加入這個; curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,0);

我還是一無所獲。我現在很生氣。

請幫助!

+0

您確定您爲ipn響應提供的網址是否正確並可從外部訪問? – Gavin

+0

反對 接受 你會想我是愚蠢的!這證明我是!我完全忘記了使用不是來自我的IP地址的htaccess重定向所有流量!我剛剛去睡覺,早上我會創建一個規則,允許訪問ipn。我猜這肯定是問題。當我這樣做時,我會更新你。不能相信我完全忽略了這一點,並花了近半天的時間!非常感謝你,我現在可以睡得好! –

+0

是的,它現在正常工作,我已完成付款部分。 :-)我必須首先建立我的ssl證書。 –

回答

0

確保網址爲外部世界提供了IPN響應。

+0

添加了訪問規則,現在我正在更新日誌文件,但是我收到錯誤; [2016-02-27 02:59 America/Chicago]無法連接到PayPal來驗證IPN消息:SSL連接錯誤 - 我現在正在設置我的專用服務器,並將安裝我的擴展SSL證書。當它完成我期望我會解決這個問題,但我會更新它以任何方式....隨着時間的推移,爲我交叉手指! –

+0

最簡單的答案有時最難找到。我懷疑ssl錯誤與註釋的cacert代碼塊有關,但是當你的ssl設置時你不需要它。 – Gavin

+0

感謝您的幫助Gavin –