Foros del Web » Programando para Internet » PHP »

Tutorial: Saca provecho a tu Web (PayPal y más)

Estas en el tema de Tutorial: Saca provecho a tu Web (PayPal y más) en el foro de PHP en Foros del Web. Tutorial: Saca provecho a tu Web (PayPal y más) Hace unos días puse en una web un servicio de compra por PayPal. Al principio pensaba ...
  #1 (permalink)  
Antiguo 14/01/2013, 13:38
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Información Tutorial: Saca provecho a tu Web (PayPal y más)

Tutorial: Saca provecho a tu Web (PayPal y más)

Hace unos días puse en una web un servicio de compra por PayPal. Al principio pensaba que no me llevaría mucho, que sería algo sencillo. El problema es que quise hacerlo de la forma más segura posible, como es lógico, y eso me complicó bastante la tarea.
Es por esto que he decidido elaborar una especie de tutorial para ayudaros a sacar provecho a vuestras páginas web con el servicio que PayPal nos ofrece. Además añadiré otra guía para utilizar un servicio de pagos por sms, en este caso con el servicio de allopass.com.

No pretendo hacer propaganda de ninguna empresa ni servicio. He elegido estos en concreto debido a que son los que yo configuré. Si se considera la publicación, o cualquier parte de esta, como inapropiada, ruego que se me comunique o modere directamente, el único fin del post es ayudar y facilitar a los usuarios.

Dicho esto ¡comencemos !
Para entender este tutorial es necesario tener conocimientos básicos de PHP. Para utilizarlo como recurso (Ctrl+c, Ctrl+v) no se necesita más que sentido común.

PayPal:
Esta parte la dividiré en 3 apartados (ordenados cronológicamente por el proceso):
  • Cifrado: En este apartado se hablará del cifrado de los botones de PayPal para que nadie nos modifique los datos que queremos pasar (La obtención del certificado y la clave están detallados para Windows).
  • IPN: Instant Payment Notification, o sea, la URL de notificación donde se procesa la petición y se actualizan los datos.
  • Retroceso automático: Es lo mismo que URL de retorno, volver a nuestra página y mostrar la información adecuada.

1. Cifrado de los botones:
  • OPCIONAL: Para maximizar la seguridad aconsejo activar la opción que nos ofrece PayPal "Pagos en sitio web codificados", lo que hace que sólo se acepten las peticiones de botones codificados. Esta opción se encuentra en: Perfil->Mis herramientas de Venta->Preferencias de pago en el sitio Web->Pagos en sitio web codificados

El cifrado de la API utiliza openSSL así que lo primero que necesitamos es crear nuestro certificado SSL, de la siguiente manera (Windows).
  • Seguid el siguiente enlace: OpenSSL Windows
  • Descargad Visual C++ 2008 Redistributables (si no lo tenéis instalado) y Win32 OpenSSL (versión que querais).
  • Intalarlos por ese orden, la instalación es totalmente intuitiva.
Una vez instalados, abre el símbolo del sistema (Buscar/Ejecutar-> cmd) y ve al directorio dónde instalaste openSSL (Normalmente C:\OpenSSL-Win32). Ahora dirígete a la carpeta "bin" (C:\OpenSSL-Win32\bin).
Ahora crearemos la clave privada y el certificado necesario para utilizar la API de PayPal (si quereis más información sobre el funcionamiento de openSSL podéis visitar el enlace (1) de fuentes)
  • Desde C:\OpenSSL-Win32\bin escribimos: "openssl genrsa -out my-prvkey.pem 1024" (SIN COMILLAS)
    Esto genera una clave privada 1024-bit RSA.
  • Una vez termine ejecutamos: "openssl req -new -key my-prvkey.pem -x509 -days 3650 -out my-pubcert.pem" (SIN COMILLAS) Nos hará unas preguntas que responderemos como muestra el ejemplo en la consola (los datos no son importantes es para generar tu certificado único)
    Esto genera un certificado público válido durante 10 años (3650 días), podéis cambiar ese valor, en la guía oficial de PayPal utilizan 365 días.
