Payment webhook fixes

This commit is contained in:
Hillel Coren 2016-06-24 15:40:10 +03:00
parent d71017e203
commit 406249ef95
6 changed files with 17 additions and 7 deletions

View File

@ -13,6 +13,7 @@ use Datatable;
use Validator; use Validator;
use Cache; use Cache;
use Redirect; use Redirect;
use Exception;
use App\Models\Gateway; use App\Models\Gateway;
use App\Models\Invitation; use App\Models\Invitation;
use App\Models\Document; use App\Models\Document;

View File

@ -152,6 +152,7 @@ class OnlinePaymentController extends BaseController
$result = $paymentDriver->handleWebHook(Input::all()); $result = $paymentDriver->handleWebHook(Input::all());
return response()->json(['message' => $result]); return response()->json(['message' => $result]);
} catch (Exception $exception) { } catch (Exception $exception) {
Utils::logError($exception->getMessage(), 'PHP');
return response()->json(['message' => $exception->getMessage()], 500); return response()->json(['message' => $exception->getMessage()], 500);
} }
} }

View File

@ -84,7 +84,7 @@ Route::get('/auth_unlink', 'Auth\AuthController@authUnlink');
Route::post('/hook/email_bounced', 'AppController@emailBounced'); Route::post('/hook/email_bounced', 'AppController@emailBounced');
Route::post('/hook/email_opened', 'AppController@emailOpened'); 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 // Laravel auth routes
Route::get('/signup', array('as' => 'signup', 'uses' => 'Auth\AuthController@getRegister')); Route::get('/signup', array('as' => 'signup', 'uses' => 'Auth\AuthController@getRegister'));

View File

@ -154,12 +154,14 @@ class BraintreePaymentDriver extends BasePaymentDriver
public function removePaymentMethod($paymentMethod) public function removePaymentMethod($paymentMethod)
{ {
parent::removePaymentMethod($paymentMethod);
$response = $this->gateway()->deletePaymentMethod([ $response = $this->gateway()->deletePaymentMethod([
'token' => $paymentMethod->source_reference 'token' => $paymentMethod->source_reference
])->send(); ])->send();
if ($response->isSuccessful()) { if ($response->isSuccessful()) {
return parent::removePaymentMethod($paymentMethod); return true;
} else { } else {
throw new Exception($response->getMessage()); throw new Exception($response->getMessage());
} }

View File

@ -179,6 +179,8 @@ class StripePaymentDriver extends BasePaymentDriver
public function removePaymentMethod($paymentMethod) public function removePaymentMethod($paymentMethod)
{ {
parent::removePaymentMethod($paymentMethod);
if ( ! $paymentMethod->relationLoaded('account_gateway_token')) { if ( ! $paymentMethod->relationLoaded('account_gateway_token')) {
$paymentMethod->load('account_gateway_token'); $paymentMethod->load('account_gateway_token');
} }
@ -189,7 +191,7 @@ class StripePaymentDriver extends BasePaymentDriver
])->send(); ])->send();
if ($response->isSuccessful()) { if ($response->isSuccessful()) {
return parent::removePaymentMethod($paymentMethod); return true;
} else { } else {
throw new Exception($response->getMessage()); throw new Exception($response->getMessage());
} }
@ -322,8 +324,10 @@ class StripePaymentDriver extends BasePaymentDriver
$supportedEvents = array( $supportedEvents = array(
'charge.failed', 'charge.failed',
'charge.succeeded', 'charge.succeeded',
'charge.refunded',
'customer.source.updated', 'customer.source.updated',
'customer.source.deleted', 'customer.source.deleted',
'customer.bank_account.deleted',
); );
if (!in_array($eventType, $supportedEvents)) { if (!in_array($eventType, $supportedEvents)) {
@ -345,7 +349,7 @@ class StripePaymentDriver extends BasePaymentDriver
throw new Exception('This is not a pending event'); 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']; $charge = $eventDetails['data']['object'];
$transactionRef = $charge['id']; $transactionRef = $charge['id'];
@ -367,7 +371,7 @@ class StripePaymentDriver extends BasePaymentDriver
} elseif ($eventType == 'charge.refunded') { } elseif ($eventType == 'charge.refunded') {
$payment->recordRefund($charge['amount_refunded'] / 100 - $payment->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']; $source = $eventDetails['data']['object'];
$sourceRef = $source['id']; $sourceRef = $source['id'];
@ -377,7 +381,7 @@ class StripePaymentDriver extends BasePaymentDriver
throw new Exception('Unknown payment method'); throw new Exception('Unknown payment method');
} }
if ($eventType == 'customer.source.deleted') { if ($eventType == 'customer.source.deleted' || $eventType == 'customer.bank_account.deleted') {
$paymentMethod->delete(); $paymentMethod->delete();
} }

View File

@ -165,6 +165,8 @@ class WePayPaymentDriver extends BasePaymentDriver
public function removePaymentMethod($paymentMethod) public function removePaymentMethod($paymentMethod)
{ {
parent::removePaymentMethod($paymentMethod);
$wepay = Utils::setupWePay($this->accountGateway); $wepay = Utils::setupWePay($this->accountGateway);
$response = $wepay->request('/credit_card/delete', [ $response = $wepay->request('/credit_card/delete', [
'client_id' => WEPAY_CLIENT_ID, 'client_id' => WEPAY_CLIENT_ID,
@ -173,7 +175,7 @@ class WePayPaymentDriver extends BasePaymentDriver
]); ]);
if ($response->state == 'deleted') { if ($response->state == 'deleted') {
return parent::removePaymentMethod($paymentMethod); return true;
} else { } else {
throw new Exception(trans('texts.failed_remove_payment_method')); throw new Exception(trans('texts.failed_remove_payment_method'));
} }