2013-05-14 8 views
0

Пытается проверить платежи Paypal с помощью теста интеграции в проекте grails с использованием песочницы Paypal. На этом этапе я пытаюсь создать Paypal-платеж, используя REST API.Paypal REST API Bad Request

фрагмент кода:

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 и маркер доступа успешно получены в предыдущем шаге.

Метод post возвращается с ответом «400 Bad Request». Взял образец запроса из документации с очень незначительными модами.

Полный отладочный вывод:

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 находится в бета-версии. Точная документация? Были ли протестированы конечные точки? Когда API REST запланирован к выпуску? Любые идеи относительно плохого запроса? Заранее спасибо.

ответ

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

+1

Однако я скопировал вашу строку json. Оказывается, «redirect_urls» не является массивом. Кроме того, URL-адреса должны быть реальными URL-адресами. Он работал после этих изменений. Еще раз спасибо за ответ. – emiles