Ahora debemos subir nuestro certificado a PayPal. Vamos a Perfil->Mis herramientas de Venta->Configuración de pago codificado

Se cargará una nueva página, algo parecido a:


Aquí lo primero es subir el certificado, le damos a añadir y subimos el certificado que generamos.
Nos dará una ID de CERTIFICADO, la apuntamos porque la necesitaremos.
Además hacemos click en el primer download y nos descargamos el certificado público de PayPal.

Por último, para cifrar los botones necesitamos la siguiente clase:
Clase de Cifrado

¡Ya tenemos todo lo necesario para encriptar nuestros botones! Haremos un repaso:
  • Clave privada SSL
  • Ceritficado público SSL y su ID en PayPal
  • Certificado público PayPal
  • Clase PayPalEWP (php)

Abrimos el archivo dónde pondremos nuestro botón de comprar (debe ser de extensión .php).
Añadimos el siguiente código:
Código PHP:
<?php
$ruta 
'' //Variable para guardar la ruta hacia la clase  Class.PayPalEWP.php
$cert_id 'XXXXXXXXXX'//Id del certificado
include($ruta ."Class.PayPalEWP.php"); //Ruta hacia la clase 
$paypal = new PayPalEWP();
$paypal->setTempFileDirectory($ruta ."tmp"); // HAY que crear una carpeta tmp en el directorio de la clase
$paypal->setCertificate($ruta ."my-pubcert.pem"$ruta ."my-prvkey.pem");
$paypal->setPayPalCertificate($ruta ."paypal_cert_pem.txt");
$paypal->setCertificateID($cert_id); 

$boton1 = array(
        
'cmd' => '_xclick',
        
'cert_id' => $cert_id,
        
'business' => '[email protected]',                
        
'receiver_email' => '[email protected]',                
        
'custom' => 'Datos personalizados a mayores',         //Por si quieres añadir algún dato más
        
'item_name' => 'Nombre del objeto',                   // Nombre del objeto que vendemos
        
'currency_code' => 'EUR',                             //Tipo de moneda
        
'amount' => '10',                                     //Precio
        
'lc' => 'ES',                                         //Idioma
        
'no_note' => '1',                                     //1-0 Mostrar cuadro de texto
        
'no_shipping' => '1',                                 
        
'return' => 'http://urlDeRetorno',                    //Url de retorno a la que nos devuelve paypal al comprar (incluido en el tuto)
        
'cancel_return' => 'http://urlDeRetorno',             //Url a la que nos devuelve al cancelar la compra
        
'notify_url' => 'http://urlDeRetorno',                //Url de notificación dónde se realiza el IPN (incluido en el tuto)
        
'cbt' => 'Texto Voler a mi página'
    
);
?>
      <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
      <input type="hidden" name="cmd" value="_s-xclick">
      <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----<?php echo $paypal->encryptButton($boton1); ?>-----END PKCS7-----"/>
      <input type="image" src="https://www.paypal.com/es_XC/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal, la forma más segura y rápida de pagar en línea.">
      <img alt="" border="0" src="https://www.paypal.com/es_XC/i/scr/pixel.gif" width="1" height="1">
      </form>
Obviamente el botón se puede generar dinámicamente sacando los datos de una DB y hay muchas más variables además de las que puse yo.
Podéis encontrar mucha más información como el significado de 'no_shipping' en el enlace (2) y el enlace(3) de las fuentes.
¡LISTO! De esta manera ya tenemos nuestro botón cifrado que sólo podrá descifrar PayPal gracias a los datos que les proporcionamos al subir nuestro certificado público.
  #2 (permalink)  
Antiguo 14/01/2013, 13:39
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

2. IPN:
Como veo que me estoy extendiendo bastante voy a intentar ser lo más claro y conciso posible. En esta parte nos encargamos de recibir la notificación de PayPal de que alguien compró nuestro producto, pero hay que hacer más comprobaciones para asegurarnos que la transacción fue de la manera esperada.

Debemos crear un archivo PHP, lo llamaremos como queramos (en este caso notify.php) pero debe ser igual que el notify_url de nuestro botón.
Si queremos configurar una url para IPN por defecto podéis ir a Perfil->Notificación de pago instantánea (IPN)->Escoger Configurarción... Escribis la url y activais Recibir mensajes IPN

