mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-08 13:34:29 -04:00
Added webhooks and changed default BACS state to unauthorzied
This commit is contained in:
parent
d5397a2954
commit
f14131b494
@ -169,7 +169,7 @@ class BACS
|
|||||||
$payment_meta = new \stdClass;
|
$payment_meta = new \stdClass;
|
||||||
$payment_meta->brand = (string) $method->bacs_debit->sort_code;
|
$payment_meta->brand = (string) $method->bacs_debit->sort_code;
|
||||||
$payment_meta->last4 = (string) $method->bacs_debit->last4;
|
$payment_meta->last4 = (string) $method->bacs_debit->last4;
|
||||||
$payment_meta->state = 'authorized';
|
$payment_meta->state = 'unauthorized';
|
||||||
$payment_meta->type = GatewayType::BACS;
|
$payment_meta->type = GatewayType::BACS;
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
|
@ -97,7 +97,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
|
|
||||||
if(isset($this->stripe_request['object']['charges']) && optional($this->stripe_request['object']['charges']['data'][0])['id'])
|
if(isset($this->stripe_request['object']['charges']) && optional($this->stripe_request['object']['charges']['data'][0])['id'])
|
||||||
$charge_id = $this->stripe_request['object']['charges']['data'][0]['id']; // API VERSION 2018
|
$charge_id = $this->stripe_request['object']['charges']['data'][0]['id']; // API VERSION 2018
|
||||||
elseif (isset($this->stripe_request['object']['latest_charge']))
|
elseif (isset($this->stripe_request['object']['latest_charge']))
|
||||||
$charge_id = $this->stripe_request['object']['latest_charge']; // API VERSION 2022-11-15
|
$charge_id = $this->stripe_request['object']['latest_charge']; // API VERSION 2022-11-15
|
||||||
|
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
|
|
||||||
//return early
|
//return early
|
||||||
if($payment && $payment->status_id == Payment::STATUS_COMPLETED){
|
if($payment && $payment->status_id == Payment::STATUS_COMPLETED){
|
||||||
nlog(" payment found and status correct - returning ");
|
nlog(" payment found and status correct - returning ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
elseif($payment){
|
elseif($payment){
|
||||||
@ -196,6 +196,9 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
|
|
||||||
$this->updateAchPayment($payment_hash, $client, $meta);
|
$this->updateAchPayment($payment_hash, $client, $meta);
|
||||||
}
|
}
|
||||||
|
elseif(isset($pi['payment_method_types']) && in_array('bacs_debit', $pi['payment_method_types'])){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +219,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
'transaction_reference' => $meta['transaction_reference'],
|
'transaction_reference' => $meta['transaction_reference'],
|
||||||
'gateway_type_id' => GatewayType::BANK_TRANSFER,
|
'gateway_type_id' => GatewayType::BANK_TRANSFER,
|
||||||
];
|
];
|
||||||
|
|
||||||
$payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
|
$payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
|
||||||
|
|
||||||
SystemLogger::dispatch(
|
SystemLogger::dispatch(
|
||||||
@ -265,7 +268,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
$driver->storeGatewayToken($data, $additional_data);
|
$driver->storeGatewayToken($data, $additional_data);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(\Exception $e){
|
catch(\Exception $e){
|
||||||
nlog("failed to import payment methods");
|
nlog("failed to import payment methods");
|
||||||
@ -291,7 +294,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
// 'transaction_reference' => $meta['transaction_reference'],
|
// 'transaction_reference' => $meta['transaction_reference'],
|
||||||
// 'gateway_type_id' => GatewayType::CREDIT_CARD,
|
// 'gateway_type_id' => GatewayType::CREDIT_CARD,
|
||||||
// ];
|
// ];
|
||||||
|
|
||||||
// $payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
|
// $payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
|
||||||
|
|
||||||
// SystemLogger::dispatch(
|
// SystemLogger::dispatch(
|
||||||
@ -324,7 +327,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
'transaction_reference' => $meta['transaction_reference'],
|
'transaction_reference' => $meta['transaction_reference'],
|
||||||
'gateway_type_id' => GatewayType::CREDIT_CARD,
|
'gateway_type_id' => GatewayType::CREDIT_CARD,
|
||||||
];
|
];
|
||||||
|
|
||||||
$payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
|
$payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
|
||||||
|
|
||||||
SystemLogger::dispatch(
|
SystemLogger::dispatch(
|
||||||
@ -338,4 +341,4 @@ class PaymentIntentWebhook implements ShouldQueue
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -715,11 +715,53 @@ class StripePaymentDriver extends BaseDriver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif ($request->type === "payment_method.automatically_updated"){
|
} elseif ($request->type === "payment_method.automatically_updated"){
|
||||||
|
// Will notify customer on updated information
|
||||||
return response()->json([], 200);
|
return response()->json([], 200);
|
||||||
} elseif ($request->type === "checkout.session.completed"){
|
} elseif ($request->type === "checkout.session.completed"){
|
||||||
return response()->json([], 200);
|
// Store payment token for Stripe BACS
|
||||||
} elseif ($request->type === "mandate.updated"){
|
try {
|
||||||
|
$setup_intent = $this->stripe->stripe->setupIntents->retrieve($request->data->setup_inent, []);
|
||||||
|
$customer = $this->stripe->findOrCreateCustomer();
|
||||||
|
$this->stripe->attach($setup_intent->payment_method, $customer);
|
||||||
|
$payment_method = $this->stripe->getStripePaymentMethod($setup_intent->payment_method);
|
||||||
|
$payment_meta = new \stdClass;
|
||||||
|
$payment_meta->brand = (string) $payment_method->bacs_debit->sort_code;
|
||||||
|
$payment_meta->last4 = (string) $payment_method->bacs_debit->last4;
|
||||||
|
$payment_meta->state = 'unauthorized';
|
||||||
|
$payment_meta->type = GatewayType::BACS;
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'payment_meta' => $payment_meta,
|
||||||
|
'token' => $payment_method->id,
|
||||||
|
'payment_method_id' => GatewayType::BACS,
|
||||||
|
];
|
||||||
|
$this->stripe->storeGatewayToken($data, ['gateway_customer_reference' => $customer->id]);
|
||||||
|
return response()->json([], 200);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return $this->stripe->processInternallyFailedPayment($this->stripe, $e);
|
||||||
|
}
|
||||||
|
} elseif ($request->type === "mandate.updated"){
|
||||||
|
// Check if payment method BACS is still valid
|
||||||
|
if ($request->data->status === "active"){
|
||||||
|
// Check if payment method exists
|
||||||
|
$clientgateway = ClientGatewayToken::query()
|
||||||
|
->where('token', $request->data->payment_method)
|
||||||
|
->first();
|
||||||
|
if ($clientgateway){
|
||||||
|
$clientgateway->state = "authorized";
|
||||||
|
$clientgateway->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif ($request->data->status === "inactive"){
|
||||||
|
// Deactivate payment method
|
||||||
|
$clientgateway = ClientGatewayToken::query()
|
||||||
|
->where('token', $request->data->payment_method)
|
||||||
|
->first();
|
||||||
|
$clientgateway->delete();
|
||||||
|
}
|
||||||
|
elseif ($request->data->status === "pending"){
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
return response()->json([], 200);
|
return response()->json([], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user