paypal Token mir cURL abholen
Sabine
- programmiertechnik
0 Ralf
Hallo Forum,
ich möchte die Zahlung per PayPal in einen Shop intergrieren.
Dazu habe ich bei PayPal ein Entwickler-Konto angelegt und eine Signatur erstellt.
Nun müsste ich laut Doku für einen anstehenden Zahlungsvorgang ein Token vom PayPal Server abholen. Als Beispiel in der Doku ist ein Request von einem einfachen html Formular angeführt:
<form method=post action=https://api-3t.sandbox.paypal.com/nvp>
<input type=hidden name=USER value=sdk-three_api1.sdk.com>
<input type=hidden name=PWD value=QFZCWN5HZM8VBG7Q>
<input type=hidden name=SIGNATURE value=A-IzJhZZjhg29XQ2qnhapuwxIDzyAZQ92FRP5dqBzVesOkzbdUONzmOU>
<input type=hidden name=VERSION value=65.1>
<input type=hidden name=PAYMENTREQUEST_0_PAYMENTACTION value=Sale>
<input name=PAYMENTREQUEST_0_AMT value=19.95>
<input type=hidden name=RETURNURL value=https://www.example.de/paypal/succsess>
<input type=hidden name=CANCELURL value=https://www.example.de/paypal/cancel>
<input type=submit name=METHOD value=SetExpressCheckout>
</form>
Wenn ich das vom Browser aus starte, erhalte ich ein:
TOKEN=EC%2d5CS694277D668331R&TIMESTAMP=2013%2d10%2d28T13%3a33%3a41Z&CORRELATIONID=7824e042260a4&ACK=Success&VERSION=65%2e1&BUILD=8275157
, also ein ACK=Success und ein gültiges Token. So weit, so gut.
Wenn ich für USER, PWD und SIGNATURE meine echten Werte eingebe, funktioniert es auch.
Nun brauche ich das Token aber nicht im Browser sondern auf meinem Server. Also mache ich den Request im CheckOut-Script meines Webshops mit cURL:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api-3t.sandbox.paypal.com/nvp");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'USER' => 'sdk-three_api1.sdk.com',
'PWD' => 'QFZCWN5HZM8VBG7Q',
'SIGNATURE' => 'A-IzJhZZjhg29XQ2qnhapuwxIDzyAZQ92FRP5dqBzVesOkzbdUONzmOU-GhnAVM1',
'VERSION' => '65.1',
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
'PAYMENTREQUEST_0_AMT' => '19.95',
'RETURNURL' => 'https://www.example.de/paypal/succsess',
'CANCELURL' => 'https://www.example.de/paypal/cancel',
'METHOD' => 'SetExpressCheckout'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
echo urldecode($output);
echo "<p>done.";
?>
Hier erhalte ich aber die Antwort:
TIMESTAMP=2013-10-28T13:38:23Z&CORRELATIONID=583f8300b55fc&ACK=Failure&L_ERRORCODE0=10001&L_SHORTMESSAGE0=Internal Error&L_LONGMESSAGE0=Timeout processing request
Eine Fahndung nach dem Fehlercode in der PayPal Doku hat mich leider auch noch nicht weiter gebracht.
Da alle Parameter im cURL Script identisch mit denen im html-Formular sind, vermute ich den Fehler bei meinem cURL Aufruf. Der Aufruf scheint aber zum Server durch zu kommen, sonst würde es ja keien Fehlermeldung geben.
Hat jemand einen Tip, was ich hier falsch mache?
LG
Sabine
Hi,
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl\_setopt($ch, CURLOPT\_POSTFIELDS, http\_build\_query($data));
MfG
Ralf