贝宝 REST API 403 错误

Posted

技术标签:

【中文标题】贝宝 REST API 403 错误【英文标题】:Paypal REST API 403 ERROR 【发布时间】:2014-07-13 18:00:59 【问题描述】:

我正在尝试将 paypal 支付集成到我的 JavaEE Web 应用程序中。 每次我尝试付款时,都会抛出 403 错误。

这是我正在使用的 servlet:

@WebServlet(name="PaypalPayment", urlPatterns="/paypal-payment.html")
public class Paypal_Payment extends HttpServlet 
  private static final long serialVersionUID = 1L;
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    OAuthTokenCredential token;
    String accessToken;
    APIContext apiContext;

    Map<String, String> sdkConfig = new HashMap<String, String>();
    sdkConfig.put("mode", "sandbox");
    sdkConfig.put("service.EndPoint", "https://api.sandbox.paypal.com");
    sdkConfig.put("client_id", Constantes.PAYPAL_CLIENT_ID);
    sdkConfig.put("secret", Constantes.PAYPAL_CLIENT_SECRET);

    try
      token = new OAuthTokenCredential(Constantes.PAYPAL_CLIENT_ID, Constantes.PAYPAL_CLIENT_SECRET, sdkConfig);
      accessToken = token.getAccessToken();
      apiContext = new APIContext(accessToken);
      apiContext.setConfigurationMap(sdkConfig);
      Amount amount = new Amount();
      amount.setCurrency("EUR");
      amount.setTotal("25");

      Transaction transaction = new Transaction();
      transaction.setDescription("Creating Payment");   
      transaction.setAmount(amount);
      List<Transaction> transactions = new ArrayList<Transaction>();
      transactions.add(transaction);
      Payer payer = new Payer();
      payer.setPaymentMethod("paypal");
      Payment payment = new Payment();
      payment.setIntent("sale");
      payment.setPayer(payer);
      payment.setTransactions(transactions);

      RedirectUrls redirectUrls = new RedirectUrls();
      redirectUrls.setCancelUrl("http://example.com/a-vos-cas-JSP/paypal-payment.html");
      redirectUrls.setReturnUrl("http://example.com/a-vos-cas-JSP/paypal-payment.html");

      payment.setRedirectUrls(redirectUrls);
      Payment createdPayment = payment.create(apiContext);
      System.out.println("createdPayment : " + createdPayment);
    catch(PayPalRESTException e)
      e.printStackTrace();
    
    getServletContext().getNamedDispatcher(Constantes.VUE_PAYPAL_RESPONSE).forward(request, response);
  

这是控制台输出:

