Add event to process webhook payments
This commit is contained in:
parent
12b63a506f
commit
c1bb20dec0
40
app/Events/ProviderPaymentCreated.php
Normal file
40
app/Events/ProviderPaymentCreated.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class ProviderPaymentCreated
|
||||
{
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public array $paymentData;
|
||||
public string $provider;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(string $provider,array $paymentData)
|
||||
{
|
||||
$this->provider = $provider;
|
||||
$this->paymentData = $paymentData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return \Illuminate\Broadcasting\Channel|array
|
||||
*/
|
||||
public function broadcastOn()
|
||||
{
|
||||
return new PrivateChannel('channel-name');
|
||||
}
|
||||
}
|
@ -9,9 +9,10 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\Config;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
use App\Models\{Account,Invoice,Payment,PaymentItem,ProviderToken};
|
||||
use App\Models\{Account,Invoice,Payment,PaymentItem,ProviderToken,Site};
|
||||
use Intuit\Models\Payment as PaymentModel;
|
||||
|
||||
/**
|
||||
@ -49,6 +50,10 @@ class AccountingPaymentSync implements ShouldQueue
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
// @todo Can this be automatically determined?
|
||||
$site = Site::findOrFail($this->to->site_id);
|
||||
Config::set('site',$site);
|
||||
|
||||
// See if we are already linked
|
||||
if (($x=$this->to->provider->payments->where('pivot.ref',$this->pmi->id))->count() === 1) {
|
||||
$o = $x->pop();
|
||||
|
40
app/Listeners/ProviderPaymentCreated.php
Normal file
40
app/Listeners/ProviderPaymentCreated.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Support\Facades\Config;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
use App\Events\ProviderPaymentCreated as Event;
|
||||
use App\Jobs\AccountingPaymentSync as Job;
|
||||
use App\Models\{ProviderOauth,Site,User};
|
||||
|
||||
class ProviderPaymentCreated
|
||||
{
|
||||
private const LOGKEY = 'LPC';
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param Event $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Event $event)
|
||||
{
|
||||
$site = Site::findOrFail(1); // @todo This shouldnt be hard coded
|
||||
Config::set('site',$site);
|
||||
|
||||
$uo = User::findOrFail(1); // @todo This shouldnt be hard coded
|
||||
|
||||
$so = ProviderOauth::where('name',$event->provider)->singleOrFail();
|
||||
if (! ($to=$so->token($uo)))
|
||||
abort(500,sprintf('Unknown Tokens for [%s]',$uo->email));
|
||||
|
||||
$api = $to->API();
|
||||
$acc = $api->getPayment($event->paymentData['id']);
|
||||
|
||||
Job::dispatch($to,$acc);
|
||||
}
|
||||
}
|
@ -21,7 +21,8 @@ class SiteScope implements Scope
|
||||
! collect($builder->getQuery()->wheres)->pluck('column')->contains(function($item) { return preg_match('/^(.*[^.]\.)?site_id/',$item); }),
|
||||
function($q) use ($model)
|
||||
{
|
||||
return $q->where($model->getTable().'.site_id',config('site')->site_id);
|
||||
// @todo Remove this override "?? 1" it was put in place to retry failed AccountingPaymentSync
|
||||
return $q->where($model->getTable().'.site_id',config('site')->site_id ?? 1);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ namespace App\Providers;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
|
||||
use App\Listeners\ProviderPaymentCreated;
|
||||
|
||||
class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
@ -16,6 +18,10 @@ class EventServiceProvider extends ServiceProvider
|
||||
'Illuminate\Mail\Events\MessageSent' => [
|
||||
'App\Listeners\LogSentMessage',
|
||||
],
|
||||
|
||||
\App\Events\ProviderPaymentCreated::class => [
|
||||
ProviderPaymentCreated::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
|
6
composer.lock
generated
6
composer.lock
generated
@ -3681,11 +3681,11 @@
|
||||
},
|
||||
{
|
||||
"name": "leenooks/intuit",
|
||||
"version": "0.1.5",
|
||||
"version": "0.1.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://dev.dege.au/leenooks/intuit",
|
||||
"reference": "dd8250900895daf911230db10177e40a98530f9f"
|
||||
"reference": "600dfec536041b318f3a496da9e42f8fb8d02b64"
|
||||
},
|
||||
"require": {
|
||||
"jenssegers/model": "^1.5"
|
||||
@ -3715,7 +3715,7 @@
|
||||
"laravel",
|
||||
"leenooks"
|
||||
],
|
||||
"time": "2023-05-13T11:58:49+00:00"
|
||||
"time": "2023-05-13T13:46:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "leenooks/laravel",
|
||||
|
Loading…
Reference in New Issue
Block a user