【问题标题】:Request timeout when testing an express checkout integration测试快速结帐集成时请求超时
【发布时间】:2015-01-24 04:16:27
【问题描述】:

这是我第一次使用 PayPal API,我正在尝试使用沙盒帐户在 java Web 应用程序中测试快速结帐集成,但第一步遇到了问题。我正在调用 SetExpressCheckout 操作并收到此错误:
"TIMESTAMP=2014%2d11%2d25T15%3a19%3a14Z&CORRELATIONID=523b6bcbe502f&ACK=Failure&L_ERRORCODE0=10001&L_SHORTMESSAGE0=Internal%20Error&L_LONGMESSAGE0=Timeout%20processing%20re强>”

正如您在 L_LONGMESSAGE0 中看到的,描述是“超时处理请求”,我不知道它是否相关,但 TIMESTAMP 提前 3 小时(我在 GMT-3,所以当我发送请求时当时是 12:19:14 而不是 15:19:14)。除此之外,我正在根据 PayPal 的帮助构建我的 url,这是一个示例(使用为沙盒帐户提供的默认测试用户、密码和签名):

https://api-3t.sandbox.paypal.com/nvp?USER=sdk-three_api1.sdk.com&PWD=QFZCWN5HZM8VBG7Q&SIGNATURE=A-IzJhZZjhg29XQ2qnhapuwxIDzyAZQ92FRP5dqBzVesOkzbdUONzmOU&METHOD=SetExpressCheckout&VERSION=99.0&RETURNURL=http%3A%2F%2Flocalhost%3A8080%2Fmysite%2Fsomepage&CANCELURL=http%3A%2F%2Flocalhost%3A8080%mysite%2Ferror&PAYMENTREQUEST_0_PAYMENTACTION=Sale&PAYMENTREQUEST_0_AMT=10.00

这是完整的代码:

String sUrl = "https://api-3t.sandbox.paypal.com/nvp?USER=sdk-three_api1.sdk.com&...."; //the full URL shown above
URL obj = new URL(sUrl);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer sbResponse = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    sbResponse.append(inputLine);
}
in.close();

每次阅读响应时,我都会看到“超时处理请求”消息(我也尝试过不编码请求参数,结果相同)。有谁知道这里发生了什么,或者至少是一个提示,以便我可以检查它?我发现与此错误相关的大多数帖子都是针对 php 的,并且是由参数问题(编码错误、缺少参数等)引起的。
提前致谢,问候。

【问题讨论】:

    标签: java paypal paypal-sandbox


    【解决方案1】:

    好吧,看来paypal不喜欢我写的网址,所以我把HttpURLConnection改成了org.apache.http.client.methods.HttpPost,所以这是我的代码(工作):

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(SANBOX_URL);
        post.setHeader("User-Agent", "Mozilla/5.0"); 
        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair(USER, "SANDBOX_USER"));
        urlParameters.add(new BasicNameValuePair(PASSWORD, "SANDBOX_PWD"));
        urlParameters.add(new BasicNameValuePair(SIGNATURE, "SANDBOX_SIGNATURE"));
        urlParameters.add(new BasicNameValuePair(VERSION, "VERSION"));
        urlParameters.add(new BasicNameValuePair(ACTION, "ACTION"));
        urlParameters.add(new BasicNameValuePair(AMOUNT, "AMOUNT"));
        urlParameters.add(new BasicNameValuePair(RETURN_URL, "RETURN_URL"));
        urlParameters.add(new BasicNameValuePair(CANCEL_URL, "CANCEL_URL"));
        urlParameters.add(new BasicNameValuePair(METHOD, "METHOD"));
    
        post.setEntity(new UrlEncodedFormEntity(urlParameters));
    
        HttpResponse response = client.execute(post);
    


    我必须改变的另一件事是不对参数的值进行编码;一旦我做了所有这些更改,最后我得到了“TOKEN=XXXX&TIMESTAMP=2014%2d11%2d27T00%3a08%3a29Z&CORRELATIONID=XXXX&ACK=Success&VERSION=119%2e0&BUILD=XXXX”。
    希望对其他人有所帮助

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 2016-02-06
      • 2018-03-25
      • 2011-12-12
      • 2021-08-03
      • 2021-10-07
      • 2021-07-23
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多