14:26:15,550 INFO [stdout] (http--0.0.0.0-8080-6) curl 命令: 14:26:15,551 信息 [stdout] (http--0.0.0.0-8080-6) curl -v 'https://api.sandbox.paypal.com/v1/oauth2/token' \ 14:26:15,552 信息 [stdout] (http--0.0.0.0-8080-6) -H "授权:基本 QWJHQTFSQXVpeVA0RDVvQmt5d1o3dTBCanJJWkt0dm9CaVhTcDZ0QWFINlM4LXRFdzByX2hyRzNfbUZMOkVBRmhVQkJkZWRqTmJfTXV6SlNpbVI1YnY3SThQVzdwUldibGQ2aE9seThHZlNnRlhhZ=RVTRMBS1 \ 14:26:15,552 INFO [stdout] (http--0.0.0.0-8080-6) -H "用户代理: 贝宝SDK/paypal-core-java 1.5.0 (lang=Java;v=1.7.0_55;bit=64;os=Mac_OS_X 10.9.2)" \ 14:26:15,553 信息 [标准输出] (http--0.0.0.0-8080-6) -H "接受:应用程序/json" \ 14:26:15,553 信息 [标准输出] (http--0.0.0.0-8080-6) -d 'grant_type=client_credentials' 14:26:16,878 信息 [标准输出] (http--0.0.0.0-8080-6) curl 命令:14:26:16,879 信息 [标准输出] (http--0.0.0.0-8080-6) curl -v 'https://api.sandbox.paypal.com/v1/payments/payment' \ 14:26:16,879 INFO [stdout] (http--0.0.0.0-8080-6) -H "授权:承载 A015iJYDQHdb7TJXzJzVIW-eSm1lP8NObGmlJkTzx2wVREo" \ 14:26:16,879 信息 [标准输出] (http--0.0.0.0-8080-6) -H "用户代理: PayPal SDK/rest-sdk-java 0.9.0 (lang=Java;v=1.7.0_55;bit=64;os=Mac_OS_X 10.9.2)" \ 14:26:16,880 信息 [标准输出] (http--0.0.0.0-8080-6) -H "PayPal-Request-Id: 7b42030f-9b96-4027-9257-0c1311082fa2" \ 14:26:16,880 信息 [标准输出] (http--0.0.0.0-8080-6) -H“内容类型: 应用程序/json" \ 14:26:16,880 信息 [标准输出] (http--0.0.0.0-8080-6) -d ' 14:26:16,880 INFO [stdout] (http--0.0.0.0-8080-6) "intent": "sale", 14:26:16,880 INFO [stdout] (http--0.0.0.0- 8080-6) “付款人”: 14:26:16,881 信息 [标准输出] (http--0.0.0.0-8080-6) "payment_method": "paypal" 14:26:16,881 信息 [标准输出] (http--0.0.0.0-8080-6) , 14:26:16,881 信息 [标准输出] (http--0.0.0.0-8080-6)“交易”:[14:26:16,881 信息 [标准输出] (http--0.0.0.0-8080-6) 14:26:16,881 信息 [标准输出] (http--0.0.0.0-8080-6)“金额”: 14:26:16,882 INFO [stdout] (http--0.0.0.0-8080-6)“货币”:“欧元”,14:26:16,882 信息 [标准输出](http--0.0.0.0-8080-6)“总计”:“25”14:26:16,882 信息 [标准输出] (http--0.0.0.0-8080-6) ,14:26:16,882 信息 [stdout] (http--0.0.0.0-8080-6) "description": "创建 付款” 14:26:16,882 INFO [stdout] (http--0.0.0.0-8080-6) 14:26:16,883 信息 [标准输出] (http--0.0.0.0-8080-6)], 14:26:16,883 信息 [stdout] (http--0.0.0.0-8080-6) "redirect_urls": 14:26:16,883 信息 [stdout] (http--0.0.0.0-8080-6) “return_url”: "http://example.com/a-vos-cas-JSP/paypal-response.html", 14:26:16,883 信息 [stdout] (http--0.0.0.0-8080-6) “cancel_url”: "http://example.com/a-vos-cas-JSP/paypal-cancel.html" 14:26:16,884 信息 [标准输出] (http--0.0.0.0-8080-6) 14:26:16,884 信息 [标准输出] (http--0.0.0.0-8080-6) ' 14:26:17,909 坟墓 [class com.paypal.core.HttpConnection] (http--0.0.0.0-8080-6) 错误代码: 403 响应:"name":"REQUIRED_SCOPE_MISSING","message":"Access 令牌没有要求 范围","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#REQUIRED_SCOPE_MISSING","debug_id":"e066fbac38f41" 14:26:17,911 错误 [stderr] (http--0.0.0.0-8080-6) com.paypal.core.rest.PayPalRESTException:错误代码:403 响应:"name":"REQUIRED_SCOPE_MISSING","message":"访问令牌 没有要求 范围","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#REQUIRED_SCOPE_MISSING","debug_id":"e066fbac38f41"

所以,有一条消息说找不到范围,但我无法获得有关此错误的任何信息。我想我错过了这个 servlet 中的一些东西,但我找不到什么。任何帮助将不胜感激:D 非常感谢

【问题讨论】:

【参考方案1】:

答案包含在此响应中:

"name":"REQUIRED_SCOPE_MISSING",
 "message":"Access token does not have required scope",
 "information_link":"https://developer.paypal.com/webapps/developer/docs/api/#REQUIRED_SCOPE_MISSING",
 "debug_id":"e066fbac38f41"

您的应用配置中缺少某些属性。最好的办法是通过列出的debug_id 联系支持人员。他们可以帮助您正确配置帐户。

【讨论】:

以上是关于贝宝 REST API 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS应用swift 3中的谷歌翻译rest api错误403

S3 REST API HEAD 请求上的 403 禁止错误

无服务器框架 AWS REST API Gateway - 403 CORS 错误

Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误

如何在 Android 中使用 REST API 将图像上传到 S3 存储桶,出现禁止错误:403

贝宝 REST .net api 提取 VALIDATION_ERROR