Pergunta

Eu estou tentando IPN callback, usando servlet. O código que estou usando é fornecido por paypal para verificar os dados IPN. Mas cada vez que eu obter um INVALID resposta.

Aqui está o 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   
    }

Eu verifiquei todas as três possibilidades oferecidas por paypal em caso paypal INVALID retorno como segue:

1) Falta Parâmetros - Como eu sou enviar todos os parâmetros sem emissão de parâmetros faltando

2) URL inválido. - Eu estou usando sandbox assim URL é: http://www.sandbox.paypal.com / cgi-bin / webscr

3) A codificação de caracteres. -. Tentei com codificação de caracteres que mesmo que a codificação parâmetro configuração de conta paypal

o pedido Estou enviando de volta para paypal utilizando os seguintes parâmetros:

cmd = _notify-validate & last_name = usuário & test_ipn = 1 & ADDRESS_NAME = Teste + User & txn_type = web_accept & receiver_email = sellr1_1252495907_biz% 40gmail.com & residence_country = US & address_city = San + Jose & payment_gross = & payment_date = 01% 3A55% 3A04 + set + 26% 2C + 2009 + PDT & address_zip = 95131 & payment_status = Concluído & address_street = 1 + principal + St & first_name = teste e payer_email = buyer1_1252495751_per% 40gmail.com & protection_eligibility = elegível & payer_id = BXBKS22JQCUWL & verify_sign = AOMkeg7ofCL7FJfioyWA19uCxD4XAgZirsjiGh8cUy1fd2YAqBwOkkst & payment_type = instant & business = sellr1_1252495907_biz% 40gmail.com & address_country_code = US & mc_fee = 0,64 & address_status = confirmada & transaction_subject = True + Up & quantidade = 1 & notify_version = 2,8 & mc_currency = EUR & costume = & address_state = CA & payment_fee = & handling_amount = 0.00 & payer_status = Verificado & shipping = 0.00 & item_name = True + Up & impostos = 0.00 & username = hannonj & charset = windows-1252 e item_number = 567 & mc_gross = 10,00 & txn_id = 7F456350BS7942738 & receiver_id = MASSU6BSR9SC2 & address_country = United + Unidos

Por favor, qualquer um pode dirigir-me a direção correta? Eu não estou recebendo o que está errado o código ou o URL ou qualquer outra coisa. Tentei todas as possibilidades. Por favor me ajude.

Foi útil?

Solução 3

Obrigado a vocês pela sua resposta. ohhh Eu resolvi finalmente.

Na verdade em notificar URL Eu também adicionei um parâmetro de nome de usuário. Paypal quer os valores dos parâmetros para IPN mesmo que voltar para o servlet. (Você pode obtê-lo como req.getParameterNames ()). Como tenho nome de usuário adicional parâmetro, que não é conhecido por paypal. Paypal estava retornando INVALID.

Outras dicas

Um “ INVALID ” mensagem é devido aos seguintes motivos:

  • Verifique se o seu são publicar a sua resposta para a URL correta , que é https://www.sandbox.paypal.com/cgi-bin/webscr ou https://www.paypal.com/cgi-bin/webscr , dependendo se você está testando no Sandbox ou você é vivo, respectivamente.
  • Verifique se sua resposta para o teste de mensagem IPN contém exatamente as mesmas variáveis ??e valores como a mensagem de teste e que eles estão na mesma ordem como na mensagem de teste . Finalmente, verifique se as variáveis ??originais são precedidos por uma variável cmd = _notify-validate.
  • Certifique-se de que você é codificação a sua cadeia de resposta e estão usando a mesma codificação de caracteres como usado pelo teste de mensagem IPN. (Por exemplo, eu posso ver que ele está usando letras com trema e outros símbolos como “/”, etc). No que diz respeito ao último ponto, o comerciante pode tentar mudar a linguagem de codificação em uso em sua conta do PayPal, seguindo os passos abaixo:

    1. Entrar em você conta PayPal
    2. Clique em Perfil
    3. Clique em “Minhas Preferências de venda” tab
    4. Clique em “PayPal botão Idioma Codificação” (no final da página)
    5. Clique em "outras opções"
    6. Seleccione a partir do menu drop-down: UTF-8
    7. Escolha o mesmo charset também para a segunda opção, que está relacionado com IPN
    8. Clique em “Salvar”

Se os persiste problema, recomendamos rever o script em uso, PayPal tem algumas amostras IPN código Disponível em: https://github.com/paypal/ipn-code-samples

Para obter informações adicionais que incluem o link: https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4

Eu tenho certeza que a URL para enviar para é apenas "www.sandbox.paypal.com", consulte o capítulo 4 do Guia do Usuário Sandbox, e bem, é isso que eu coloquei para o meu próprio código (aliás, para viver , também é apenas "www.paypal.com", por sua código de exemplo )

Se você está testando Paypal IPN sobre SSL, você terá que usar SSL: //www.sandbox.paypal.com na porta 443

Lembre-se sandbox do PayPal tem completamente diferentes credenciais. É necessário ter em conta o desenvolvimento e estar conectado ao painel de desenvolvimento para uso sandbox.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top