transacción transaccion sesion rastrear politicas iniciar cuentas cuenta ayuda php paypal

php - transaccion - Obtenga información de PayPal después de una transacción



rastrear transaccion paypal (4)

Quiero crear una transacción simple en mi sitio web donde después de que se complete la transacción de la persona, quiero que PayPal redirija al usuario para ir a un lugar en mi sitio y quiero que PayPal me proporcione los detalles para que pueda usar PHP para analizarlo y enviarles un correo electrónico con el enlace a su compra. No estoy seguro de lo que hace notify_url? Gracias


Notificar URL debe conducir a la secuencia de comandos que guarda los datos devueltos de PayPal, tales como:

/** Fetch order from PayPal (IPN reply) * @return int received ID of inserted row if received correctly, 0 otherwise */ function FetchOrder() { $transactionID=$_POST["txn_id"]; $item=$_POST["item_name"]; $amount=$_POST["mc_gross"]; $currency=$_POST["mc_currency"]; $datefields=explode(" ",$_POST["payment_date"]); $time=$datefields[0]; $date=str_replace(",","",$datefields[2])." ".$datefields[1]." ".$datefields[3]; $timestamp=strtotime($date." ".$time); $status=$_POST["payment_status"]; $firstname=$_POST["first_name"]; $lastname=$_POST["last_name"]; $email=$_POST["payer_email"]; $custom=$_POST["option_selection1"]; if ($transactionID AND $amount) { // query to save data return $this->insertID; } else { return 0; } }

También puede optar por verificar un pedido más adelante:

/** Verify PayPal order (IPN) * PayPal returns VERIFIED or INVALID on request * @return bool verified 1 if verified, 0 if invalid */ function VerifyOrder() { $_POST["cmd"]="_notify-validate"; $ch=curl_init(); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_USERAGENT,"your agent - replace"); curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com/cgi-bin/webscr"); curl_setopt($ch,CURLOPT_POST, 1); foreach ($_POST as $key=>$value) { $string.="&".$key."=".urlencode(stripslashes($value)); } curl_setopt($ch, CURLOPT_POSTFIELDS, $string); $result=curl_exec($ch); if ($result=="VERIFIED") return 1; else return 0; }


$tx=$_REQUEST[''tx'']; $paypal_url=''https://www.paypal.com/cgi-bin/webscr?cmd=_notify-synch&tx=''.$tx.''&at=token here''; $curl = curl_init($paypal_url); $data = array( "cmd" => "_notify-synch", "tx" => $tx, "at" => "token here" ); $data_string = json_encode($data); curl_setopt ($curl, CURLOPT_HEADER, 0); curl_setopt ($curl, CURLOPT_POST, 1); curl_setopt ($curl, CURLOPT_POSTFIELDS, $data_string); curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 1); $headers = array ( ''Content-Type: application/x-www-form-urlencoded'', ''Host: www.paypal.com'', ''Connection: close'' ); curl_setopt ($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); $lines = explode("/n", $response); $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); } $first_name=$keyarray[''first_name'']; $last_name=$keyarray[''last_name'']; $payment_status=$keyarray[''payment_status'']; $business=$keyarray[''business'']; $payer_email=$keyarray[''payer_email'']; $payment_gross=$keyarray[''payment_gross'']; $mc_currency=$keyarray[''mc_currency'']; }


Al analizar la respuesta PDT, estoy usando parse_str . Como el cuerpo de la respuesta está codificado en URL, solo se trata de reemplazar los saltos de línea con símbolos y símbolos, como este

$result = curl_exec($ch); //replace the breaks with ''&'' $r_string = str_replace("/n", "&", $result); //parse the response into a key->value array parse_str($r_string, $this->details); if(!isset($this->details[''SUCCESS''])){ //the "SUCCESS" or "FAIL" response is the first key return FALSE; } else{ //the values of the response are now in an array return TRUE; }

dependiendo de la aplicación, incluso puede dejar fuera el segundo parámetro ( $ this-> details ) y los valores se establecen como variables globales.


PayPal funciona así:

Usted tiene un formulario con un botón de "comprar". Cuando se hace clic en él, envía información (producto, precio, nombre de su cuenta, etc.) a PayPal.

El comprador acepta pagarle y, cuando se completa la transacción, PayPal envía un "IPN" (notificación de pago instantánea) a su URL de notificación: envía los datos POST a esa URL para que su servidor la procese. Usted responde a PayPal para preguntar si le enviaron los datos POST (en lugar de un impostor) y si luego responden que se trata de una transacción real, puede lanzar el producto al cliente. Tenga en cuenta que todo esto sucede en el fondo mientras su comprador todavía está "en" el sitio web de PayPal.

Hay una etapa opcional final, que es que PayPal devuelve al comprador a su sitio web. En este caso, envían al comprador a su url de "devolución" y pueden (opcionalmente) volver a transmitir los datos de la transacción (llaman a este PDT). Y puede consultar nuevamente con Paypal si esta es una transacción válida y proporcionar una descarga, etc. en ese punto.

La parte más difícil que nadie explica es que el comprador no es redirigido a su URL de notificación. es decir, el "visitante" de la URL de notificación de su sitio web es PayPal, no el comprador , por lo que esto no sucede como parte de la sesión de su comprador. Si desea continuar una sesión en las tres partes de este proceso, debe crear un medio de seguimiento del comprador en su formulario y pasarlo a PayPal en un campo del formulario denominado "personalizado". Estos datos se le pasan a usted en los datos de IPN y PDT, y puede usarlos para restablecer una conexión con la sesión de usuario original.

Realmente necesita implementar IPN y PDT: si falla el correo IPN, entonces tiene PDT como respaldo. Y si el usuario cierra su navegador web antes de que sean redirigidos a su página PDT, entonces ha enviado un correo electrónico IPN como copia de seguridad.

Busque en IPN y PDT y encontrará mucha información. PayPal también tiene documentación completa y scripts de ejemplo.