Hilfe für PayPal-Zahlung via IPN?

bossi

Erfahrenes Mitglied
Hallo,
ich versuche gerade eine PayPal-Zahlung via IPN zu realisieren.
Leider bekomme ich als Antwort immer, nicht bezahlt ?
Könnt Ihr mal bitte schauen wo der Fehler ist :rolleyes:

Die Form:
PHP:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" name="frmPaypal" id="frmPaypal">

<input type="hidden" name="business" value="seller_1205168402_biz@googlemail.com">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="return" value="http://meineDomain.de/paypal_check.php">
<input type="hidden" name="cancel_return" value="http://meineDomain.de/paypal_check.php">
<input type="hidden" name="notify_url" value="http://meineDomain.de/paypal_check.php">
<input type="hidden" name="rm" value="2">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="lc" value="DE">
<input type="hidden" name="bn" value="toolkit-php">
<input type="hidden" name="cbt" value="Continue >>">
<input type="hidden" name="txn_id" value="">

!-- Payment Page Information -->
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="cn" value="Comments">
<input type="hidden" name="cs" value="">

!-- Product Information -->
<input type="hidden" name="item_name" value="Order ID: 38654">
<input type="hidden" name="amount" value="1.55">
<input type="hidden" name="invoice" value="6667778888">
<input type="hidden" name="quantity" value="">
<input type="hidden" name="item_number" value="">
<input type="hidden" name="undefined_quantity" value="">
<input type="hidden" name="on0" value="">
<input type="hidden" name="os0" value="">
<input type="hidden" name="on1" value="">
<input type="hidden" name="os1" value="">

!-- Shipping and Misc Information -->
<input type="hidden" name="shipping" value="">
<input type="hidden" name="shipping2" value="">
<input type="hidden" name="handling" value="">
<input type="hidden" name="tax" value="">
<input type="hidden" name="custom" value="">
<input type="hidden" name="invoice" value="6667778888">
</form>

<script type="text/javascript">
window.onload=function() {window.document.frmPaypal.submit();}
</script>
Und hier die paypal_check.php
PHP:
<?php
// VALIDATING
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

//$header = "POST https://" . $shopConfig['paypalUrl'] . "/cgi-bin/webscr HTTP/1.0\r\n";
//$header .= "Host: " . $shopConfig['paypalUrl'] . "\r\n";
//$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
//$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
//$fp = fsockopen ('$shopConfig['paypalUrl']', 80, $errno, $errstr, 30);

echo $_POST['invoice'];

if (!$fp) 
{
echo "http error";
} 
else
{
fputs ($fp, $header . $req);
while (!feof($fp))
{
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0)
{ 
echo "<br>zahlung okay";
} 
else 
{ 
echo "<br>nicht bezahlt";
} 
}
fclose ($fp);
}
?>
Die Weiterleitung nach PayPal hat hin und der Testaccount bezahlt auch.
Nach der Bezahlung wird auch weitergeleitet, aber es kommt immer nur:
nicht bezahlt
nicht bezahlt
nicht bezahlt
nicht bezahlt
nicht bezahlt

MfG
Bossi
 
Schon mal auf die Idee gekommen, sich den Response von PayPal anzuschauen? Evtl. liefert dir PayPal ja eine entsprechende Fehlermeldung, die dir weiterhelfen könnte.....
 
PHP:
foreach ($_POST as $key => $value) 
{ 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 
}
$res gibt das aus:
Code:
res: HTTP/1.1 200 OK 

res: Date: Tue, 11 Mar 2008 12:58:40 GMT 

res: Server: Apache/1.3.27 (Unix) mod_ssl/2.8.12 OpenSSL/0.9.7a mod_fastcgi/2.4.2 PHP/4.3.2 

res: Set-Cookie: c9MWDuvPtT9GIMyPc3jwol1VSlO=%7CFSQ_rRf2g_5jgOzySl82Uew8AYx6ExEOF0v22eXJiSiABl-xdmPUDYLCciEGOpyIIMc0EW%7CVnaABPres6jLkExwbQ_K6EDlbIALDer4gCdQ4_PkT-d0IGtR1eXEau1SUKnSq2uZixdo-W%7C; path=/; domain=.paypal.com 

res: Set-Cookie: cookie_check=yes; expires=Fri, 09-Mar-2018 12:58:41 GMT; path=/; domain=.paypal.com 

res: Set-Cookie: navcmd=_notify-validate; path=/; domain=.paypal.com 

res: Set-Cookie: Apache=91.143.80.106.45371205240320811; path=/; expires=Mon, 27-Jan-02 06:30:24 GMT 

res: Connection: close 

res: Content-Type: text/html; charset=UTF-8 

res: 

res: INVALID
 
Ich habs mal bischen umgeschrieben:

