2013-05-14 124 views
0

嘗試通過集成測試在使用Paypal沙箱的Grails項目中測試Paypal付款。在這個階段,我正嘗試使用REST API創建Paypal付款。貝寶REST API錯誤請求

代碼片斷:

def jsonPaypalPayment =''' 
{ 
    "intent": "sale", 
    "redirect_urls": [{ 
    "return_url": "http://<return URL here>", 
    "cancel_url": "http://<cancel URL here>" 
    }], 
    "payer": { 
    "payment_method": "paypal" 
    }, 
    "transactions": [{ 
    "amount": { 
     "total": "0.10", 
     "currency": "USD", 
    }, 
    "description": "This is the payment transaction description." 
    }] 
} 
''' 

def client = new RESTClient("https://api.sandbox.paypal.com") 
client.contentType = ContentType.JSON 
client.headers.'Authorization' = "${tokenType} ${accessToken}" 
def resp = client.post(path: "/v1/payments/payment", body: jsonPaypalPayment) 

tokenType和的accessToken在先前步驟中成功地檢索。

post方法返回「400錯誤請求」響應。從非常小的mods的文檔採取樣本請求。

全部調試輸出:

2013-05-14 12:31:08,276 <> [main] DEBUG impl.conn.SingleClientConnManager - Get connection for route HttpRoute[{s}->https://api.sandbox.paypal.com] 
2013-05-14 12:31:08,461 <> [main] DEBUG client.protocol.RequestAddCookies - CookieSpec selected: best-match 
2013-05-14 12:31:08,461 <> [main] DEBUG impl.client.DefaultHttpClient - Attempt 1 to execute request 
2013-05-14 12:31:08,461 <> [main] DEBUG impl.conn.DefaultClientConnection - Sending request: POST /v1/payments/payment HTTP/1.1 
2013-05-14 12:31:08,461 <> [main] DEBUG apache.http.wire - >> "POST /v1/payments/payment HTTP/1.1[EOL]" 
2013-05-14 12:31:08,461 <> [main] DEBUG apache.http.wire - >> "Accept: application/json, application/javascript, text/javascript[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "Authorization: Bearer 6-OVyjZ1VqEPctkqa7k72DIkwqY0kL2dIfIy6dSkdOc[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "Content-Length: 356[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "Content-Type: application/json[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "Host: api.sandbox.paypal.com[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "Connection: Keep-Alive[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "Accept-Encoding: gzip,deflate[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.wire - >> "[EOL]" 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.headers - >> POST /v1/payments/payment HTTP/1.1 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.headers - >> Accept: application/json, application/javascript, text/javascript 
2013-05-14 12:31:08,464 <> [main] DEBUG apache.http.headers - >> Authorization: Bearer 6-OVyjZ1VqEPctkqa7k72DIkwqY0kL2dIfIy6dSkdOc 
2013-05-14 12:31:08,465 <> [main] DEBUG apache.http.headers - >> Content-Length: 356 
2013-05-14 12:31:08,465 <> [main] DEBUG apache.http.headers - >> Content-Type: application/json 
2013-05-14 12:31:08,465 <> [main] DEBUG apache.http.headers - >> Host: api.sandbox.paypal.com 
2013-05-14 12:31:08,465 <> [main] DEBUG apache.http.headers - >> Connection: Keep-Alive 
2013-05-14 12:31:08,465 <> [main] DEBUG apache.http.headers - >> Accept-Encoding: gzip,deflate 
2013-05-14 12:31:08,466 <> [main] DEBUG apache.http.wire - >> "[\n]" 
2013-05-14 12:31:08,466 <> [main] DEBUG apache.http.wire - >> "{[\n]" 
2013-05-14 12:31:08,466 <> [main] DEBUG apache.http.wire - >> " "intent": "sale",[\n]" 
2013-05-14 12:31:08,466 <> [main] DEBUG apache.http.wire - >> " "redirect_urls": [{[\n]" 
2013-05-14 12:31:08,466 <> [main] DEBUG apache.http.wire - >> " "return_url": "http://<return URL here>",[\n]" 
2013-05-14 12:31:08,466 <> [main] DEBUG apache.http.wire - >> " "cancel_url": "http://<cancel URL here>"[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " }],[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " "payer": {[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " "payment_method": "paypal"[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " },[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " "transactions": [{[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " "amount": {[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> "  "total": "0.10",[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> "  "currency": "USD",[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " },[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " "description": "This is the payment transaction description."[\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> " }][\n]" 
2013-05-14 12:31:08,471 <> [main] DEBUG apache.http.wire - >> "}[\n]" 
2013-05-14 12:31:08,661 <> [main] DEBUG apache.http.wire - << "HTTP/1.1 400 Bad Request[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "Server: Apache-Coyote/1.1[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "Date: Tue, 14 May 2013 16:31:08 GMT[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "Connection: close[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "PayPal-Debug-Id: 381936211a402[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "Content-Type: application/json[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "Content-Length: 195[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "Connection: close[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.wire - << "[EOL]" 
2013-05-14 12:31:08,662 <> [main] DEBUG impl.conn.DefaultClientConnection - Receiving response: HTTP/1.1 400 Bad Request 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << HTTP/1.1 400 Bad Request 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << Server: Apache-Coyote/1.1 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << Date: Tue, 14 May 2013 16:31:08 GMT 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << Connection: close 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << PayPal-Debug-Id: 381936211a402 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << Content-Type: application/json 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << Content-Length: 195 
2013-05-14 12:31:08,662 <> [main] DEBUG apache.http.headers - << Connection: close 
2013-05-14 12:31:08,664 <> [main] DEBUG apache.http.wire - << "{"name":"MALFORMED_REQUEST","message":"Incoming JSON request does not map to API request","information_link":"https://developer.paypal.com/docs/api/#MALFORMED_REQUEST","debug_id":"381936211a402"}" 
2013-05-14 12:31:08,664 <> [main] DEBUG impl.conn.SingleClientConnManager - Releasing connection [email protected]668b2 
2013-05-14 12:31:08,664 <> [main] DEBUG impl.conn.SingleClientConnManager - Released connection open but not reusable. 
2013-05-14 12:31:08,664 <> [main] DEBUG impl.conn.DefaultClientConnection - Connection shut down 
| Failure: testPayPalPayment(merch.storeapi.OrderIntegrationTests) 
| groovyx.net.http.HttpResponseException: Bad Request 

我已經注意到,REST API是測試版。文檔是否準確?端點是否已經過測試? REST API計劃何時發佈?關於不良要求的任何見解?提前致謝。

回答

4

您傳遞的JSON無效(格式錯誤),因爲它看起來在currency值後面有一個額外的逗號。

這裏是直接從文檔的有效例如:

{ 
    "intent":"sale", 
    "redirect_urls":{ 
     "return_url":"http://<return URL here>", 
     "cancel_url":"http://<cancel URL here>" 
    }, 
    "payer":{ 
     "payment_method":"paypal" 
    }, 
    "transactions":[ 
     { 
     "amount":{ 
      "total":"7.47", 
      "currency":"USD" 
     }, 
     "description":"This is the payment transaction description." 
     } 
    ] 
} 

Source

+0

感謝您的答覆。我實際上抓住了額外的逗號並重新測試。同樣的結果。 – emiles 2013-05-15 01:36:32

+1

但是,我複製了你的json字符串。原來'redirect_urls'不是數組。另外,這些網址需要成爲真正的網址。它在這些變化之後起作用。再次感謝您的回覆。 – emiles 2013-05-15 01:48:01