paypal - 设置 Express Checkout 方法在 ack 中返回失败

标签 paypal payment-gateway

我想在不重定向浏览器的情况下为客户在 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);

//准备网络请求...

   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

我该如何纠正这个问题。

最佳答案

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

关于paypal - 设置 Express Checkout 方法在 ack 中返回失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15216804/

相关文章:

c# - Pin 支付 API - "Authentication failed because remote party has closed the transport stream"

javascript - 为什么 PayPal 智能按钮无法识别我的商品数组?

iOS Paypal 完成付款详情

php - paypal付款后才访问页面?

javascript - payone 与 creditcardcheck 集成

reactjs - 没有账单地址的 Paypal 智能按钮?

forms - Paypal 支付标准自定义字段的 HTML 表单基础

paypal - 数字商品支付 : I keep getting invalid request

android - 如何解决来自 UPI sdk 的未定义响应?

php - CodeIgniter - 如何在项目中加载 stripe-php 库?