PayPal REST API .net SDK - 400 Bad Requests

后端 未结 8 1437
庸人自扰
庸人自扰 2021-02-13 12:57

I\'m working in the sandbox and using the PayPal REST .net SDK method Payment.Create with a CreditCard object. When all parameters are valid and using the test CC number from h

相关标签:
8条回答
  • 2021-02-13 13:35

    This seems to have changed, and while many of these answers point in the right direction, none of them worked exactly for me. This is my equivalent of the currently most upvoted answer:

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

    with the 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"}
    
    0 讨论(0)
  • @Jonathan, The REST API has log4net integrated and will output the full error response to a log file if you set it up. You must add this config section to your web.config:

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    

    and also set the options:

    <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="rest-api.log"/>
      <appendToFile value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>
    </root>
    

    Open your global.asax and add this into the Application_Start:

    log4net.Config.XmlConfigurator.Configure();
    

    Now, as long as there are write permissions set on your log folder, then the PayPal REST SDK will spit out error messages to the log file.

    0 讨论(0)
  • 2021-02-13 13:49

    All of the above solution of dont really grasp the problem ..

    I ran in to a similar problem a while back .. after debugging my code i found out that the transaction that i was making was logically wrong.. the subtotal was off be $0.25 and paypal server saw it and refused to process it, and gave me 400 bad request

    0 讨论(0)
  • 2021-02-13 13:50

    Improving the solution here is... Simply (Imports PayPal)

        Try
        Catch ex As PaymentsException
            For Each i In ex.Details.details
                Response.Write(i.field) 'Name of Field
                Response.Write(i.code) 'Code If Any
                Response.Write(i.issue) 'Validation Issue
            Next
        End Try
    
    0 讨论(0)
  • 2021-02-13 13:53

    I only started messing with the SDK and API today and ran into this issue right away. I mean, if I'm going to create my own form to handle payments, I'd like to give my user's feedback if anything went wrong.

    In any case, I did find some hidden info in the inner exception. Maybe this will help.

    catch (PayPal.Exception.PayPalException ex)
    {
        if (ex.InnerException is PayPal.Exception.ConnectionException)
        {
            context.Response.Write(((PayPal.Exception.ConnectionException)ex.InnerException).Response);
        }
        else
        {
            context.Response.Write(ex.Message);
        }
    }
    

    The resulting response:

    {"name":"VALIDATION_ERROR","details":[{"field":"payer.funding_instruments[0].credit_card.number","issue":"Must be numeric"}],"message":"Invalid request - see details","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR","debug_id":"0548e52ef9d95"} 
    
    0 讨论(0)
  • 2021-02-13 13:54

    My problem was that my total, detail.subtotal, and items.price were passing in values like $1,000.00 and it needs decimal so use something like:

    total = Regex.Replace(model.OrderTotal, "[^0-9.]", "")
    
    0 讨论(0)
提交回复
热议问题