seltsame
seltsame

Reputation: 21

ipn sandbox in java spring not working

I created an ipn sandbox(paypal)and added a code bellow,but I don't had a response from server.What can be the problem please? And how can I get the logs from my server? PS: I'm working with java spring. Thank you.

Enumeration en = request.getParameterNames();
        String str = "cmd=_notify-validate";
        while (en.hasMoreElements()) {
            String paramName = (String) en.nextElement();
            String paramValue = request.getParameter(paramName);
            str = str + "&" + paramName + "="
                    + URLEncoder.encode(paramValue, "UTF-8");
        }
        String url = "https://www.sandbox.paypal.com/cgi-bin/webscr";

        URL u = new URL(url);
        HttpURLConnection uc = (HttpURLConnection) u.openConnection();
        uc.setRequestMethod("POST");
        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();

        //assign posted variables to local variables
        String itemName = request.getParameter("item_name");
        String itemNumber = request.getParameter("item_number");
        String paymentStatus = request.getParameter("payment_status");
        String paymentAmount = request.getParameter("mc_gross");
        String paymentCurrency = request.getParameter("mc_currency");
        String txnId = request.getParameter("txn_id");
        String receiverEmail = request.getParameter("receiver_email");
        String payerEmail = request.getParameter("payer_email");

        if (res.equals("VERIFIED")) {

            //---

        } else if (res.equals("INVALID")) {
            //---


        } else {
            // error
            System.out.println("error");

        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Upvotes: 2

Views: 161

Answers (1)

SSH
SSH

Reputation: 1627

here is my service method for your review may be it helps, its a bit cleaner approach instead of creating url at lower level which is little suspicious to me in your code , but error code can help to find the cause more accurately

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        configLogging();
        System.out.println("Inside service method");

        @SuppressWarnings("deprecation")
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(Constants.IPN_SANDBOX_ENDPOINT);


        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("cmd", "_notify-validate")); //You need to add this parameter to tell PayPal to verify
        for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
            String name = e.nextElement();
            String value = request.getParameter(name);
            System.out.println("<"+name+","+value+">");
            params.add(new BasicNameValuePair(name, value));
        }
        post.setEntity(new UrlEncodedFormEntity(params));
        String rc = getRC(client.execute(post)).trim();
//      IPNMessageHandler ipnMessageHandler = new IPNMessageHandler(request);
//      ipnMessageHandler.handleMessage();
        if ("VERIFIED".equals(rc)) {
            //Your business code comes here
            System.out.println("IPN is fine and working");
            IPNMessageHandler ipnMessageHandler = new IPNMessageHandler(request);
            ipnMessageHandler.handleMessage();

        }
    }

    private String getRC(HttpResponse response) throws IOException, IllegalStateException {
        InputStream is = response.getEntity().getContent();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String result = "";
        String line = null;
        while ((line = br.readLine()) != null) {
            result += line;
        }
        //      System.out.println("Response after: "+result);
        return result;
    }

Upvotes: 1

Related Questions