| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

07-05-2011, 10:15
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
Hilfe bei Paypal-Zahlung
Hallo,
ich habe eine Microsite geschrieben, in der ich Kunden per Vorkasse, Lastschrift oder Paypal bezahlen lassen möchte. Ich poste dazu mal ein paar Codeschnipsel: Zuerst das Formular, in der ich die Daten erfassen lasse, incl. der an paypal zu übergebenden Werte:
Code:
<form name="formular" method="post" action="bought.php" onsubmit='return checkForm();'>
...
<input type="radio" name="Zahlmethode" value="paypal" onchange="PruefeInhalt()"/>
<input type="radio" name="Zahlmethode" value="vorkasse" onchange="PruefeInhalt()"/>
...
<input type="hidden" name="business" value="meinemail@meinemail.de" />
<input type="hidden" name="item_name" value="Artikelname" />
<input type="hidden" name="return" value="http://www.meineurl.de/bought.php">
<input type="hidden" name="notify_url" value="http://www.meineurl.de/bought.php">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="lc" value="DE">
<input type="hidden" name="amount" value="1.00" />
</form>
...
function PruefeInhalt() {
document.formular.amount.value = brutto;
if (document.formular.Zahlmethode[0].checked) {
document.formular.action = "https://www.paypal.com/cgi-bin/webscr";
} else if (document.formular.Zahlmethode[1].checked ||
document.formular.Zahlmethode[2].checked) {
document.formular.action = "bought.php";
}
}
D.h. PruefeInhalt ändert das Sprungziel, wenn Zahlungsart Paypal gewählt wird, und ändert es wieder zurück, wenn die anderen Zahlungsarten gewählt werden, und setzt auch den richtigen Betrag. So weit scheint alles zu funktionieren, bei Auswahl von Paypal kann man auch bei Paypal bezahlen.
Dann kommt in der Datei bought.php folgender Code:
Code:
$vorname = $_POST['vorname'];
$name = $_POST['name'];
$strasse = $_POST['strasse'];
$plz = $_POST['plz'];
$ort = $_POST['ort'];
$land = $_POST['land'];
$tel = $_POST['tel'];
$email = $_POST['email'];
$set1 = $_POST['set1'];
$newsletter = $_POST['newsletter'];
$kommentar = $_POST['kommentar'];
$kontonr = $_POST['kontonr'];
$blz = $_POST['blz'];
$inhaber = $_POST['inhaber'];
$paypalzahlungok = " - Zahlung o.k.";
$value_f = $_POST['Zahlmethode'];
if ($value_f == 'paypal') {
// 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.paypal.com', 80, $errno, $errstr, 30);
if (!$fp) {
echo "http error";
$paypalzahlungok = " - Fehler";
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
$resarray[] = $res;
}
fclose ($fp);
if ($resarray['12'] == "VERIFIED") {
echo '<font color="#000000"><br><p>Vielen Dank für Ihren Auftrag. Sie erhalten in Kürze ' .
'eine E-Mail an ' . $_POST['email'] . ' mit Ihren Bestelldaten. </p><br></font>';
} else {
echo '<font color="#000000"><br><p>Es ist ein Fehler bei der Bezahlung aufgetreten.</p><br></font>';
$paypalzahlungok = " - Fehler";
}
}
}
// EMail an den Kunden versenden
$text = 'Sehr geehrte(r) Herr/Frau ' . $_POST['vorname'] . ' ' . $_POST['name'] . ',<br><br>';
$text = $text . 'wir haben folgende Daten von Ihnen empfangen: ' . $_POST['strasse'] . ', ' .
$_POST['land'] . ' - ' . $_POST['plz'] . ' ' . $_POST['ort'] . ', Tel. ' . $_POST['tel'] .
'<br><u>Gewünschte Produkte:</u><br>- Anzahl DVDs von Deepak Chopra von dessen Vortrag am ' .
'30.04.2011 \'Heilung, Transformation und ein höheres Bewusstsein\' zu je 23,90 Euro incl. ' .
'MwSt. zzgl. Versand: ' . $_POST['set1'] . '<br>' .
'<u>Gewünschte Zahlungsart:</u> ';
...
Ich bekomme dann allerdings die Meldung:
Zitat:
<>... User unknown
Fehler: Could not instantiate mail function.
|
Ich schreibe dort auch etwas in eine Datenbank, und das INSERT-Statement schlägt auch fehl. Ein Kontrolloutput zeigt mir, dass die Werte leer sind, sprich, wenn ich das richtig interpretiere, sind nach der Paypal-Zahlung natürlich die _POST-Variablen nicht gesetzt. Wie kann ich das verhindern?
|

