【问题标题】:PayPal REST API returning 500-Error when trying to create payment-objectPayPal REST API 在尝试创建支付对象时返回 500-Error
【发布时间】:2018-01-18 07:14:24
【问题描述】:

我尝试将 PayPal PLUS API 集成到我的 NativeScript 移动应用程序中。在创建付款(调用此 API:https://developer.paypal.com/docs/api/payments/#create_payment)并在侧面显示缩短的调用时,我不断收到 500 错误。可悲的是,我没有找到如何显示它的信息。

我正在通过 NativeScript 在 iOS 模拟器 (Xcode 7) 上运行我的代码。

我尝试了以下 curl-call,它对我有用:

我对 curl 的尝试:

curl -v -X POST https://api.sandbox.paypal.com/v1/payments/payment \
-H "Content-Type:application/json" \
-H "Authorization: Bearer <my-token>„ \
-d '{
  "intent": "sale",
  "payer": {
      "payment_method": "paypal"
  },
  "transactions": [
  {
      "amount": {
      "total": "30.11",
      "currency": "EUR",
      "details": {
          "subtotal": "30.00",
          "tax": "0.07",
          "shipping": "0.03",
          "handling_fee": "1.00",
          "shipping_discount": "-1.00",
          "insurance": "0.01"
      }
  },
  "item_list": {
      "items": [
      {
          "name": "hat",
          "description": "Brown hat.",
          "quantity": "5",
          "price": "3",
          "tax": "0.01",
          "sku": "1",
          "currency": "EUR"
      },
      {
          "name": "handbag",
          "description": "Black handbag.",
          "quantity": "1",
          "price": "15",
          "tax": "0.02",
          "sku": "product34",
          "currency": "EUR"
      }
    ]}
  }
  ],
  "redirect_urls": {
  "return_url": "http://www.paypal.com/return",
  "cancel_url": "http://www.paypal.com/cancel"
  }
}'

响应 201-Created 响应。

现在我在 TypeScript 中创建了一个具有相同元素的 XHR 对象。到目前为止我的代码:

    var oReq = new XMLHttpRequest();    
    oReq.open("POST", PayPalEndpoints.getPaymentEndpoint, true);
    oReq.setRequestHeader('Authorization', "Bearer " + access_token);
    oReq.setRequestHeader('Accept', "application/json");
    oReq.onreadystatechange = function () {
        console.log("state changed - new state: " + oReq.readyState + " and Status: " + oReq.status);
        if (oReq.readyState === 4) {     
            if (oReq.status === 200) {        
                var response = JSON.parse(oReq.responseText);          
                console.log("response = " + response);
            } else { 
                console.log("Error: " + oReq.status + " Message: " + oReq.responseText);
            } 
        }    
    };

    oReq.send({
        "intent": "sale",
        "payer": {
            "payment_method": "paypal"
        },
        "transactions": [
        {
            "amount": {
                "total": "30.11",
                "currency": "EUR",
                "details": {
                "subtotal": "30.00",
                "tax": "0.07",
                "shipping": "0.03",
                "handling_fee": "1.00",
                "shipping_discount": "-1.00",
                "insurance": "0.01"
            }
            },
            "item_list": {
                "items": [
                    {
                        "name": "hat",
                        "description": "Brown hat.",
                        "quantity": "5",
                        "price": "3",
                        "tax": "0.01",
                        "sku": "1",
                        "currency": "EUR"
                    },
                    {
                        "name": "handbag",
                        "description": "Black handbag.",
                        "quantity": "1",
                        "price": "15",
                        "tax": "0.02",
                        "sku": "product34",
                        "currency": "EUR"
                    }
                ]
            }
        }
        ],
        "redirect_urls": {
            "return_url":"http://www.paypal.com/return",
            "cancel_url":"http://www.paypal.com/cancel"
        }
    });

这(如上所述)对我不起作用。有人知道如何显示来自该 XHR-Object 的错误消息吗?或者也许有人甚至看到我的代码可能有什么问题。如果您需要有效的 API 调用(通过 XHR):

    var oReq = new XMLHttpRequest();    
    var encodedString = base64.encode(this.authorizationBasic);
    oReq.open("POST", "https://api.sandbox.paypal.com/v1/oauth2/token", false);
    oReq.setRequestHeader('Authorization', "Basic " +  encodedString);

    oReq.setRequestHeader('Content-type', "application/x-www-form-urlencoded");
    oReq.setRequestHeader('Accept', "application/json");
    oReq.setRequestHeader('Accept-Language', "en_US");

    oReq.onreadystatechange = function () {
        console.log("state changed - new state: " + oReq.readyState + " and Status: " + oReq.status);
        if (oReq.readyState === 4) {
            if (oReq.status === 200) {        
                var response = JSON.parse(oReq.responseText);          
                OAuthAccessor.access_token = response.access_token;
                console.log("access_token set");
            } else { 
                console.log("Error: " + oReq.status + " Message: " + oReq.responseText);
            } 
        }    
    };

    oReq.send('grant_type=client_credentials');

API 参考:

集成pdf: https://www.paypalobjects.com/webstatic/de_DE/downloads/PayPal-PLUS-IntegrationGuide.pdf

调用参考: https://developer.paypal.com/docs/integration/direct/make-your-first-call/

我缩短的通话时间: https://developer.paypal.com/docs/api/payments/#create_payment

【问题讨论】:

    标签: javascript typescript curl paypal xmlhttprequest


    【解决方案1】:

    如果有人正在研究同样的问题:

    你需要改变

     oReq.setRequestHeader('Accept', "application/json");
    

    oReq.setRequestHeader('Grant-Type', "application/json");
    

    你需要将send-Method中的数据作为json-string传递,所以调用:

     oReq.send(JSON.stringify(data));
    

    “数据”是您的 JSON 字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-14
      • 2013-09-01
      • 2017-07-10
      • 2014-05-24
      • 2017-08-05
      • 2017-02-16
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多