diff --git a/app/Http/Controllers/ClientPortalController.php b/app/Http/Controllers/ClientPortalController.php index 094db34c11e6..5962a3ce4cbf 100644 --- a/app/Http/Controllers/ClientPortalController.php +++ b/app/Http/Controllers/ClientPortalController.php @@ -13,6 +13,7 @@ use Datatable; use Validator; use Cache; use Redirect; +use Exception; use App\Models\Gateway; use App\Models\Invitation; use App\Models\Document; diff --git a/app/Http/Controllers/OnlinePaymentController.php b/app/Http/Controllers/OnlinePaymentController.php index 6b31f3378a07..1df96990a873 100644 --- a/app/Http/Controllers/OnlinePaymentController.php +++ b/app/Http/Controllers/OnlinePaymentController.php @@ -152,6 +152,7 @@ class OnlinePaymentController extends BaseController $result = $paymentDriver->handleWebHook(Input::all()); return response()->json(['message' => $result]); } catch (Exception $exception) { + Utils::logError($exception->getMessage(), 'PHP'); return response()->json(['message' => $exception->getMessage()], 500); } } diff --git a/app/Http/routes.php b/app/Http/routes.php index 97c5d3f1a0db..094c1f7c58e8 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -84,7 +84,7 @@ Route::get('/auth_unlink', 'Auth\AuthController@authUnlink'); Route::post('/hook/email_bounced', 'AppController@emailBounced'); Route::post('/hook/email_opened', 'AppController@emailOpened'); -Route::post('/payment_hook/{accountKey}/{gatewayId}', 'PaymentController@handlePaymentWebhook'); +Route::post('/payment_hook/{accountKey}/{gatewayId}', 'OnlinePaymentController@handlePaymentWebhook'); // Laravel auth routes Route::get('/signup', array('as' => 'signup', 'uses' => 'Auth\AuthController@getRegister')); diff --git a/app/Ninja/PaymentDrivers/BraintreePaymentDriver.php b/app/Ninja/PaymentDrivers/BraintreePaymentDriver.php index dae0e1bfad6c..f68740726de1 100644 --- a/app/Ninja/PaymentDrivers/BraintreePaymentDriver.php +++ b/app/Ninja/PaymentDrivers/BraintreePaymentDriver.php @@ -154,12 +154,14 @@ class BraintreePaymentDriver extends BasePaymentDriver public function removePaymentMethod($paymentMethod) { + parent::removePaymentMethod($paymentMethod); + $response = $this->gateway()->deletePaymentMethod([ 'token' => $paymentMethod->source_reference ])->send(); if ($response->isSuccessful()) { - return parent::removePaymentMethod($paymentMethod); + return true; } else { throw new Exception($response->getMessage()); } diff --git a/app/Ninja/PaymentDrivers/StripePaymentDriver.php b/app/Ninja/PaymentDrivers/StripePaymentDriver.php index 3e734cbdd04d..6f7c322bbb5d 100644 --- a/app/Ninja/PaymentDrivers/StripePaymentDriver.php +++ b/app/Ninja/PaymentDrivers/StripePaymentDriver.php @@ -179,6 +179,8 @@ class StripePaymentDriver extends BasePaymentDriver public function removePaymentMethod($paymentMethod) { + parent::removePaymentMethod($paymentMethod); + if ( ! $paymentMethod->relationLoaded('account_gateway_token')) { $paymentMethod->load('account_gateway_token'); } @@ -189,7 +191,7 @@ class StripePaymentDriver extends BasePaymentDriver ])->send(); if ($response->isSuccessful()) { - return parent::removePaymentMethod($paymentMethod); + return true; } else { throw new Exception($response->getMessage()); } @@ -322,8 +324,10 @@ class StripePaymentDriver extends BasePaymentDriver $supportedEvents = array( 'charge.failed', 'charge.succeeded', + 'charge.refunded', 'customer.source.updated', 'customer.source.deleted', + 'customer.bank_account.deleted', ); if (!in_array($eventType, $supportedEvents)) { @@ -345,7 +349,7 @@ class StripePaymentDriver extends BasePaymentDriver throw new Exception('This is not a pending event'); } - if ($eventType == 'charge.failed' || $eventType == 'charge.succeeded') { + if ($eventType == 'charge.failed' || $eventType == 'charge.succeeded' || $eventType == 'charge.refunded') { $charge = $eventDetails['data']['object']; $transactionRef = $charge['id']; @@ -367,7 +371,7 @@ class StripePaymentDriver extends BasePaymentDriver } elseif ($eventType == 'charge.refunded') { $payment->recordRefund($charge['amount_refunded'] / 100 - $payment->refunded); } - } elseif($eventType == 'customer.source.updated' || $eventType == 'customer.source.deleted') { + } elseif($eventType == 'customer.source.updated' || $eventType == 'customer.source.deleted' || $eventType == 'customer.bank_account.deleted') { $source = $eventDetails['data']['object']; $sourceRef = $source['id']; @@ -377,7 +381,7 @@ class StripePaymentDriver extends BasePaymentDriver throw new Exception('Unknown payment method'); } - if ($eventType == 'customer.source.deleted') { + if ($eventType == 'customer.source.deleted' || $eventType == 'customer.bank_account.deleted') { $paymentMethod->delete(); } diff --git a/app/Ninja/PaymentDrivers/WePayPaymentDriver.php b/app/Ninja/PaymentDrivers/WePayPaymentDriver.php index fbef7798ac71..f98dc79446ec 100644 --- a/app/Ninja/PaymentDrivers/WePayPaymentDriver.php +++ b/app/Ninja/PaymentDrivers/WePayPaymentDriver.php @@ -165,6 +165,8 @@ class WePayPaymentDriver extends BasePaymentDriver public function removePaymentMethod($paymentMethod) { + parent::removePaymentMethod($paymentMethod); + $wepay = Utils::setupWePay($this->accountGateway); $response = $wepay->request('/credit_card/delete', [ 'client_id' => WEPAY_CLIENT_ID, @@ -173,7 +175,7 @@ class WePayPaymentDriver extends BasePaymentDriver ]); if ($response->state == 'deleted') { - return parent::removePaymentMethod($paymentMethod); + return true; } else { throw new Exception(trans('texts.failed_remove_payment_method')); }