2013-03-05 72 views
0

我想在不重定向浏览器的情况下在客户的PayPal中执行快速结账流程。我写的代码一样设置快速结帐方法返回故障中的确认

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

//准备Web请求......

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 

我该如何纠正这一点。

+0

在你的问题中留下你的api证书是一个坏主意。你可能想要删除这些。 – 2013-03-05 05:58:36

回答

2

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

+0

我没有使用任何主题变量 – Pa1 2013-03-05 14:09:25

+1

10002错误只是由于有限的原因造成的。您正在使用您指向的端点的错误凭据,端点错误,或者您正在传递主题变量,并且您没有权限对您在主题中传递的帐户执行API调用。尝试将您的API凭证从您的测试帐户重新复制到代码中。 – 2013-03-05 15:20:26

+0

嗯我发现错误我错过了'&'符号cancelurl和returnurl – Pa1 2013-03-06 04:05:58