문제

Servlet을 사용하여 IPN 콜백을 시도하고 있습니다. 내가 사용하는 코드는 IPN 데이터를 확인하기 위해 PayPal에서 제공합니다. 그러나 내가 얻을 때마다 유효하지 않은 응답.

코드는 다음과 같습니다.

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   
    }

PayPal이 다음과 같이 유효하지 않은 경우 PayPal이 제공 한 세 가지 가능성을 모두 확인했습니다.

1) 누락 된 매개 변수 - 모든 매개 변수를 보내므로 누락 된 매개 변수 문제 없음

2) 잘못된 URL. - 샌드 박스를 사용하고 있으므로 URL은 다음과 같습니다. http://www.sandbox.paypal.com/cgi-bin/webscr

3) 문자 인코딩. - PayPal 계정 설정 매개 변수 인코딩과 동일한 문자 인코딩으로 시도했습니다.

다음 매개 변수를 사용하여 PayPal로 다시 보내는 요청 :

cmd=_notify-validate&last_name=User&test_ipn=1&address_name=Test+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+Sep+26%2C+2009+PDT&address_zip=95131&payment_status=Completed&address_street= 1+Main+St&first_name=Test&payer_email=buyer1_1252495751_per%40gmail.com&protection_eligibility=Eligible&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=confirmed&transaction_subject=True+Up&quantity=1¬ify_version=2.8&mc_currency=EUR&custom=&address_state= CA & PAYNT_FEE = & HANDLING_AMOUNT = 0.00 & PAYER_STATUS = verified & shipping = 0.00 & item_name = true+up & tax = 0.00 & username = hannonj & charset = wind

제발, 누구든지 나를 적절한 방향으로 안내 할 수 있습니까? 코드 나 URL 또는 다른 어떤 것도 잘못된 것을 얻지 못합니다. 나는 모든 가능성을 시도했다. 도와주세요.

도움이 되었습니까?

해결책 3

답장을 보내 주셔서 감사합니다. 오, 나는 마침내 그것을 해결했다.

실제로 알림 URL에서 사용자 이름 매개 변수도 추가했습니다. PayPal은 IPN의 매개 변수 값을 서블릿으로 반환하는 것과 동일합니다 (req.getParameterNames ()로 가져올 수 있습니다). PayPal에 알려지지 않은 사용자 이름 매개 변수 추가가 있습니다. PayPal은 무효로 돌아 왔습니다.

다른 팁

유효하지 않은”메시지는 다음과 같은 이유입니다.

  • 당신이 있는지 확인하십시오 올바른 URL에 응답을 게시합니다, 그것은 https://www.sandbox.paypal.com/cgi-bin/webscr 또는 https://www.paypal.com/cgi-bin/webscr, 샌드 박스에서 테스트 중인지 또는 각각 살고 있는지에 따라.
  • 테스트 IPN 메시지에 대한 응답을 확인하십시오 정확히 동일한 변수와 값을 포함합니다 테스트 메시지로 그리고 그들은 테스트 메시지에서와 같은 순서입니다.. 마지막으로, 원래 변수가 CMD = _Notify-Validate 변수에 앞서 있는지 확인하십시오.
  • 당신이 있는지 확인하십시오 부호화 응답 문자열과 테스트 IPN 메시지에서 사용한 것과 동일한 문자 인코딩을 사용하고 있습니다. (예를 들어, 나는 그가 Umlaut와“/”등과 같은 다른 기호가있는 문자를 사용하고 있음을 알 수 있습니다). 마지막 요점과 관련하여, 상인은 아래 단계에 따라 페이팔 계정에서 사용중인 인코딩 언어를 변경하려고 시도 할 수 있습니다.

    1. PayPal 계정에 로그인하십시오
    2. 프로필을 클릭하십시오
    3. “내 판매 환경 설정”탭을 클릭하십시오
    4. "PayPal 버튼 언어 인코딩"을 클릭하십시오 (페이지 끝에서)
    5. "기타 옵션"을 클릭하십시오.
    6. 드롭 다운 메뉴에서 선택하십시오 : UTF-8
    7. IPN과 관련된 두 번째 옵션에 대해서도 동일한 숯을 선택하십시오.
    8. "저장"을 클릭하십시오.

문제가 지속되면 사용중인 스크립트를 검토하는 것이 좋습니다. PayPal에는 몇 가지 IPN 코드 샘플이 있습니다. https://github.com/paypal/ipn-code-samples

추가 정보는 링크를 포함합니다. https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/ipntesting/#id091gfe00wy4

전송해야 할 URL은 "www.sandbox.paypal.com"이라고 확신합니다. Sandbox User Guide의 4 장을 참조하십시오. 이것이 제가 자신의 코드에 넣은 것입니다 (우연히도 라이브, 그것은입니다. 또한 "www.paypal.com"만 있습니다 샘플 코드)

SSL을 통해 PayPal IPN을 테스트하는 경우 사용해야합니다. ssl : //www.sandbox.paypal.com 항구에서 443

PayPal의 샌드 박스는 완전히 다른 자격 증명을 가지고 있습니다. 샌드 박스를 사용하려면 개발 계정이 있어야하고 개발 패널에 로그인해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top