Пытается проверить платежи 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 запланирован к выпуску? Любые идеи относительно плохого запроса? Заранее спасибо.
Спасибо за ваш ответ. Я на самом деле поймал дополнительную запятую и повторил тест. Тот же результат. – emiles
Однако я скопировал вашу строку json. Оказывается, «redirect_urls» не является массивом. Кроме того, URL-адреса должны быть реальными URL-адресами. Он работал после этих изменений. Еще раз спасибо за ответ. – emiles