08-05-2011, 15:32
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
1. Wann wird das Formular tatsächlich gesendet? Dass sehe ich atm noch nicht.
2. Sicher, dass ich die Zahlung nicht umgehen kann? Ich brauch doch nur meine Daten an dir bought.php absenden. EDIT: ich sehe, du hast ne validierung drin
|

09-05-2011, 08:22
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Warum sehe ich kein error_reporting ?
|

09-05-2011, 09:47
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
@TobiaZ
Da gibt´s natürlich einen Button.
|

09-05-2011, 11:26
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
@combie
Ich habe jetzt mal folgendes eingefügt:
Code:
error_reporting(E_ALL);
und zwar gleich vor:
Code:
$vorname=$_POST['vorname'];
Leider keine Anzeigen????
|

09-05-2011, 11:39
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
das ist ja auch nur die eine Hälfte des Error-reporting ...
was fehlt ist
PHP-Code:
ini_set('display_errors', 1);
damit die nun generierten Meldungen auch ausgegeben werden
ich fürchte nur, es wird dir genau bestätigen, was du schon weißt - deine Post-Daten sind nach dem "Ausflug" zu paypal leer ...Weil Paypal dir eben deine Post Daten nicht zurückschickt, sondern nur den Bezahlt-Link aufruft ....
__________________
Wer LESEN kann, ist klar im Vorteil!
|

11-05-2011, 14:03
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
@eagle275
Trotzdem kommen keine Ausgaben.
Ich stelle mir gerade die Frage, ob ich das auch anders lösen kann, z.B. indem ich in der Funktion PruefeInhalt anstatt
Code:
document.formular.action = "https://www.paypal.com/cgi-bin/webscr";
etwas setze wie:
Code:
document.formular.action = "bought-paypal.php";
, dann in der bought-paypal.php zuerst die Feldinhalte auslese und mir merke, z.B. indem ich sie in eine Datenbank schreibe, dann https://www.paypal.com/cgi-bin/webscr aufrufen, und dort dann in eine bought-paypal2.php zurückspringen lasse, wo dann der Rest erledigt wird, indem die Parameter aus der Datenbank genommen werden.
Denkt Ihr, das kann funktionieren? Und wie rufe ich eine Adresse wie https://www.paypal.com/cgi-bin/webscr aus PHP heraus auf?
Danke!
|

11-05-2011, 14:06
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Wieso nicht einfach die Paypal-API verwenden?
|

11-05-2011, 14:27
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
@h3ll
Gibt mir die API meine Formulardaten wieder mit zurück?
|

11-05-2011, 14:28
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Nein, wozu auch? Du hast die ja schon. Warum sollte man dir etwas zurückgeben, das du schon hast?
|

11-05-2011, 14:37
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
Weil ich ja erst nach erfolgreicher Zahlung durch Paypal diese sinnvoll verarbeiten kann. Dann habe ich sie aber leider nicht mehr.
|

11-05-2011, 14:45
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von beginner123
Weil ich ja erst nach erfolgreicher Zahlung durch Paypal diese sinnvoll verarbeiten kann. Dann habe ich sie aber leider nicht mehr.
|
Dann schreib sie in die Session.
|

11-05-2011, 15:03
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
Irgendwo habe ich gelesen, dass das in Zusammenhang mit Paypal auch nicht sicher wäre.
|

11-05-2011, 15:04
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Wieso?
|

12-05-2011, 10:54
|
|
beginner123
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 42
|
|
Weiß ich nicht mehr.
Nun, wenn ich das tun möchte, stoße ich wohl sofort auf das nächste Problem: Ich muss die Formular-Variablen ja dann in SESSION-Variablen abspeichern. Und das geht ja wohl sinnvoll nur in der JavaScript-Funktion checkForm, die hier aufgerufen wird:
Code:
<form name="formular" method="post" action="ticket-booked.php" onsubmit='return checkForm();'>
Und JavaScript kann wieder keine SESSION-Variablen anlegen.
Also löst es nicht mein Problem... (oder ich weiß einfach noch zu wenig...)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|