Integrar paypal a una aplicacion de 0 con php

A ver si alguien me puede ayudar: No puedo dar mas explicaciones por el tema de privacidad en el trabajo.

Tengo una aplicacion, hecha de 0 en php en la que los clientes contratan un servicio. Dicho servicio se paga por paypal.

Tu rellenas unos datos, te sale el precio, y un formulario para poner tus datos personales.

El proceso tendria que ser:
-Rellenas el formulario.
-Pago por paypal
-Si el pago es correcto, volver a mi pagina. Hacer un insert en la bbdd, enviar correos para confirmar la compra, etc etc etc.

Yo he encontrado el siguiente codigo, pero tiene un problema: Que el cliente, una vez paga, paypal reenvia las variables a mi web, el problema llega si el cliente paga, paypal dice que el pago es correcto, y el cliente antes que paypal le redirija, cierra la ventana. La compra no queda registrada.

Y, aparte de eso, hay un agujero de seguridad:
http://www.miweb.com/ok.php?datos_pedid ... pedido=b...

Si haces eso, se registraria un pedido correctamente by the face.

Este es el codigo que encontre. Adaptado a mi web, funciona, pero pasa lo que he mencionado anteriormente.
<form name='formTpv' method='post' action='https://www.sandbox.paypal.com/cgi-bin/webscr'>
   
       <input type='hidden' name='cmd' value='_xclick'>
       <input type='hidden' name='business' value='mi_cuenta_sandbox@mi_pagina.com'>
       <input type='hidden' name='item_name' value='Nueva compra en mi web'>
       <input type='hidden' name='item_number' value='VENTA-X2561'>
       <input type='hidden' name='amount' value='10.15'>
       <input type='hidden' name='page_style' value='primary'>
       <input type='hidden' name='no_shipping' value='1'>
       <input type='hidden' name='return' value='http://mi_pagina/exito.html'>
       <input type='hidden' name='rm' value='2'>
       <input type='hidden' name='cancel_return' value='http://mi_pagina/cancelada.html'>
       <input type='hidden' name='no_note' value='1'>
       <input type='hidden' name='currency_code' value='EUR'>
       <input type='hidden' name='cn' value='PP-BuyNowBF'>
       <input type='hidden' name='custom' value=''>
       <input type='hidden' name='first_name' value='NOMBRE'>
       <input type='hidden' name='last_name' value='APELLIDOS'>
       <input type='hidden' name='address1' value='DIRECCIÓN'>
       <input type='hidden' name='city' value='POBLACIÓN'>
       <input type='hidden' name='zip' value='CÓDIGO POSTAL'>
       <input type='hidden' name='night_phone_a' value=''>
       <input type='hidden' name='night_phone_b' value='TELÉFONO'>
       <input type='hidden' name='night_phone_c' value=''>
       <input type='hidden' name='lc' value='es'>
       <input type='hidden' name='country' value='ES'>
   </form>
   <script type='text/javascript'>
       document.formTpv.submit();
   </script>
   
   </body>
   
   </html>
Ya, pero volvemos a las mismas:
No me manda el precio por variable, sino que me lo manda todo encriptado.

Quiero que se integre al 100% en mi web, como si fuese un TPV virtual, con sus precios variables.
vpc1988 escribió:Ya, pero volvemos a las mismas:
No me manda el precio por variable, sino que me lo manda todo encriptado.

Quiero que se integre al 100% en mi web, como si fuese un TPV virtual, con sus precios variables.


¿Quieres que Paypal te mande la información de los pagos sin cifrar?
Alecs7k escribió:
vpc1988 escribió:Ya, pero volvemos a las mismas:
No me manda el precio por variable, sino que me lo manda todo encriptado.

Quiero que se integre al 100% en mi web, como si fuese un TPV virtual, con sus precios variables.


¿Quieres que Paypal te mande la información de los pagos sin cifrar?

No, eso no, pero se que hay paginas como dealextreme que tienen paypal completamente integrado, no sales de dealextreme mientras haces el pago con paypal, para entendernos.

Estoy haciendome un lio con la integracion. Lo que quiero es:
-Envias un formulario, con unas variables, entre ellas el precio.
-Paypal recibe las variables, y una de ellas es el precio.

-Si el pago se hace, vuelvo a mi web y genero el pedido. El problema, es que si tu pagas, pero el cliente cierra la web antes de que paypal te redirija a mi web, no se generara el pedido.
Lo que necesitas se llama IPN (instant payment notification). Básicamente es una notificación de paypal a la URL que tu le digas en el parámetro "notify_url", a la que le pasará variables por post informando de cómo ha ido el pago, datos del pedido, etc.. Podrás generar el pedido en este PHP.

<input type="hidden" name="notify_url" value="https://www.dominio.com/paypal_ipn_url.php" /> 


Aquí explica cómo hacerlo:
https://developer.paypal.com/docs/classic/ipn/gs_IPN/

Pero buscando en google algo tipo "paypal ipn php", verás muchos ejemplos de como implementarlo.
Vale.

Refloto para ver si me podeis echar una mano mas.

mi actual codigo (y haciendo un echo de todo, me funciona, es decir, las variables tienen valor real).

<?php
$cadena = "http://www.xxx.com/ipn.php?variable1=$variable1&variable2=$variable2&variable3=$variable3...";
         
?>
<input type="hidden" name="notify_url" value="<?php echo $cadena ?>">


Si yo hago un echo $cadena, sale perfecta, es decir, TODAS las variables me pillan su valor, las recibo por GET del formulario anterior, y sin problemas.

Cuando hago una prueba del IPN en paypal, me lo coge todo sin problemas y funciona, pero, cuando hago un pago real, no funciona.

El ipn basicamente recibo las variables, hago un insert en la bbdd, envio un email de confirmacion, entre otras cosas, y, funciona todo.

Si el $cadena lo reemplazo por "http://www.xxx.com?email=miemail@gmail.com", tampoco funciona.

Si pego en el navegador la cadena generada, con todas sus variables, SI que funciona.
6 respuestas