mardi 30 mai 2017

Laravel 5 catching 400 response from PayPal API

I asked a very specific question located here: Laravel 5 catching PayPal PHP API 400 errors on localhost:8000

As nobody could help I want to make it a more open question about catching a 400 error from the PayPal API.

I am making requests to PayPal, when a successful request is made everything works perfectly and I get a lovely response object, which I can work with and action accordingly.

When for instance incorrect card details are entered Laravel throws a 400 error and fails to catch the error for me to action accordingly.

Snippet:

try {
    // ### Create Payment
    // Create a payment by posting to the APIService
    // using a valid ApiContext
    // The return object contains the status;

    $payment->create($this->_apiContext);

//will not catch here :( throws Laravel 400 error! want to redirect with message!
} catch (\PPConnectionException $ex) {
    return Redirect::back()->withErrors([$ex->getMessage() . PHP_EOL]);
}

//if we get an approved payment ! This fires perfectly when succesful!!! woo!!
if($payment->state == 'approved') {
    //if success we hit here fine!!!
} else {
    //won't get here, dies before catch.
}

Here is the error in Laravel debug mode:

enter image description here

When I look in the PayPal API sandbox logs I should be getting a nice object so I can action accordingly.

{
    "status": 400,
    "duration_time": 60,
    "body": {
        "message": "Invalid request. See details.",
        "information_link": "http://ift.tt/1c9EZc1",
        "details": [
            {
                "field": "payer.funding_instruments[0].credit_card.number",
                "issue": "Value is invalid."
            }
        ],
        "name": "VALIDATION_ERROR",
        "debug_id": "XXXXXXXXXXXXXX"
    },
    "additional_properties": {},
    "header": {
        "Date": "Thu, 25 May 2017 14:44:43 GMT",
        "paypal-debug-id": "2f88f18d519c3",
        "APPLICATION_ID": "APP-XXXXXXXXXXXX",
        "Content-Language": "*",
        "CALLER_ACCT_NUM": "XXXXXXXXXXXXX"
    }
}

If any Laravel wizard can help you would be my hero.

Nick.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire