2009-09-28 25 views
5

Estoy intentando la retrollamada de IPN, usando servlet. El código que estoy usando lo proporciona paypal para verificar los datos de ipn. Pero cada vez que recibo una respuesta NO VÁLIDA.Paypal sandbox IPN return NO VÁLIDO

Aquí está el código:

Enumeration en = req.getParameterNames(); 
String str = "cmd=_notify-validate"; 

    while (en.hasMoreElements()) {   
     String paramName = (String) en.nextElement(); 
     String paramValue = req.getParameter(paramName); 

//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"UTF-8"); // for UTF-8 i set the encode format in my account as UTF-8 
//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"ISO-8859-1");// for ISO-8859-1 i set the encode format in my account as ISO-8859-1 
str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue); //default as provided by paypal 

    } 
    URL u = new URL("http://www.sandbox.paypal.com/cgi-bin/webscr"); 
    URLConnection uc = u.openConnection(); 
    uc.setDoOutput(true); 
    uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    PrintWriter pw = new PrintWriter(uc.getOutputStream()); 
    pw.println(str); 
    pw.close(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
    String res = in.readLine(); 
    in.close(); 

    if (res.equals("VERIFIED") || !res.equals("VERIFIED")) { 
     //Update database... 
    } else if (res.equals("INVALID")) {  
     //INVALID 
    } 

He comprobado las tres posibilidades previstas por PayPal en caso de retorno paypal VÁLIDA de la siguiente manera:

1) parámetros que faltan - Como soy enviar todos los parámetros sin problema de los parámetros faltantes

2) URL inválida. - Estoy usando sandbox para que URL sea: http://www.sandbox.paypal.com/cgi-bin/webscr

3) Codificación de caracteres. - Probado con la codificación de caracteres igual que la codificación del parámetro de configuración de la cuenta paypal.

la solicitud estoy enviando de nuevo a PayPal utilizando los parámetros siguientes:

cmd = _notify-validar & last_name = Usuario & test_ipn = 1 & ADDRESS_NAME = Prueba + Usuario & txn_type = web_accept & receiver_email = sellr1_1252495907_biz% 40gmail.com & residence_country = US & address_city = San José + & payment_gross = & payment_date = 01% 3A55% 3A04 + septiembre + 26% 2C + 2009 + PDT & address_zip = 95131 & payment_ estado = completado & address_street = 1 + principal + St & nombre apellido = Prueba & PAYER_EMAIL = buyer1_1252495751_per% 40gmail.com & protection_eligibility = Elegible & payer_id = BXBKS22JQCUWL & verify_sign = AOMkeg7ofCL7FJfioyWA19uCxD4XAgZirsjiGh8cUy1fd2YAqBwOkkst & payment_type = instantánea & negocio = sellr1_1252495907_biz% 40gmail.com & address_country_code = EE.UU. & mc_fee = 0,64 & address_status = confirmó & transaction_subject = True + arriba & cantidad = 1 & notify_version = 2,8 & mc_currency = EUR = & encargo & addr ess_state = CA & payment_fee = & handling_amount = 0.00 & payer_status = verificado & envío = 0.00 & item_name = true + Arriba & impuestos = 0.00 & nombre de usuario = hannonj & charset = windows-1252 & item_number = 567 & mc_gross = 10,00 & txn_id = 7F456350BS7942738 & receiver_id = MASSU6BSR9SC2 & address_country = Estados Unidos +

Por favor, cualquiera puede dirigir a la dirección correcta? No obtengo lo que está mal el código o la URL o cualquier otra cosa. Intenté todas las posibilidades. Por favor, ayúdame.

Respuesta

3

Gracias Ustedes chicos por su respuesta ohhh Lo resolvé al fin.

Actualmente en notificar URL También agregué un parámetro de nombre de usuario. Paypal quiere los valores de los parámetros para IPN igual que regresa al servlet. (Puede obtenerlo como req.getParameterNames()). Como tengo parámetro de nombre de usuario adicional, que no se conoce a payPal. payPal regresaba VÁLIDA.

0

Recuerde que el sandbox de paypal tiene credenciales completamente diferentes. Debe tener una cuenta de desarrollo e iniciar sesión en el panel de desarrollo para usar sandbox.

9

Estoy bastante seguro de que la URL para enviar es solo "www.sandbox.paypal.com ", vea el capítulo 4 de Sandbox User Guide, y bueno, esto es lo que puse para mi propio código (por cierto, para live, también es solo" www.paypal.com ", para su sample code)

+1

que era exactamente mi problema –

2

Si está probando payPal IPN a través de SSL, que tendrá que utilizar SSL: //www.sandbox.paypal.com en el puerto

+3

Con paypal.com me sale inválido, con sandbox.paypal.com ni siquiera recibo una respuesta. – Exegesis

+1

¡aleluya! ¡Muchas gracias! –

13

Un “NO VÁLIDA ” mensaje se debe a las siguientes razones:

  • Compruebe que su son publicar tu respuesta a la URL correcta, que es https://www.sandbox.paypal.com/cgi-bin/webscr o https://www.paypal.com/cgi-bin/webscr, dependiendo de si está probando en el Sandbox o si está en vivo, respectivamente.
  • Compruebe que su respuesta al mensaje IPN de prueba contiene exactamente las mismas variables y valores que el mensaje de prueba y que están en el mismo orden que en el mensaje de prueba. Finalmente, verifique que las variables originales estén precedidas por una variable cmd = _notify-validate.
  • Asegúrese de que está codificando su cadena de respuesta y está utilizando la misma codificación de caracteres que utiliza el mensaje de prueba IPN. (Por ejemplo, puedo ver que está usando letras con diéresis y otros símbolos como "/", etc.). Con respecto al último punto, el comerciante puede tratar de cambiar la codificación del lenguaje en uso en su cuenta de PayPal, siguiendo los siguientes pasos:

    1. inicio de sesión en su cuenta de PayPal
    2. Haga clic en Perfil
    3. clic en “Mis ventas Preferencias”
    4. Haga clic en “codificación de PayPal botón de idioma” (al final de la página)
    5. Haga clic en "Otras opciones"
    6. Seleccione desde el menú desplegable: UTF-8
    7. elegir el mismo juego de caracteres también por la segunda opción, que está relacionada con IPN
    8. Haga clic en “Guardar”

Si el problema persiste, se recomienda revisar la secuencia de comandos en uso, PayPal tiene algunos ejemplos de código IPN disponibles en: https://github.com/paypal/ipn-code-samples

Para obtener información adicional que incluyen el enlace: https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4

+0

Viñetas y listas, así que no soy demasiado flojo para leerlo. ¡Gracias! –

+1

@PayPal_Federica cambiar la codificación a utf8 solucionar mi problema ,,, gracias –

+0

Esto es realmente útil que estaba teniendo el mismo problema se resolvió utilizando https://github.com/paypal/ipn-code-muestras de archivo de muestra ... Gracias .. !! –