2017-03-03 1 views
1

Ich versuche, Paypal IPN eingerichtet zu bekommen und kann nicht herausfinden, was mit dem Code falsch ist, den ich unten geschrieben habe. Wenn ich versuche, es mit Paypal Sandbox IPN Simulator zu testen, gibt es zurück "IPN wurde nicht gesendet, und der Handshake wurde nicht überprüft. Bitte überprüfen Sie Ihre Informationen." Ich denke, dass das Problem etwas mit den Überschriften ist, die zu einem sanbox freundlichen Format geändert werden müssen, aber nicht genau herausfinden können, was ich ändern muss.Versuchen, Paypal IPN mit Sandbox zu testen, aber Handshake geht nicht durch

Dies ist die URL, die der Code unter: http://pmoore17.altervista.org/TWADrama/ticketsales1.php

Jede Hilfe ist willkommen! Vielen Dank!

<?php 
// Read the notification from PayPal which comes in the form of a POST array and create the acknowledgement response 
$req = 'cmd=_notify-validate';    // add 'cmd' to beginning of the acknowledgement you send back to PayPal 

foreach ($_POST as $key => $value) 
{ // Loop through the notification NV pairs 
$value = urlencode(stripslashes($value)); // Encode the values 
$req .= "&$key=$value";     // Add the NV pairs to the acknowledgement 
} 


// Assign the paypal payment notification values to local variables 
if($_POST){ 
$last_name = $_POST['last_name']; 
$first_name = $_POST['first_name']; 
$quantity = $_POST['quantity']; 
$payer_email = $_POST['payer_email'];} 

//Set up the acknowledgement request headers (this is the updated version for http 1.1) 
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Host: www.paypal.com\r\n"; 
$header .= "Connection: close\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
//Open a socket for the acknowledgement request 
$fq = fsockopen ('www.paypal.com/cgi-bin/webscr', 80, $errno, $errstr, 30); 

if(!$fq){ 
    echo "HTTP ERROR"; 
} 
else 
{//start 1 

// Post request back to PayPal for validation 
fputs ($fq, $header . $req); 

//once paypal receives the acknowledgement response, another message will be send containing the single word VERIFIED or INVALID 

while (!feof($fq)) 
    { //start 2, while not EndOfFile 
$res = fgets ($fq, 1024); // Get the acknowledgement response 
$res = trim($res); 
    if (strcmp ($res, "VERIFIED") == 0) 
     {// start 3, Response is OK 
     $fn = "content.txt"; 
$fp = fopen($fn,"a+") or die ("Error opening file in write mode!"); 
fputs($fp,"last_name: ".$last_name.", "); 
fputs($fp,"first_name: ".$first_name.", "); 
fputs($fp,"quantity: ".$quantity.", "); 
fputs($fp,"payer_email: ".$payer_email."\n"); 
fclose($fp) or die ("Error closing file!"); 
     }//end 3 
     else if(strcmp ($res, "INVALID") == 0) 
      {//start 4 
      $fn = "content.txt"; 
$fp = fopen($fn,"a+") or die ("Error opening file in write mode!"); 
fputs($fp,"last_name: ".$last_name.", "); 
fputs($fp,"first_name: ".$first_name.", "); 
fputs($fp,"quantity: ".$quantity.", "); 
fputs($fp,"payer_email: ".$payer_email."\n"); 
fclose($fp) or die ("Error closing file!"); 
      }//end 4 


} //end 2 
fclose ($fq); //close file pointer 
} //end 1 
?> 

Antwort

0

Versuchen Sie, dieses:

//Open a socket for the acknowledgement request 
$fq = fsockopen ('www.paypal.com/cgi-bin/webscr', 80, $errno, $errstr, 30); 

Um dies:

//Open a socket for the acknowledgement request 
$fq = fsockopen ('ssl://www.sandbox.paypal.com/cgi-bin/webscr', 443, $errno, $errstr, 30); 
0

Sie können überprüfen Sie die eingehenden Benachrichtigung durch das alte Paypal SDK stattdessen Ihre eigenen Crafting (in der Regel falsch) Lösung. Mit Musik:

$ composer require paypal/adaptivepayments-sdk-php

oder das SDK manuell herunterladen. Dann überprüfen sie die PPIPNMessage-Klasse:

// you can omit both arguments, mode defaults to "live" 
$ipn = new PPIPNMessage('', ['mode' => 'sandbox']); 
$valid = $ipn->validate(); // returns bool 
$data = $ipn->getRawData(); // returns the IPN notification as array 

// continue with things 

Vielleicht ist es zu viel das gesamte SDK erhalten nur für eine Klasse, aber das ist Ihre Wahl sowieso :)

+0

Auch für die letzten paar Tage die 'notify_url' Override in Ihren Tasten/Links funktioniert nicht (es scheint). Ich erhalte die IPN-Benachrichtigungen seit den letzten Amazon/GoDaddy/anderen ausgefallenen "Cloud" -Jungen nicht mehr. Ich sage nicht, dass es etwas damit zu tun hat, ich sage nur den Moment. – kodeart

+0

Sie brauchen nicht das gesamte SDK, Sie können nur den IPN-Code hier https://github.com/paypal/ipn-code-samples/tree/master/php erhalten. Seit einigen Tagen funktioniert der IPN-Simulator nicht mehr für mich, aber ich bekomme IPN Benachrichtigung, wenn Sie eine Zahlung an paypal.com oder sandbox.paypal.com machen – JBart