Después de muchas horas de jugar e intentar configurar lo que debería ser el proceso relativamente simple de enviar un pago a www.sandbox.paypal.com y ser redirigido a una página en mi sitio con una transacción id en la cadena de consulta, finalmente lo logré.Paypal PDT error 4003
Aparece el mensaje de error 'FAIL Error 4003'.
Aquí está el código que estoy usando. Es más o menos lo mismo que el ejemplo paypal (lo único que han hecho es eco de las respuestas):
<?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.
Me he asegurado que confirmar las direcciones de correo electrónico para mis dos mercantes y el comprador cuentas de caja de arena y habilitado PDT.
El cliente se redirige correctamente de nuevo a mi 'gracias' de página con los siguientes parametros de cadena de consulta - ?tx=4FU63684496248523&st=Pending&amt=29.90&cc=EUR&cm=&item_number=
Alguien más ha encontrado con este mensaje de error? Si es así, ¿cuáles son las causas habituales?
De hecho, me llamaron paypal sobre ese error y me dieron una respuesta críptica, diciendo que el error proviene de alguna mala configuración en mi carrito (estoy usando ubercart). No es muy útil en absoluto ... – Jukebox
Aquí hay otras preguntas frecuentes para incluir en la mezcla: https://ppmts.custhelp.com/app/answers/detail/a_id/13 – Jukebox
Estoy usando un formulario simple para enviar la solicitud de pago a PayPal y en realidad estoy usando su propio código para procesar la respuesta. He estado desarrollando sitios web y aplicaciones por un tiempo bastante largo, pero he logrado mantenerme alejado de PayPal la mayor parte del tiempo. Estoy sorprendido de lo mal que es su documentación, instalación de prueba y servicio general. – TGuimond