PHP:
<?php

// VALIDATING
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
	$value = urlencode(stripslashes($value));
	$req .= "&$key=$value";
}

// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

//echo $_POST['invoice'];

if (!$fp) {
	echo "http error";
} else {
	fputs ($fp, $header . $req);
	while (!feof($fp)) {
		$res = fgets ($fp, 1024);
		$resarray[] = $res;
	}
	
	fclose ($fp);

	if ($resarray['10'] == "VERIFIED")	{ 
		echo "<br><p>Zahlung okay</p><br>";
	} else { 
		echo "<br><p>Zahlung nicht okay</p><br>";
	}

	print_r($resarray);
	print_r($_POST);
}
?>

Ich hab die Antwort einfach in ein Array gepackt und prüfe am Ende nurnoch den Key 10. Sollte eigentlich immer da drin sein so wie ich es seh, müsste man aber noch mal prüfen.

Dank dir by the way, hab gestern den halben Tag nach so ner Lösung gesucht, hast mir sehr geholfen =)

Ich will das ganze einsetzen um Zugänge zu einer Datenbank zu verkaufen und bastel derzeit daran das jemand der einkauft direkt nen Zugang per Mail bekommt.

Mailadresse steht ja in $_POST, versenden und anlegen des Accounts geht ja in der If Abfrage ob Valid, mein einziges Problem sehe ich derzeit da drin das ich die Rechnungsnummern dynamisch erstelle wenn jemand auf einen Button kaufen klickt. Muss mal schauen was da sinn macht ... am besten wahrscheinlich einfach hochzählen.

Wenn ich alles fertig hab poste ich mal ne function hier =)
 
Ja wie ging es jetzt? Habe dein verbessertes Skript verwendet und bekomme auch "nicht erfolgreich" als Ergebnis angegeben! WO liegt denn das Problem? Sitze am gleichen Problem........bitte um Hilfe
 
Ich arbeite zur Zeit an einer PayPal-Klasse, und ich wuerde sagen dass Du zum einen den falschen Server ansprichst, und zum anderen auch ueber den falschen Port.

Ich arbeite mit diesem Aufruf:
PHP:
parent::__construct('api-3t.sandbox.paypal.com',443,true);
Welcher im Endeffekt zu einer Verbindung fuehrt die so aussieht:
PHP:
$this->connection=@fsockopen('ssl://api-3t.sandbox.paypal.com',443);

PayPal laeuft ueber HTTPS, also verschluesselt. Entsprechend musst Du dies auch bei fsockopen() beruecksichtigen.

Meine Klasse kann bislang ExpressCheckout, DirectPayment und Recurring Payments, wobei erstere bislang als einzige so implementiert sind wie ich es will.
 
Hi Endolino,

schreib doch mal was genau das Problem ist. Bekommst du einfach nur "nicht erfolgreich" zurück?

Poste am besten mal den ganze Quelltext und die Prints der Arrays, dann schau ich mal :)
 
hallo :)
habe auch ein problem dahingehend... naja
ich glaub ich bekomm keine $_POST daten von paypal gesendet.
habe in die foreach schleife ein echo eingebaut, um zu sehen, was alles geschickt wurde... aber die schleife wird nicht aufgerufen.. also werd ich da wohl keine daten bekommen :( oder hab ich da was übersehen


ich bekomme beim notification mail folgende meldung:

Betreff INVALID IPN

INVALID
cmd=_notify-validate


und $res gibt mir INVALID aus

code auf der eingabeseite:

PHP:
<form id="form1" name="form1" target="paypal" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post>
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="222222">
 
<input type="hidden" name="on0" value="<? echo $breite.'x'.$hoehe; ?> pxl, <? echo ceil($breite/11.8).'x'.ceil($hoehe/11.8); ?>mm">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="item_name" value="<? echo $location.', Bildname: '.$bildname; ?>">
<input type="hidden" name="item_number" value="<? echo $id; ?>">
<input type="image" src="https://www.paypal.com/de_DE/AT/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">


sehe ich das auch richtig (andere frage) dass ich mit item_name und item_number einen inhalt mitschicken kann den ich nach dem erfolgreichen "zahlen" wieder bekomme?
 
Zuletzt bearbeitet:
Wenn der PayPal-Server die dir IPN schickt muss Du alle vom Server geschickten Daten an diesen zurueckschicken. Wenn ich mich recht erinnere sogar in der gleichen Reihenfolge.

Die gezeigte Seite ist die Seite zum Kauf des Artikels, oder?
 
ja genau..


aber zurückschicken.. das erfolgt ja später oder?

als erstes ist ja die foreach... schleife, die die POST variablen checkt.. sollten da nicht schon daten in den POST variablen stecken?
 

Neue Beiträge

Zurück