PayPal ExpressCheckout с Java SDK не удается после повторных попыток, однако клиент платит - PullRequest
0 голосов
/ 05 июня 2018

Я отвечаю за интеграцию платежей Paypal в бизнесе на рынке, и у меня есть серьезная проблема, с которой, я надеюсь, у кого-либо есть опыт.

Мы используем ExpressCheckout в Java с версией merchantsdk 2.15.122.Я понимаю, что это не последний способ интеграции, но он все равно должен работать должным образом.

Мы применяем стандартный способ - сначала создать токен оплаты через PayPalAPIInterfaceServiceService.setExpressCheckout, затем перенаправить клиента в Paypal, ифактически выполняя платеж через PayPalAPIInterfaceServiceService.doExpressCheckoutPayment.

Я не уверен, что код реализации поможет здесь, так как он работал отлично в течение нескольких месяцев, однако несколько дней назад начали появляться некоторые тревожные ошибки.У нас есть несколько случаев, когда кажется, что есть какие-то проблемы с подключением или временем ответа, которые приводят к повторным запросам.Мы видим таймауты чтения при выполнении окончательного doExpressCheckoutPayment в журналах следующим образом:

Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
at com.paypal.core.HttpConnection.execute(HttpConnection.java:91)

... и SDK PayPal также регистрирует "Retry No: 1 ..." и "Retry No: 2 ..", так что кажется, что он пытается дважды.В конце концов платеж кажется неудачным со следующей ошибкой:

com.paypal.exception.HttpErrorException: retry fails..  check log for more information
at com.paypal.core.HttpConnection.execute(HttpConnection.java:144)
at com.paypal.core.APIService.makeRequestUsing(APIService.java:177)
at com.paypal.core.BaseService.call(BaseService.java:265)
at urn.ebay.api.PayPalAPI.PayPalAPIInterfaceServiceService.doExpressCheckoutPayment(PayPalAPIInterfaceServiceService.java:1513)
at urn.ebay.api.PayPalAPI.PayPalAPIInterfaceServiceService.doExpressCheckoutPayment(PayPalAPIInterfaceServiceService.java:1465)

К сожалению, с нами связались несколько недовольных клиентов, которые, кажется, действительно платят за эти повторные попытки.С некоторых клиентов даже взималась плата в два раза, то есть один раз за повторную попытку.

Кто-нибудь имеет опыт работы с такими ошибками и может дать некоторое представление о том, как правильно их устранять?

Заранее спасибо заhelp!

ОБНОВЛЕНИЕ Как правильно указано в ответах, Paypal взимает один токен только один раз, двойные платежи происходят из-за повторных попыток клиента, поскольку они видят сбой платежа нанашей платформы, и столкнуться с той же проблемой несколько раз.Таким образом, мультизарядка не является проблемой, но все же мне интересно, как это следует обрабатывать должным образом или же это происходит на самом деле с другими пользователями Paypal.

1 Ответ

0 голосов
/ 06 июня 2018

Я не уверен в этой интеграции SDK, но PayPal делает только один платеж на одном EC-токене.Последующие попытки зарядить один и тот же токен EC потерпят неудачу.

Можете ли вы проверить, было ли создано несколько токенов EC для случая использования, когда клиент жалуется на несколько раз?

Другой способ узнатьсостояние EC-токена, вызывающего вызов GetExpressCheckoutDetails, чтобы узнать состояние EC-токена.Справочный документ: https://developer.paypal.com/docs/classic/api/merchant/GetExpressCheckoutDetails_API_Operation_NVP/

...