2016-02-01 210 views
1

你好朋友我過去5天的時間真的非常辛苦,試圖弄清楚我的貝寶腳本不想在我的網站上工作,我得出的結論是curl_setopt由於某些原因是錯誤的,因爲我已經嘗試從PayPal IPN模擬器和我的查詢的執行沒有curl_setopt,我真的不知道如何解決這個問題。Ipn paypal curl_setopt

<?php 
$dbusername  = 'whatever'; //db username 
$dbpassword  = 'whatever'; //db password 
$dbhost  = 'whatever'; //db host 
$dbname  = 'whatever'; //db name 
$conn = mysqli_connect($dbhost,$dbusername,$dbpassword,$dbname); 

// STEP 1: Read POST data 

// reading posted data from 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"; 
} 


// STEP 2: Post IPN data back to paypal to validate 

    $ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); // change to [...]sandbox.paypal[...] when using sandbox to test 
    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); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); 

    // In wamp like environments that do not come bundled with root authority certificates, 
    // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
    // of the certificate as shown below. 
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); 
if(!($res = curl_exec($ch))) { 

if (!$conn) 
     { 
     die('Could not connect: ' . mysqli_error()); 
     } 

     // mysqli_select_db($dbname, $conn); 

     // insert in our IPN record table 
     $query = "INSERT INTO dale 
     (itransaction_id) 
     VALUES 
     ('Error')"; 

     if (mysqli_query($conn, $query)) { 
      echo "New record created successfully"; 
     } else { 
      echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
     } 

     mysqli_close($conn); 

// error_log("Got " . curl_error($ch) . " when processing IPN data"); 
curl_close($ch); 
exit; 
} 
curl_close($ch); 


// STEP 3: 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 Primary PayPal email 
// check that payment_amount/payment_currency are correct 
// process payment 

// assign posted variables to local variables 
$item_name = $_POST['item_name']; 
$item_number = $_POST['item_number']; 
$payment_status = $_POST['payment_status']; 
if ($_POST['mc_gross'] != NULL) 
    $payment_amount = $_POST['mc_gross']; 
else 
    $payment_amount = $_POST['mc_gross1']; 
$payment_currency = $_POST['mc_currency']; 
$txn_id = $_POST['txn_id']; 
$receiver_email = $_POST['receiver_email']; 
$payer_email = $_POST['payer_email']; 
$custom = $_POST['custom']; 

// Insert your actions here 
if (!$conn) 
     { 
     die('Could not connect: ' . mysqli_error()); 
     } 
     // mysqli_select_db($dbname, $conn); 

     // insert in our IPN record table 
     $query = "INSERT INTO dale 
     (itransaction_id) 
     VALUES 
     ('success')"; 

     if (mysqli_query($conn, $query)) { 
      echo "New record created successfully"; 
     } else { 
      echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
     } 

     mysqli_close($conn); 

    } else if (strcmp ($res, "INVALID") == 0) { 
    // log for manual investigation 

    if (!$conn) 
     { 
     die('Could not connect: ' . mysqli_error()); 
     } 

     // mysqli_select_db($dbname, $conn); 

     // insert in our IPN record table 
     $query = "INSERT INTO dale 
     (itransaction_id) 
     VALUES 
     ('fail')"; 

     if (mysqli_query($conn, $query)) { 
      echo "New record created successfully"; 
     } else { 
      echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
     } 

     mysqli_close($conn); 
    } 
    ?> 

這是一類,我從貝寶有,我已經嘗試了許多其他類,但似乎沒有工作。

+0

curl_setopt = curl set選項,那麼您認爲哪個選項有問題?你可以一次刪除一個來測試 –

+0

你需要記錄你的curl錯誤,這可能會顯示ssl握手失敗。 [閱讀此](https://www.angelleye.com/paypal-ssl-error-poodle-vunerability/)的詳細信息。 –

回答

0

我相信最近paypal發佈的數據發生了變化(2016年1月30日)mc_currency和datecreation字段現在爲空。