Po wielu godzinach rozmyślania i próbach skonfigurowania tego, co powinno być stosunkowo prostym procesem wysyłania płatności na stronę www.sandbox.paypal.com i przekierowaniem z powrotem do strony w mojej witrynie z transakcją id w querystringu, w końcu to osiągnąłem.Błąd PayP PDT 4003
Otrzymuję teraz komunikat o błędzie "FAIL Error 4003".
Oto kod, którego używam. Jest niemal tak samo jak paypal przykład (wszystko co zrobili jest echo z odpowiedzi):
<?php
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-synch';
$tx_token = $_GET['tx'];
$auth_token = "ZdoN6q4GLiRniR2BbOzEEF22GJOWHpVOXRtP7fAhBpvwwm5GyWcTzO_sSSO";
$req .= "&tx=$tx_token&at=$auth_token";
// 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 possible, securely post back to paypal using HTTPS
// Your PHP server will need to be SSL enabled
// $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
if (!$fp)
{
// HTTP ERROR
echo "HTTP Error";
}
else
{
fputs ($fp, $header . $req);
// read the body data
$res = '';
$headerdone = false;
while (!feof($fp))
{
$line = fgets ($fp, 1024);
if (strcmp($line, "\r\n") == 0) {
// read the header
$headerdone = true;
}
else if ($headerdone)
{
// header has been read. now read the contents
$res .= $line;
echo $line;
}
}
// parse the data
$lines = explode("\n", $res);
$keyarray = array();
if (strcmp ($lines[0], "SUCCESS") == 0)
{
for ($i=1; $i<count($lines);$i++)
{
list($key,$val) = explode("=", $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
// check 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
$firstname = $keyarray['first_name'];
$lastname = $keyarray['last_name'];
$itemname = $keyarray['item_name'];
$amount = $keyarray['payment_gross'];
echo ("<p><h3>Thank you for your purchase!</h3></p>");
echo ("<b>Payment Details</b><br>\n");
echo ("<li>Name: $firstname $lastname</li>\n");
echo ("<li>Item: $itemname</li>\n");
echo ("<li>Amount: $amount</li>\n");
echo ("");
}
else if (strcmp ($lines[0], "FAIL") == 0) {
echo "Failure: " . $lines[0];
// log for manual investigation
}
}
fclose ($fp);
?>
<br />
Thank you for your payment. Your transaction has been completed, and a receipt for your purchase has been emailed to you. You may log into your account at <a href="http://www.sandbox.paypal.com/ie">www.sandbox.paypal.com/ie</a> to view details of this transaction.
I zadbali, aby potwierdzić adresy e-mail dla obu moich piaskownicy kont firmowych i nabywcy oraz włączona PDT.
Klient zostaje przekierowany poprawnie z powrotem do mojej strony „dziękuję” z następującymi paramaters kwerendy - ?tx=4FU63684496248523&st=Pending&amt=29.90&cc=EUR&cm=&item_number=
Czy ktoś napotkał ten komunikat o błędzie? Jeśli tak, jakie są zwykle przyczyny?
I rzeczywiście nazywa paypal temat tego błędu i dali mi tajemniczą odpowiedź, mówiąc, że błąd pochodzi z jakiejś złej konfiguracji w moim koszyku (używam ubercart). Niezbyt pomocna ... – Jukebox
Oto kolejna często zadawana pytanie, którą należy zgłosić: https://ppmts.custhelp.com/app/answers/detail/a_id/13 – Jukebox
Korzystam z prostego formularza do przesyłania żądania zapłaty do paypal i używam ich własnego kodu do przetworzenia odpowiedzi. Rozwijam strony internetowe i aplikacje przez dość długi czas, ale przez większość czasu udało mi się uniknąć paypal. Jestem zdumiony tym, jak zła jest ich dokumentacja, konfiguracja testów i ogólna usługa. – TGuimond