2016-02-01 4 views
1

Привет друзья У меня было очень тяжелое время за последние 5 дней, просто пытаясь выяснить, почему мой сценарий для PayPal не хочет работать на моем сайте, и я пришел к выводу, что это curl_setopt ошибочно по какой-то причине, потому что я пробовал IPN симулятор от Paypal и выполнить мой запрос без 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); 
    } 
    ?> 

Это класс, который я получил от Paypal, и я пробовал много других классов, но ни один из них не работает.

+0

curl_setopt = curl set option, так какой вариант, по вашему мнению, виноват? вы могли бы просто удалить один за раз, чтобы проверить –

+0

Вам нужно занести в журнал ошибку вашего локона, что, вероятно, приведет к сбою рукопожатия ssl. [Читайте это] (https://www.angelleye.com/paypal-ssl-error-poodle-vunerability/) для получения дополнительной информации об этом. –

ответ

0

Я считаю, что в последнее время произошли изменения от данных, опубликованных в PayPal (30 января 2016 года), поля mc_currency и datecreation теперь равны нулю.