60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers\Webhook;
 | 
						|
 | 
						|
use App\Http\Controllers\Controller;
 | 
						|
use App\Jobs\StripeProcessJob;
 | 
						|
use App\Models\Webhook;
 | 
						|
use Exception;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Support\Facades\Storage;
 | 
						|
 | 
						|
class Stripe extends Controller
 | 
						|
{
 | 
						|
    protected $webhook;
 | 
						|
 | 
						|
    public function events(Request $request)
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $webhookSecret = config('subscription.stripe_webhook_secret');
 | 
						|
            $signature = $request->header('Stripe-Signature');
 | 
						|
            $event = \Stripe\Webhook::constructEvent(
 | 
						|
                $request->getContent(),
 | 
						|
                $signature,
 | 
						|
                $webhookSecret
 | 
						|
            );
 | 
						|
            if (app()->isDownForMaintenance()) {
 | 
						|
                $epoch = now()->valueOf();
 | 
						|
                $data = [
 | 
						|
                    'attributes' => $request->attributes->all(),
 | 
						|
                    'request' => $request->request->all(),
 | 
						|
                    'query' => $request->query->all(),
 | 
						|
                    'server' => $request->server->all(),
 | 
						|
                    'files' => $request->files->all(),
 | 
						|
                    'cookies' => $request->cookies->all(),
 | 
						|
                    'headers' => $request->headers->all(),
 | 
						|
                    'content' => $request->getContent(),
 | 
						|
                ];
 | 
						|
                $json = json_encode($data);
 | 
						|
                Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Stripe::events_stripe", $json);
 | 
						|
 | 
						|
                return response('Webhook received. Cool cool cool cool cool.', 200);
 | 
						|
            }
 | 
						|
            $this->webhook = Webhook::create([
 | 
						|
                'type' => 'stripe',
 | 
						|
                'payload' => $request->getContent(),
 | 
						|
            ]);
 | 
						|
            StripeProcessJob::dispatch($event);
 | 
						|
 | 
						|
            return response('Webhook received. Cool cool cool cool cool.', 200);
 | 
						|
        } catch (Exception $e) {
 | 
						|
            $this->webhook->update([
 | 
						|
                'status' => 'failed',
 | 
						|
                'failure_reason' => $e->getMessage(),
 | 
						|
            ]);
 | 
						|
 | 
						|
            return response($e->getMessage(), 400);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |