0

我想在不重定向浏览器的情况下为客户在贝宝中进行快速结帐过程。我写了这样的代码

        string sAPIUser = apiuser;
        string sAPIPassword = password;
        string sAPISignature = "signature";
        string sAPIEndpoint = "https://api-3t.sandbox.paypal.com/nvp";           
        string sAppID = "APP-80W284485P519543T";

        StringBuilder sRequest = new StringBuilder();

        ASCIIEncoding encoding = new ASCIIEncoding();
        string postData = ("&METHOD=SetExpressCheckout");
        postData += ("&VERSION=63.0");
        postData += ("&PAYMENTREQUEST_0_AMT=10.00");
        postData += ("&PAYMENTREQUEST_0_CURRENCYCODE=USD");
        postData += ("&PAYMENTREQUEST_0_PAYMENTACTION=Sale");
        postData += ("CANCELURL=http://www.google.com");
        postData += ("RETURNURL=http://www.google.com");
        byte[] data = encoding.GetBytes(postData);

// 准备网络请求...

   HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(sAPIEndpoint);
   myRequest.Method = "POST";
   myRequest.Headers.Add("X-PAYPAL-SECURITY-USERID", sAPIUser);
   myRequest.Headers.Add("X-PAYPAL-SECURITY-PASSWORD", sAPIPassword);
   myRequest.Headers.Add("X-PAYPAL-SECURITY-SIGNATURE", sAPISignature);
   myRequest.Headers.Add("X-PAYPAL-SERVICE-VERSION", "1.3.0");
   myRequest.Headers.Add("X-PAYPAL-REQUEST-DATA-FORMAT", "NV");
   myRequest.Headers.Add("X-PAYPAL-RESPONSE-DATA-FORMAT", "NV");
   myRequest.Headers.Add("X-PAYPAL-APPLICATION-ID", sAppID);
   myRequest.ContentType = "application/x-www-form-urlencoded";
   myRequest.ContentLength = data.Length;
   // Send the request, read the response
   Stream newStream = myRequest.GetRequestStream();
   newStream.Write(data, 0, data.Length);
   newStream.Close();
   HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse();
   Stream responseStream = response.GetResponseStream();
   Encoding encoding2 = Encoding.GetEncoding("utf-8");
   StreamReader reader = new StreamReader(responseStream, encoding2);
   string theResponse = reader.ReadToEnd();
   theResponse = HttpUtility.HtmlDecode(theResponse);

但我在theResponse变量中收到失败消息。我在做什么错误。错误就像

    TIMESTAMP=2013%2d03%2d05T05%3a55%3a38Z&CORRELATIONID=5c10035aca937&ACK=Failure&VERSION=63%2e0&BUILD=5331358&L_ERRORCODE0=10002&L_SHORTMESSAGE0=Authentication%2fAuthorization%20Failed&L_LONGMESSAGE0=You%20do%20not%20have%20permissions%20to%20make%20this%20API%20call&L_SEVERITYCODE0=Error

我该如何纠正这一点。

4

1 回答 1

2

确保您使用的凭据适用于您的沙盒帐户,而不是您的真实帐户。您的代码看起来像是指向沙箱,因此您需要使用沙箱凭据。此外,如果这不是您的全部代码,请确保您没有传递名为“SUBJECT”的变量并使用电子邮件地址填充它。

于 2013-03-05T13:57:23.703 回答