notify.php:
Código PHP:
<?php                                    
$ip_remote 
$_SERVER['REMOTE_ADDR'];    //Guardo la IP desde la que se realiza la petición, no es necesario
$comentario '';

// Primera comprobación. Comprobamos que haya variables pasadas por POST (como nos las pasa PayPal)
    
if($_POST){
    
        
//************TRATAMIENTO DE INFO
        // Obtenemos los datos en formato variable1=valor1&variable2=valor2&...
        
$raw_post_data file_get_contents('php://input');

        
// Los separamos en un array
        
$raw_post_array explode('&',$raw_post_data);

        
// Separamos cada uno en un array de variable y valor
        
$myPost = array();
        foreach(
$raw_post_array as $keyval){
            
$keyval explode("=",$keyval);
            if(
count($keyval) == 2)
                
$myPost[$keyval[0]] = urldecode($keyval[1]);
        }

        
//Nos comunicaremos con PayPal para verificar que la información es suya 
       //para ello nuestro string debe comenzar con cmd=_notify-validate
        
$req 'cmd=_notify-validate';
        if(
function_exists('get_magic_quotes_gpc')){
            
$get_magic_quotes_exists true;
        }
        foreach(
$myPost as $key => $value){
            
// Cada valor se trata con urlencode para poder pasarlo por GET
            
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
                
$value urlencode(stripslashes($value)); 
            } else {
                
$value urlencode($value);
            }

            
//Añadimos cada variable y cada valor
            
$req .= "&$key=$value";
        }
        
        
//********ENVIO DE INFO
        // Esta URL debe variar dependiendo si usamos SandBox o no. Si no lo usamos, se queda así.
        
$ch curl_init('https://www.paypal.com/cgi-bin/webscr');   
        
curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
curl_setopt($chCURLOPT_POSTFIELDS$req);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEER1);
        
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
        
curl_setopt($chCURLOPT_FORBID_REUSE1);
        
curl_setopt($chCURLOPT_HTTPHEADER, array('Connection: Close'));

        if( !(
$res curl_exec($ch)) ) {
            
// Error con la petición de Curl.
            
curl_close($ch);
            
$comentario "Error Curl IPN";
            
//Guardo datos y $comentario en el Log de la DB
            
exit; //Paramos la ejecución
        
}
        
curl_close($ch);
         
        
//******RECIBIDA CONTESTACION
        
if (strcmp ($res"VERIFIED") == 0) { //PayPal nos verifica que la Info es correcta
        
            
$item_name $_POST['item_name'];
            
$payment_status $_POST['payment_status'];
            
$payment_amount $_POST['mc_gross'];
            
$payment_currency $_POST['mc_currency'];
            
$txn_id $_POST['txn_id'];
            
$receiver_email $_POST['receiver_email'];
            
$date date('Y-m-d H:i:s',strtotime($_POST['payment_date'])); //Fecha en formato MySQL
            
$custom$_POST['custom'];

            
/**Hacemos algunas comprobaciones extraordinarias
             * * Comprobar que $_POST["payment_status"] tenga el valor "Completed", que nos confirma el pago como completado.
             * * Tambien podemos aceptar Processed
             **/
            
if($payment_status=='Completed' || $payment_status=='Processed' ) {
            
/**
             * *Comprobar que el email al que va dirigido el pago sea nuestro email principal de PayPal
             **/
                
if($receiver_email == '[email protected]'){
                
/**
                 * *Ahora podríamos hacer otras comprobaciones como
                 * * Comprobar que no hemos tratado antes la misma id de transacción (txd_id)
                 * * Comprobar que la cantidad y la divisa son correctas
                 */
                
                /**Después de las comprobaciones, toca el procesamiento de los datos.
                 * En este punto tratamos la información.
                 * Podemos hacer con ella muchas cosas:
                 * 
                 * * Guardarla en una base de datos.
                 * * Guardar cada linea del pedido en una linea diferente en la base de datos.
                 * * Guardar un log.
                 * * Restar las cantidades de los artículos del stock.
                 * * Enviar un mensaje de confirmcaión al cliente.
                 * * Enviar un mensaje al encargado de pedidos para que lo prepare.
                 * * etc
                 */            
                
}else{
                    
$comentario "Reciever email manipulado (".$receiver_email.")"
                
}
            }else{
              
$comentario "Payment_status inválido (".$payment_status.")/".$comentario;
            }
        }elseif(
strcmp ($res"INVALID") == 0){
            
// El estado que devuelve es INVALIDO, la información no ha sido enviada por PayPal. 
            
$comentario "INVALID, informacion no enviada por PayPal/".$comentario;
        } 
    }else{    
         
// Si no hay datos $_POST podría tratarse de un acceso directo, para eso la IP
        
$comentario "Acceso sin variables POST/".$comentario;
    }
    if(
$comentario != ''){ 
        
//Si comentario tiene contenido es que hubo un error
        //Guardamos el comentario, la IP y toda la info que queramos en un log en la DB
        
if(!$_POST )echo '<meta http-equiv="Refresh" content="0;url=index.html" />';
    }         
