Foros del Web » Programando para Internet » PHP »

Problemas con session

Estas en el tema de Problemas con session en el foro de PHP en Foros del Web. Buenos días, He hecho un botón de paypal usando el pago express, todo funciona bien excepto que cuando compruebo si se ha realizado el pago ...
  #1 (permalink)  
Antiguo 05/10/2012, 03:29
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Problemas con session

Buenos días,
He hecho un botón de paypal usando el pago express, todo funciona bien excepto que cuando compruebo si se ha realizado el pago correctamente no puedo acceder a las variables de session, según parece se ha creado una session nueva y no recupera la anterior.

El código que uso para realizar el pago es el que está en los ejemplos de la web de paypal

Código PHP:
$resArray=hash_call("DoExpressCheckoutPayment",$nvpstr);

...

function 
hash_call($methodName,$nvpStr)
    {
        
//declaring of global variables
        
global $API_Endpoint$version$API_UserName$API_Password$API_Signature;
        global 
$USE_PROXY$PROXY_HOST$PROXY_PORT;
        global 
$gv_ApiErrorURL;
        global 
$sBNCode;

        
//setting the curl parameters.
        
$ch curl_init();
        
curl_setopt($chCURLOPT_URL,$API_Endpoint);
        
curl_setopt($chCURLOPT_VERBOSE1);

        
//turning off the server and peer verification(TrustManager Concept).
        
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
        
curl_setopt($chCURLOPT_SSL_VERIFYHOSTFALSE);

        
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
curl_setopt($chCURLOPT_POST1);
        
        
//if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled.
       //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php 
        
if($USE_PROXY)
            
curl_setopt ($chCURLOPT_PROXY$PROXY_HOST":" $PROXY_PORT); 

        
//NVPRequest for submitting to server
        
$nvpreq="METHOD=" urlencode($methodName) . "&VERSION=" urlencode($version) . "&PWD=" urlencode($API_Password) . "&USER=" urlencode($API_UserName) . "&SIGNATURE=" urlencode($API_Signature) . $nvpStr "&BUTTONSOURCE=" urlencode($sBNCode);

        
//setting the nvpreq as POST FIELD to curl
        
curl_setopt($chCURLOPT_POSTFIELDS$nvpreq);

        
//getting response from server
        
$response curl_exec($ch);

        
//convrting NVPResponse to an Associative Array
        
$nvpResArray=deformatNVP($response);
        
$nvpReqArray=deformatNVP($nvpreq);
        
$_SESSION['nvpReqArray']=$nvpReqArray;

        if (
curl_errno($ch)) 
        {
            
// moving to display page to display curl errors
              
$_SESSION['curl_error_no']=curl_errno($ch) ;
              
$_SESSION['curl_error_msg']=curl_error($ch);

              
//Execute the Error handling module to display errors. 
        

        else 
        {
             
//closing the curl
              
curl_close($ch);
        }

        return 
$nvpResArray;
    } 
Creo que curl_init() crea una sesión nueva para leer los datos, pero no sé por qué no se cierra bien o no restaura la sesión anterior.
  #2 (permalink)  
Antiguo 05/10/2012, 04:56
Avatar de antoniopol  
Fecha de Ingreso: agosto-2012
Ubicación: Valladolid
Mensajes: 114
Antigüedad: 11 años, 8 meses
Puntos: 21
Respuesta: Problemas con session

Me imagino que tendrás puesto el session_start(),no??
__________________
>> Blog de desarrollo web.
>> @antoniopol06 amante de la Web =D
  #3 (permalink)  
Antiguo 05/10/2012, 05:03
 
Fecha de Ingreso: junio-2011
Ubicación: Asturias
Mensajes: 228
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Problemas con session

Creo que eso está en perl(que es como está la web de paypal) asi que ahí no hay session.start no?
Por lo demás no se, el array $nvpResArray debería funcionar igual, porque creo que no tiene nada que ver que cierres la sesión para que se borre. ¿dónde lo recoges?
  #4 (permalink)  
Antiguo 05/10/2012, 06:42
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Problemas con session

Toda la web está en PHP y todas las páginas empiezan por session_start()
Código PHP:
$idUsuario="loQueSea";
$_SESSION['idUsuario']=$idUsuario;

//inicializo $nvpstr con los valores del usuario y del pago

//$resArray devuelve el estado de la transacción
$resArray=hash_call("DoExpressCheckoutPayment",$nvpstr);

//Verifica el estado
$ack strtoupper($resArray["ACK"]);
if(
$ack == "SUCCESS" || $ack=="SUCCESSWITHWARNING")
    {    
        
$_SESSION['payer_id'] =    $resArray['PAYERID'];

        
//La siguiente instrucción falla, 'idUsuario' no está definido
        
$idUsuario=$_SESSION['idUsuario'];
    } 

Última edición por danicasas; 05/10/2012 a las 06:55
  #5 (permalink)  
Antiguo 05/10/2012, 07:04
 
Fecha de Ingreso: junio-2011
Ubicación: Asturias
Mensajes: 228
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Problemas con session

si, perdón, es que estoy a muchas cosas a la vez. Está en php
Este $_SESSION['nvpReqArray']=$nvpReqArray; no te haría falta no? lo recupera igual cuando ejecuta la función, pero eso no tiene nada que ver para que no funcione, no se.
  #6 (permalink)  
Antiguo 05/10/2012, 07:43
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Problemas con session

La función hash_call() forma parte del archivo PaypalFunctions.php, un archivo que ya viene hecho por paypal y que uso en mi programa. La mitad del código de ese archivo no sé ni qué hace y a penas para qué sirve. Supongo que si en esa función guardan algo en una variable de sesión será para usarlo después en otro sitio, pero yo, en mi código no la uso para nada. Sólo compruebo lo que la función hash_call() devuelve por return, que es lo único que me interesa.

Puede que esté aquí mi problema, si curl_init() crea una session nueva (porque es así, no?) y se cierra con curl_close(), ¿después se restaura la session anterior?
Puede que si hay un error -curl_errno()- no se cierre y por eso no pueda acceder a
$_SESSION['idUsuario']

Necesitaría un buen manual o una página de ejemplo. Estoy hecho un lio.
  #7 (permalink)  
Antiguo 05/10/2012, 09:15
 
Fecha de Ingreso: junio-2011
Ubicación: Asturias
Mensajes: 228
Antigüedad: 12 años, 10 meses
Puntos: 14
Respuesta: Problemas con session

curl_init crea una sesión, pero de curl, no te cierra la que tienes de PHP por lo que yo se.
Si hay un error lo guarda en esas dos variables de sesión.
Después de llamar a esa función, comprueba si las dos variables de error están vacías o contienen algo.
De la segunda parte del código no lo entiendo muy bien, me imagino que es donde lo llamas.
Si es así, ¿dónde está definida la función? Si está en un archivo externo lo tienes que incluir con un include o un requiere.
Y la variable $ack, ¿de dónde saca los datos que tiene? de dentro de la función?
Por cierto, cuanto mas código podamos ver, más fácil es de entender. Y sobre todo, si no es muy largo, poner las páginas enteras para saber si falta algo.
Esperemos que alguien que sepa un poco más del tema pueda entrar a ayudar....
  #8 (permalink)  
Antiguo 05/10/2012, 10:11
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Problemas con session

Gracias por tu ayuda, javierflti.

Eso del Paypal es muy complocado, y gran parte de los manuales están en inglés o son anticuados. Si consigo que funcione ya avisaré.

Aunque la aparte hecha por mi es pequeña, el código total es muy largo. Gran parte son funciones que proporciona paypal para los programadores, y son varias páginas. Si sólo pongo mi parte no se entenderá nada, ya que usa continuamente funciones de paypal. Por eso he puesto sólo lo que creía interesante para el caso.

Cita:
curl_init crea una sesión, pero de curl, no te cierra la que tienes de PHP por lo que yo se.
Voy a estudiarme eso de las sesiónes, a ver como funciona. Tendré que probar si una sesion de curl tiene sus propias variables de sesion y si puede o no acceder a las de php. Por ahí estará el fallo.

Código PHP:
        if (curl_errno($ch)) 
        {
            
// moving to display page to display curl errors
              
$_SESSION['curl_error_no']=curl_errno($ch) ;
              
$_SESSION['curl_error_msg']=curl_error($ch);

              
//Execute the Error handling module to display errors. 
        

        else 
        {
             
//closing the curl
              
curl_close($ch);
        } 
Si hay un error en curl no cierra la sesión, sólo guarda información del error.

Etiquetas: session, variables
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




La zona horaria es GMT -6. Ahora son las 20:51.