Paypal HTTP发布请求在MVC C#中出现Invalid Merchant或Merchant不存在错误

时间:2016-04-13 13:06:39

标签: c# asp.net-mvc paypal

我在向Paypal for Secure令牌发送HTTP帖子请求时遇到麻烦,以使用Paypal的托管解决方案,但我收到此错误:

  

某些必填信息缺失或不正确。请更正以下字段,然后重试。

     

错误:商家或商家无效!

这是我正在进行HTTP调用的C#代码:

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();

                    }

请帮助我解决这个问题可能b我在上面的代码中也做错了。

1 个答案:

答案 0 :(得分:0)

问题是我无法收到Token和TokenID,因为此异常正在出现,然后我通过在上面的代码中进行修改来解决我的问题,以便Paypal发回一个带有Token和TokenID的响应,我用于iframe及其现在的完美工作。

 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();
            }

上面的代码是错误的,并在收到响应等时抛出异常。所以这个代码块运行良好。