?>
El contenido de este archivo no es 100% de mi autoría, he copiado partes, modificado otras y añadido otras.

Bueno, está casi todo el código explicado en los comentarios. Lo que falta es comunicación con la DB que eso ya es de vuestra parte.
Podéis encontrar mucha más información sobre IPN en el enlace (3) de las fuentes.
  #3 (permalink)  
Antiguo 14/01/2013, 13:42
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

3. Retroceso automático:

Para configurar una url de retroceso automático por defecto:



Le damos a activar a ambas casillas, ponemos nuestra URL por defecto y le damos a guardar.
Como vimos antes en cada botón podemos especificar una si queremos cambiarla.
Os aparecerá un mensaje arriba con vuestro código de identidad, guardadlo, lo necesitaremos, es vuestro auth_token para pedir los datos a PayPal y poder mostrarselos al usuario.
Fijaos que os vienen unos requisitos, debeis mostrar la id de la transacción, decir como fue todo y mandar un correo. Lo del correo no sé si es 100% obligatorio, aquí no me meteré en eso, lo dejo a nivel personal.

Ahora elaboramos nuestra url de retorno, lo llamaremos return.php, pero debe ser igual que la url que acabamos de poner o la que pongamos en el valor return de nuestro botón.
return.php
Código PHP:
<?php
$ip_remote 
$_SERVER['REMOTE_ADDR'];    //Para el LOG
$comentario '';

// Nuestro string debe comenzar con cmd=_notify-synch para indicarle a PayPal que tipo de petición es
//Esta vez recibimos el código de transacción por GET, 
//NO confundir con el id de transacción, ese nos lo dará más adelante si los datos son correctos
$tx_token $_GET['tx'];
$auth_token "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"//Vuestro Auth Token
$req 'cmd=_notify-synch';
$req .= "&tx=".urlencode($tx_token)."&at=".urlencode($auth_token); //La cebecera que pasaremos por GET

//********ENVIO DE INFO
$ch curl_init('https://www.paypal.com/cgi-bin/webscr');   // Esta URL debe variar dependiendo si usamos SandBox o no. Si no lo usamos, se queda así.
curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_POSTFIELDS$req);
curl_setopt($chCURLOPT_SSL_VERIFYPEER1);
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_FORBID_REUSE1);
curl_setopt($chCURLOPT_HTTPHEADER, array('Connection: Close'));

if( !(
$res curl_exec($ch)) ) {
    
//Erro con la petición Curl
    
curl_close($ch);
    
$comentario "Error Curl RETURN";
    
//GUARDO datos en LOG en la DB
    
exit;
}
curl_close($ch);

//Si no hay error proceso la info que nos envía PayPal en la respuesta
$res 'status='.str_replace("\r"""$res);
$lines explode("\n"$res); 

$values =array();
foreach (
$lines as $key=>$value) {
    
$key_values explode("="$value);
    
$values[$key_values[0]] = $key_values[1];
}
/**Los datos se gaurdará en el array $values
 *Por ejemplo $values['txn_id'] es el Id de transacción
 *La mayoría de las variables coinciden con la IPN  
 **/ 
