KiShOrE
KiShOrE

Reputation: 925

Paypal IPN status is always invalid?

Am getting Invalid response from IPN, some people mentioned like return url and notification url shouldn't be same but i changed in that way also even am getting same result. Here is my code for making payment,payment is working fine.

 Paypal paypal = new Paypal();
            paypal.cmd = "_xclick";
            paypal.business = ConfigurationManager.AppSettings["BusinessAccountKey"];
            bool useSandbox = Convert.ToBoolean(ConfigurationManager.AppSettings["UseSandbox"]);
            paypal.cancel_return = "http://www.patronalerts.com/";
            //paypal.@return = ConfigurationManager.AppSettings["ReturnURL"];
            paypal.@return = "http://www.patronalerts.com/";
            paypal.notify_url = ConfigurationManager.AppSettings["NotifyURL"];
            paypal.currency_code = ConfigurationManager.AppSettings["CurrencyCode"];
            paypal.item_name = "Test Product";
            paypal.amount = "10";

            url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd="+paypal.cmd +"&business="+ paypal.business+"&no_shipping=&return="+paypal.@return+"&cancel_return="+paypal.cancel_return+"&currency_code="+paypal.currency_code+"&item_name="+ paypal.item_name+"&amount="+ paypal.amount;

But the problem with below code or configuration in paypal account i can't guess. most probably with paypal configuration because every one using this code.

string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        byte[] param = Request.BinaryRead(System.Web.HttpContext.Current.Request.ContentLength);
        string strRequest = Encoding.ASCII.GetString(param);
        string strResponse_copy = strRequest;  //Save a copy of the initial info sent by PayPal
        strRequest += "&cmd=_notify-validate";
        req.ContentLength = strRequest.Length;

        StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
        streamOut.Write(strRequest);
        streamOut.Close();
        StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
        string strResponse = streamIn.ReadToEnd();
        streamIn.Close();

        if (strResponse == "VERIFIED")
        {
            NameValueCollection these_argies = HttpUtility.ParseQueryString(strResponse_copy);
            string user_email = these_argies["payer_email"];
            string pay_stat = these_argies["payment_status"];

            if (pay_stat.Equals("Completed"))
            {
                ViewBag.Result = "Kishore Suceess";
            }              
        }
        else if (strResponse == "INVALID")
        {
            ViewBag.Result = "invalids";
        }
        else
        {
            ViewBag.Result = "Ipn data for manual investigation";             
        }

If any body help me out would be appriciated.

Upvotes: 1

Views: 1405

Answers (1)

PayPal_Federica
PayPal_Federica

Reputation: 926

An “INVALID” message is due to the following reasons:
- Check that your are posting your response to the correct URL, which is https://www.sandbox.paypal.com/cgi-bin/webscr or https://www.paypal.com/cgi-bin/webscr, depending on whether you are testing in the Sandbox or you are live, respectively.
- Verify that your response to the test IPN message contains exactly the same variables and values as the test message and that they are in the same order as in the test message. Finally, verify that the original variables are preceded by a cmd=_notify-validate variable.
- Ensure that you are encoding your response string and are using the same character encoding as used by the test IPN message. (for example, I can see that he is using letters with umlaut and other symbols like “/”, etc).

With regard to the last point, the merchant can try to change the encoding language in use in his PayPal account, following the steps below:

  1. Login on you PayPal account
  2. Click on Profile
  3. Click on “My Selling Preferences” tab
  4. Click on “PayPal Button Language Encoding” (at the end of the page)
  5. Click on "Other Options"
  6. Select from the drop down menu: UTF-8
  7. Choose the same charset also for the second option, which is related to IPN
  8. Click “Save”

If the issue persists, we recommend to review the script in use, PayPal has some IPN code samples available at: https://github.com/paypal/ipn-code-samples

For additional information I include the link: https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4

Upvotes: 2

Related Questions