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 con 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? GraciasObtener información de PayPal después de una transacción
Respuesta
PayPal funciona así:
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 datos POST a esa URL para que su servidor 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 se trata de 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 se redirige 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 tanto IPN como PDT: si el correo electrónico IPN falla, 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 tienen documentación completa y scripts de ejemplo.
Notificar URL debe conducir a la secuencia de comandos que guarda los datos devueltos por 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 elegir para verificar una orden 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. Puesto que el cuerpo de la respuesta es URL codificada que es sólo una cuestión de reemplazar los saltos de línea con ampersands- como esto
$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 que puede incluso dejar de lado el segundo parámetro ($ this > Detalles del) y los valores se establecen como variables globales.
- 1. paypal IPN obtener la identificación de transacción del comprador
- 2. Problemas de transacción de PayPal MECL
- 3. enviando el formulario después de la transacción exitosa de dinero de PayPal usando php
- 4. URL web directa a la transacción de PayPal
- 5. Revertir la transacción después de @Test
- 6. Obtener URL de referencia - los visitantes procedentes de PayPal (HTTPS)
- 7. Cómo verificar el pago exitoso de paypal
- 8. DESPUÉS de INSERTAR desencadenar en una transacción por separado?
- 9. Datos POST de PayPal después del pago exitoso
- 10. ¿Cómo obtener las credenciales API de paypal?
- 11. Recuperando el estado de transacción de PayPal MassPay con la ID de correlación original
- 12. cómo obtener información de pago en Magento?
- 13. Cómo obtener el número de filas insertadas por una transacción
- 14. Notificar url de Paypal
- 15. Programar mostrar información sobre herramientas después de una llamada ajax
- 16. cómo obtener información de UIAlertView?
- 17. ¿Cuál es la longitud y el tipo de ID de transacción de PayPal (txn_id)?
- 18. ¿Cuánta información, en promedio, usa una transacción de tarjeta de crédito?
- 19. PayPal pagos recurrentes
- 20. La transacción vuelve después de finalizar la transacción: ha sido llamada en ella
- 21. Paypal Callback de pago
- 22. Configurar una devolución de llamada después de una transacción ha cometido
- 23. Transacción dentro de la transacción
- 24. ¿Debo cerrar un socket (TCPIP) después de cada transacción?
- 25. integración de PayPal en asp.net con C#
- 26. ID de token de Paypal Único?
- 27. transacción está todavía abierta después de cancelar la consulta
- 28. obtener una transacción Webkit executeSql para devolver un valor
- 29. obtener una parte de una línea después de grep
- 30. obtener la cadena después de una serie de una cadena
Tal vez estoy malentendido, pero pensé que se trataba de una cosa o de otra.Pensé que puede tener PDT en su perfil de comerciante, o IPN, pero no ambos. ¿Puede mostrarme cómo configurar tanto PDT como IPN al mismo tiempo? – Volomike
@Volomike: lea los dos últimos párrafos [aquí (paypal)] (https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntro) y otras respuestas de SO como [this uno] (http://stackoverflow.com/questions/2836779/paypal-ipn-vs-pdt) –
@JasonWilliams El enlace parece roto. –