if (strcmp ($values['status'], "SUCCESS") == 0) { //Estado Correcto
    //Ahora ya puedes evaluar lo que necesites de tu transacción
    //Y termina informando al usuario de que todo ha ido bien y ya tiene su servicio
    /**
     *Si al hacer la IPN alamcenamos el id de transacción en la DB aquí
     *podríamos comprobar que existe en la DB
     *
     *Además aquí es dónde debemos informar al usuario de que todo ha ido bien
     *Mostrarle su id de transacción               
     **/              
    //Por ejemplo
    
echo 'Todo ha ido correctamente, su Id de transacción es: '.$values['txn_id'];
}elseif (
strcmp ($values['status'], "FAIL") == 0){ //Hubo un error
    //Podemos hacer unas pequeñas comprobaciones
    //Si esta variable no está vacía cabe la posibilidad que se tratase de una compra real
    
if(!empty($tx_token)){          
        
$mensaje '<strong><font color="red">Ha ocurrido un problema con tu donación</font></strong><br><br>
        <strong>Visita la sección de soluciones.</strong>'
;   
        
$comentario "Fallo en la transación (FAIL RETURN)";
        
//Guardamos un LOG en la DB con el $comentario, el $tx_token y la ip
    
}else{
        
//Si esa variable está vacía no se pasó por Get, seguramente se trate de un acceso directo, redireccionamos
        
header('Location: index.html');
    }
}
?>
Para ver todas las variables del PDT visita el enlace (4) de las fuentes o puedes hacer un var_dump de la variables $lines.
También podemos usar esta página como la página de cancelaciones, pasándole por GET una variable en que indicamos que se trata de una cancelación y en el código si está esa variable mostramos el texto pertinente.

¡Hasta aquí la guía de PayPal! Espero que no haya sido muy pesado y que sea legible. La parte de micropagos por SMS la dejaré para cuando sepa si esta guía es aceptada o no, no vaya a ser que escriba para nada.

Espero que no os surjan muchas dudas y errores, seguramente alguno habrá por ahí al escribir aquí, copiar, pegar, etc.

Aquí os dejo las tan mencionadas fuentes:
(1)Enlace 1
(2)Enlace 1
(3)Enlace 3
(4)Enlace 4

Otros:
http://blog.osusnet.com/2008/04/13/c...paypal-con-php
http://www.codigonexo.com/blog/php/t...ipn-de-paypal/

Nada más decir que si queremos hacer pruebas con las sandbox de PayPal deberemos cambiar en el botón, el IPN y el PDT todos las direcciones añadiendo el subdominio sandbox.
Por ejemplo: https://www.sandbox.paypal.com/cgi-bin/webscr
  #4 (permalink)  
Antiguo 14/01/2013, 13:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Hay una pequeña modificación que te recomiendo por seguridad, todo aquellos campos que no se deben cambiar y los estás colocando como escondido, debes hacerlo justamente antes de enviarlo a Paypal. La razón es simple, yo con los navegadores chrome o firefox puedo alterar la data de los campos, por ejemplo si estás usando chrome presiona en windows ctrl + shift + j y verás el código fuente organizado, luego altera el contenido de los campos y envia el formulario. Un usuario con esos pequeños conocimientos puede alterar los valores y enviar que pago una cantidad pequeña y decir que fue una oferta especial etc. etc. Cuando digo que lo debes hacer justamente antes de paypal, lo que te recomiendo es que lo envies a una pagina en tu servidor, que una el proceso de su pago y luego lo rediriges con header a la pagina de paypal.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 14/01/2013, 13:58
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Eso precisamente es lo que evita la Parte 1 del tutorial. El botón aparece totalmente cifrado, no se ven los campos y si activamos la opción de que PayPal sólo admita botones cifrados entonces ya es imposible que nos metan datos de esa forma que tú dices.
Por eso mismo me extendí tanto en esa parte del tutorial :)
  #6 (permalink)  
