2017-08-10 48 views
0

我嘗試將PayPal PLUS API集成到我的NativeScript移動應用程序中。當創建付款(調用此API:https://developer.paypal.com/docs/api/payments/#create_payment)與側面顯示的縮短呼叫時,我不斷收到500錯誤。可悲的是我沒有找到如何顯示它的消息。PayPal REST API嘗試創建付款對象時返回500錯誤

我通過NativeScript在iOS模擬器(Xcode 7)上運行我的代碼。

我嘗試以下捲曲調用,這工作對我來說:

我試着用捲曲什麼:

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創建的響應。

現在我創建了一個帶有相同元素的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對象的錯誤信息?或者,甚至有人甚至可以看到我的代碼可能有什麼問題。如果你需要的工作(通過XHR)API調用:

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

回答

0

如果某些一個是做研究上的平等問題:

您需要更改

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

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

,你需要在send-方法傳遞數據作爲JSON字符串,請致電:

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

「data」是您的JSON字符串。