GoCardless offline instant bank payments

This commit is contained in:
David Bomba 2022-11-07 15:06:16 +11:00
parent b5d4f83654
commit 63657fbc0d

View File

@ -16,6 +16,7 @@ use App\Http\Requests\Payments\PaymentWebhookRequest;
use App\Jobs\Util\SystemLogger; use App\Jobs\Util\SystemLogger;
use App\Models\ClientGatewayToken; use App\Models\ClientGatewayToken;
use App\Models\GatewayType; use App\Models\GatewayType;
use App\Models\Invoice;
use App\Models\Payment; use App\Models\Payment;
use App\Models\PaymentHash; use App\Models\PaymentHash;
use App\Models\PaymentType; use App\Models\PaymentType;
@ -286,7 +287,7 @@ class GoCardlessPaymentDriver extends BaseDriver
$hash = PaymentHash::whereJsonContains('data->billing_request', $event['links']['billing_request'])->first(); $hash = PaymentHash::whereJsonContains('data->billing_request', $event['links']['billing_request'])->first();
if(!$hash){ if(!$hash){
nlog("GoCardless couldn't find a hash, need to abort => Billing Request => " . $event['links']['billing_request']); nlog("GoCardless: couldn't find a hash, need to abort => Billing Request => " . $event['links']['billing_request']);
return; return;
} }
@ -300,10 +301,39 @@ class GoCardlessPaymentDriver extends BaseDriver
$billing_request->payment_request->links->payment $billing_request->payment_request->links->payment
); );
if ($billing_request->status === 'fulfilled') { if ($billing_request->status === 'fulfilled') {
$this->processSuccessfulPayment($payment);
$invoices = Invoice::whereIn('id', $this->transformKeys(array_column($hash->invoices(), 'invoice_id')))->withTrashed()->get();
$this->go_cardless->client = $invoices->first()->client;
$invoices->each(function ($invoice){
//if payments exist already, they just need to be confirmed.
if($invoice->payments()->exists){
$invoice->payments()->where('status_id', 1)->cursor()->each(function ($payment){
$payment->status_id = 4;
$payment->save();
});
}
});
// remove all paid invoices
$invoices->filter(function ($invoice){
return $invoice->isPayable();
});
//return early if nothing to do
if($invoices->count() == 0){
nlog("GoCardless: Could not harvest any invoices - probably all paid!!");
return;
} }
$this->processSuccessfulPayment($payment);
}
} }
} }