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 Cache;
use Redirect;
use Exception;
use App\Models\Gateway;
use App\Models\Invitation;
use App\Models\Document;

View File

@ -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);
}
}

View File

@ -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'));

View File

@ -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());
}

View File

@ -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();
}

View File

@ -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'));
}