Usman
Usman

Reputation: 2577

Paypal HTTP post request gives Invalid Merchant or Merchant doesn't exist error in MVC C#

I am facing trouble in making an HTTP post request to Paypal for Secure token to use Paypal's Hosted solution but I am getting this error:

Some required information is missing or incorrect. Please correct the fields below and try again.

Error: Invalid Merchant or Merchant doesn't exist!

This is my C# code throught which I am making HTTP calls:

string strNVP = "https://pilot-payflowpro.paypal.com?PARTNER=PayPal&USER=myUsername&VENDOR=myVendorName&PWD=myPassword&TRXTYPE=A&AMT=" + obj.CurrentPackagePrice + "&CREATESECURETOKEN=Y&SECURETOKENID=" + Guid.NewGuid().ToString("N");
HttpWebRequest wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVP);
                    wrWebRequest.Method = "POST";
                    StreamWriter requestWriter = new StreamWriter(wrWebRequest.GetRequestStream());
                    requestWriter.Write(strNVP);
                    requestWriter.Close();

                    HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
                    StreamReader responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream());

                    //and read the response
                    string responseData = responseReader.ReadToEnd();
                    responseReader.Close();

                    string result = Server.UrlDecode(responseData);
                    string[] arrResult = result.Split('&');
                    Hashtable htResponse = new Hashtable();
                    string[] responseItemArray;
                    foreach (string responseItem in arrResult)
                    {
                        responseItemArray = responseItem.Split('=');
                        htResponse.Add(responseItemArray[0], responseItemArray[1]);
                    }

                    string responseResult = htResponse["RESULT"].ToString();
                    string response = htResponse["RESPMSG"].ToString();

                    ///for Success response

                    if (responseResult == "0" && response == "Approved")
                    {
                        ViewBag.secureToken = htResponse["SECURETOKEN"].ToString();
                        ViewBag.secureTokenId = htResponse["SECURETOKENID"].ToString();

                    }

Kindly help me in this problem may b I have done some wrong in my code above also.

Upvotes: 0

Views: 702

Answers (1)

Usman
Usman

Reputation: 2577

The issue was that I was unable to receive a Token and TokenID due to that this exception was arising and then I resolved my issue by making modifications in the above code so that the Paypal sends back a response with Token and TokenID which I used in iframe and its working perfect now.

 var request = (HttpWebRequest)WebRequest.Create("https://pilot-payflowpro.paypal.com");
            var postData = "PARTNER=PayPal&USER=myUser&VENDOR=myVendor&PWD=myPassword&TRXTYPE=A&AMT=50&CREATESECURETOKEN=Y&SECURETOKENID=" + Guid.NewGuid().ToString("N");
            var data = Encoding.ASCII.GetBytes(postData);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var responseData = (HttpWebResponse)request.GetResponse();

            var responseString = new StreamReader(responseData.GetResponseStream()).ReadToEnd();

            string result = Server.UrlDecode(responseString);
            string[] arrResult = result.Split('&');
            Hashtable htResponse = new Hashtable();
            string[] responseItemArray;
            foreach (string responseItem in arrResult)
            {
                responseItemArray = responseItem.Split('=');
                htResponse.Add(responseItemArray[0], responseItemArray[1]);
            }

            string responseResult = htResponse["RESULT"].ToString();
            string response = htResponse["RESPMSG"].ToString();

            ///for Success response

            if (responseResult == "0" && response == "Approved")
            {
                ViewBag.secureToken = htResponse["SECURETOKEN"].ToString();
                ViewBag.secureTokenId = htResponse["SECURETOKENID"].ToString();
            }

The above code is buggy and throws exceptions while receiving a response etc. So this code block is working good.

Upvotes: 1

Related Questions