Antiguo 14/01/2013, 14:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Hmmm, interesante, no había visto esa forma. Aún así prefiero la forma de enviarlo a mi página y despues añadir a la dirección y luego redirigir. Pero si la encriptación viene de paypal, entonces "no hay de que preocuparse".
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 30/04/2013, 07:11
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Hola como estas estoy siguiendo tu aporte para implementar paypal en mi web pero fijate que me sale error en el notify.php me dice que hay una llave de cierre (}) demas y no logro saber cual es ya lo revise muchas veces si me ayudas con eso te lo agradezco
  #8 (permalink)  
Antiguo 02/05/2013, 05:06
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Lo acabo de repasar, no encuentro ninguna llave que sobre ni falte :S
Si has modificado el archivo comprueba esas partes a ver...
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #9 (permalink)  
Antiguo 03/05/2013, 12:12
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

que extraño porque solo lo copio y lo pego y me sale este error Parse error: syntax error, unexpected '}' in C:\Users\Alexander\Desktop\cat\ipn.php on line 103

No sabes cual pudiera ser la causa?
  #10 (permalink)  
Antiguo 03/05/2013, 13:32
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

y tengo otra duda estas variables
Código PHP:
Ver original
  1. $item_name = $_POST['item_name'];
  2.             $payment_status = $_POST['payment_status'];
  3.             $payment_amount = $_POST['mc_gross'];
  4.             $payment_currency = $_POST['mc_currency'];
  5.             $txn_id = $_POST['txn_id'];
  6.             $receiver_email = $_POST['receiver_email'];
  7.             $date = date('Y-m-d H:i:s',strtotime($_POST['payment_date'])); //Fecha en formato MySQL
  8.             $custom= $_POST['custom'];

van en una tabla en la base de datos?? disculpa es que soy muy novato en esto
  #11 (permalink)  
Antiguo 06/05/2013, 01:51
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Esas variables se reciben por POST desde paypal ($_POST), lee sobre el método POST y el método GET en el manual. Respecto a la llave, a mi la cuenta me sale 15 de abrir y 15 de cerrar, puede que lo copiases mal o que se me escape una :S
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #12 (permalink)  
Antiguo 07/05/2013, 14:20
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Mil gracias por el dato zalito12!
__________________
٩(͡๏̯͡๏)۶ || ٩(͡๏̯͡๏)۶
  #13 (permalink)  
Antiguo 08/05/2013, 15:31
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

viejo encontre el error faltaba un ; en esta linea
Código PHP:
Ver original
  1. }else{
  2.                     $comentario = "Reciever email manipulado (".$receiver_email.")" AQUI
  3.                 }
  #14 (permalink)  
Antiguo 08/05/2013, 20:33
 
Fecha de Ingreso: diciembre-2012
Mensajes: 178
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

aqui molestandote de nuevo fijate que lo he probado mil y una vez pero lo que sucede que a la hora de querer guardar en mi base de datos no me guarda nada nose que pasa hago todo exactamente como el tuto y nada, es decir hago los insert y updates para los datos pero pareciera que paypal no me manda nada y solo hace el cobro. En qué crees que este fallando?
  #15 (permalink)  
Antiguo 26/05/2014, 12:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Paypal si te envia los datos, lo que sucede es que debes primero imprimir el string que te envia para ver si se ha realizado con exito o no.
  #16 (permalink)  
Antiguo 25/12/2014, 21:42
 
Fecha de Ingreso: diciembre-2014
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Tutorial: Saca provecho a tu Web (PayPal y más)

Disculpen por revivir este tema algo viejo aunque no tanto xD. Pero tengo una duda:

Es necesario utilizar lo de encryptar los botones si es que en el IPN hacemos las comprobaciones de todo incluyendo el "Payment Amount" y el "Receiver Email" ?

Ya que comprobando datos como estos y otros mas sabremos todos los datos reales del pago y si el usuario hizo algún tipo de trampa también lo sabremos ya que el IPN es una verificación entre nuestro servidor y paypal y el usuario no puedo intervenir esos datos.

Gracias.

Etiquetas: html, paypal, provecho, variables, usuarios, tutoriales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 4 personas




La zona horaria es GMT -6. Ahora son las 02:54.