2015-05-30 11 views
4

Есть ли способ получить более конкретную ошибку PayPal, чем 400 плохих запросов? Я видел, кто-то делает что-то вроде этого:PayPal 400 Bad Request, более конкретно?

if (ex.InnerException is ConnectionException) 
{ 
    Response.Write(((ConnectionException) ex.InnerException).Response); 
} 
else 
{ 
    Response.Write(ex.Message); 
} 

Но это, кажется, не делать ничего другого для меня, все ошибки говорит,: «Удаленный сервер возвратил ошибку: (400) Bad Request.»

Я читал, что это может иметь какое-то отношение к какой-либо ошибке проверки, но я попытался изменить данные, которые я отправляю в PayPal, но все пока не повезло.

Надеюсь, вы можете мне помочь, спасибо!

EDIT:

Благодаря Айдын мне удалось найти эту ошибку-сообщение в одном из HTTP запросов через Скрипач:

{"name":"VALIDATION_ERROR","details":[{"field":"payer.funding_instruments[0].credit_card.number","issue":"Value is invalid"}],"message":"Invalid request - see details","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR","debug_id":"dd5f11f6e9c98"} 
+0

Вы аутентифицированы в этот момент в вашем коде? По соображениям безопасности PayPal может не дать более подробное сообщение об ошибке. –

+0

Спасибо за ваш быстрый комментарий! Хм ... Кажется, что исключение происходит при оплате Create. Если исключение соединения не будет показывать больше информации, если я использую приведенный выше код? – Mikkel

ответ

3

Вы можете сэкономить время, установив Fiddler, делая это вам могут видеть точные HTTP-запросы, которые вы отправляете, и ответы, которые вы получаете до того, как они даже начнут обрабатываться вашим приложением.

Вот пример того, как я просматриваю, example.com. Вы можете увидеть запросы, отправленные из моего браузера в правой верхней половине, и ответ в нижней правой половине, включая все заголовки и все такое ... Попытка отладки HTTP-трафика с использованием управления исключениями приведет вас в безумное состояние.

image of Fiddler Direct Link

+0

Большое спасибо за ваш ответ, определенно помог мне Fiddler, и мне удалось найти эту ошибку между HTTP-запросами: {"name": "VALIDATION_ERROR", "details": [{"field": "payer. finance_instruments [0] .credit_card.number "," issue ":" Значение недействительно "}]," message ":" Неверный запрос - см. подробности "," information_link ":" https://developer.paypal.com/webapps/developer/docs/api/# VALIDATION_ERROR "," debug_id ":" dd5f11f6e9c98 "} Поскольку это решило мою главную проблему с неспецифическими ошибками, я отмечу это как ответ, спасибо! – Mikkel

+0

Рад, что я мог бы помочь, приветствия :) –

3

Наряду с использованием Фидлера (который я настоятельно советую использовать, так как это фантастический инструмент), вы также можете изменить свой улов логику к следующему, чтобы получить детали тела ответа:

try 
{ 
    var payment = Payment.Create(...); 
} 
catch(PayPalException ex) 
{ 
    if(ex is ConnectionException) 
    { 
     // ex.Response contains the response body details. 
    } 
    else 
    { 
     // ... 
    } 
} 

... или ...

try 
{ 
    var payment = Payment.Create(...); 
} 
catch(ConnectionException ex) 
{ 
    // ex.Response contains the response body details. 
} 
catch(PayPalException ex) 
{ 
    // ... 
} 

Кроме того, если вы используете версию 1.4.3 (или более поздней) в PayPal .NET SDK, вы можете получить доступ к деталям предыдущего запроса и ответа с помощью следующих publicstatic свойства:

Каждое из этих свойств устанавливаются всякий раз, когда SDK делает новый вызов к API.

+0

Отлично, спасибо, я буду иметь это в виду, если у меня возникнут проблемы с PayPal, я ценю вашу помощь! – Mikkel

0

Я прошел через ту же проблему. В моем случае это проблема с кредитной картой, которая может быть использована раньше. Поэтому я взял новый номер кредитной карты с этого сайта. Тестирование кредитной карты и заменил на старый. Вот информация Кредитные карты, которые я использовал

credit_card = new CreditCard() 
        { 
         billing_address = new Address() 
         { 
          city = "Johnstown", 
          country_code = "US", 
          line1 = "52 N Main ST", 
          postal_code = "", 
          state = "OH" 
         }, 
         cvv2 = "874", 
         expire_month = 11, 
         expire_year = 2018, 
         first_name = "Joe", 
         last_name = "Shopper", 
         number = "4024007185826731", //New Credit card Number, Only Card type should match other details does not matter 
         type = "visa" 
        } 

Примечание: Все кредитные карточки отмечено на сайте PayPal не работает, давая такой же вопрос для меня. Если он работает на вас, тогда это хорошо, иначе используйте новый номер кредитной карты для тестирования.Надеюсь, это поможет кому-то.

Наслаждайтесь кодированием!

1

Я оценил предложение JasonZ об использовании PayPalResource.LastResponseDetails.Value, но обнаружил, что тело ответа всегда было пустым. Единственный способ я нашел, чтобы получить объяснение ошибки без скрипача это:

catch (PayPal.PaymentsException ex) 
{ 
    context.Response.Write(ex.Response); 
} 

С результатом:

{"name":"VALIDATION_ERROR","details":[{"field":"start_date","issue":"Agreement start date is required, should be valid and greater than the current date. Should be consistent with ISO 8601 Format"}],"message":"Invalid request. See details.","information_link":"https://developer.paypal.com/docs/api/payments.billing-agreements#errors","debug_id":"8c56c13fccd49"}