
Teilen Sie:
Software Developer who loves building awesome tools and products. I currently work with Laravel, PHP and Vue.
Stripe SMS-Benachrichtigungen mit Laravel
In diesem Tutorial werden wir eine einfache Anwendung erstellen, die mit Nexmo SMS-Benachrichtigungen sendet, wenn Stripe ein erfolgreiches Ladeereignis sendet.
Stripe sendet verschiedene Webhook-Ereignisse aus, sobald etwas mit Ihrem Account passiert. Manchmal möchten Sie bei einigen dieser Ereignisse, z. B. einem neuen Kauf, sofort benachrichtigt werden, wenn sie eintreten.
Fangen wir an!
Voraussetzungen
Wir werden verwenden Laravel 5.8 in diesem Tutorial und verwenden Composer um alle Abhängigkeiten zu installieren und zu verwalten.
Sie benötigen außerdem einen Account bei Stripe haben, damit wir Test-Webhook-Ereignisse senden können.
Schließlich benötigen Sie noch Ngrok installiert haben, damit die Anwendung, die wir lokal entwickeln werden, über das Web zugänglich ist und wir Webhook-Ereignisse empfangen können.
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.
Laravel einrichten
Wir werden Composer verwenden, um ein neues Laravel-Projekt zu installieren. Verwenden Sie in der Befehlszeile den folgenden Befehl:
Laravel bietet Unterstützung für den Versand von SMS-Benachrichtigungen mit Nexmo. Ab Laravel 5.8 wurde dies jedoch in ein First-Party-Paket extrahiert, so dass wir zunächst dieses Paket mit dem folgenden Befehl einbinden müssen:
Umgebungs- und Konfig-Variablen
Öffnen Sie das Stammverzeichnis Ihres Projekts in Ihrem bevorzugten Editor und bearbeiten Sie die Datei .env Datei, um den Nexmo-API-Schlüssel und die geheimen Anmeldeinformationen hinzuzufügen, die Sie zuvor notiert haben.
Setzen Sie die SMS_FROM Variable auf die zuvor erworbene Nummer (achten Sie darauf, dass sie im E.164-Format).
Wir haben auch eine SMS_TO Variable hinzugefügt, bei der es sich um die Telefonnummer handelt, die die SMS-Benachrichtigung erhält. Sie können diese auf Ihre eigene Nummer setzen.
Als Nächstes werden wir die Umgebungsvariablen, die wir gerade definiert haben, in unserer Konfigurationsdatei referenzieren. Gehen Sie in das config\services Verzeichnis und fügen Sie eine neue Nexmo array.
'nexmo' => [
'key' => env('NEXMO_KEY'),
'secret' => env('NEXMO_SECRET'),
'sms_from' => env('SMS_FROM'),
'sms_to' => env('SMS_TO')
]
Erstellen des Webhook-Endpunkts
Fügen wir den Webhook-Endpunkt hinzu, an den Stripe eine POST Anfrage stellen, wenn eine Aufladung erfolgreich war.
Bearbeiten Sie die routes/api.php um den folgenden Code hinzuzufügen:
Route::post('/stripe/webhook', 'WebhookController@handle'); Erstellen des Webhook-Controllers
Als nächstes erzeugen Sie eine neue WebhookController von der Befehlszeile aus, indem Sie den folgenden Befehl ausführen:
Dadurch wird eine neue WebhookController Datei für uns im App\Http\Controllers Verzeichnis. Bearbeiten Sie die Datei mit dem folgenden Code:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Notification;
use App\Notifications\NewSaleOccurred;
class WebhookController extends Controller
{
public function handle(Request $request)
{
$payload = $request->all();
if($payload['type'] == 'charge.succeeded'){
Notification::route('nexmo', config('services.nexmo.sms_to'))
->notify(new NewSaleOccurred($payload));
}
return response('Webhook received');
}
}
Die Methode handle() Methode auf dem Controller prüft, ob die event die von Stripe gesendet wird, diejenige ist, die wir erwarten, was in diesem Fall das charge.succeeded Ereignis. Dann wird mit On-Demand-Benachrichtigungen über die Notification Facade die Laravel zur Verfügung stellt, eine Benachrichtigung ausgelöst, die gesendet wird.
Der erste Parameter, den die route Methode akzeptiert, ist der Zustellkanal für diese Benachrichtigung, in diesem Fall Nexmo, während der zweite Parameter die Telefonnummer ist, an die wir die SMS-Benachrichtigung senden möchten.
Die Methode notify Methode erhält eine NewSaleOccurred Benachrichtigungsinstanz, die wir als nächstes erstellen werden.
Erstellen der Benachrichtigungsklasse
Führen Sie mit artisan den folgenden Befehl aus:
php artisan make:notification NewSaleOccurredDadurch wird eine neue Benachrichtigungsklasse für uns unter dem App\Notifications Verzeichnis. Bearbeiten Sie die Datei mit dem folgenden Code:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\NexmoMessage;
class NewSaleOccurred extends Notification implements ShouldQueue
{
use Queueable;
public $payload;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($payload)
{
$this->payload = $payload;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['nexmo'];
}
/**
* Get the Nexmo representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\NexmoMessage
*/
public function toNexmo($notifiable)
{
$amount = $this->payload['data']['object']['amount'] / 100;
$message = 'Hello, you just made a sale of $' .$amount. ' in your store';
return (new NexmoMessage())
->content($message);
}
}
Die payload der event von Stripe wird an die constructor dieser Benachrichtigung übergeben. Die via() Methode erhält eine notifiable Instanz, die eine Instanz der Klasse ist, an die die Benachrichtigung gesendet wird, während sie ein Array zurückgibt, das aus den verschiedenen Lieferkanälen besteht, die für diese Benachrichtigung verwendet werden sollen, was in diesem Fall nur Nexmo ist.
Die toNexmo() erhält eine notifiable Entität. Wir erhalten die amount von der payload und dividieren dann durch 100, um von Cents in Dollar umzurechnen. Wir definieren auch die benutzerdefinierte message die wir zusammen mit dem Betrag senden möchten, und geben dann eine Illuminate\Notifications\Messages\NexmoMessage zurück, das den eigentlichen Versand der SMS-Benachrichtigung übernimmt.
Ngrok einrichten
Um zu testen, ob unsere Anwendung wie erwartet funktioniert, müssen wir Ngrok einrichten. Dadurch wird unsere Anwendung öffentlich zugänglich, so dass sie von Stripe erreicht werden kann. Um unsere Anwendung lokal bereitzustellen, führen Sie php artisan serve und führen Sie dann den folgenden Befehl in einem separaten Terminalfenster aus:
Dadurch wird ein neues Terminal erzeugt, das dem untenstehenden ähnelt.
The ngrok terminal
Kopieren Sie die erste forwarding URL, da wir diese für die Konfiguration unseres Stripe-Webhooks verwenden werden.
Handhabung von Stripe-Webhooks
Der nächste Schritt ist die Konfiguration eines Endpunkts in unserem Stripe Account, um Daten an unsere Anwendung zu senden. Rufen Sie Ihr Stripe-Dashboard auf und setzen Sie die Umgebung auf Testmodus so dass wir ein Testevent an unseren Webhook-Endpunkt senden können.
Unter dem Menüpunkt Entwickler > Webhooks Abschnitt, wählen Sie Add Endpoint und konfigurieren Sie ihn dann mit dem ngrok url die Sie zuvor kopiert haben. Die vollständige URL wird wie folgt aussehen, http://6fb4323a.ngrok.io/api/stripe/webhooknur Ihre alphanumerische ID am Anfang der Adresse wird anders sein.
Stripe Webhook Setup
Prüfung
Klicken Sie unter Stripe-Webhook-Einstellungen auf die Schaltfläche Test-Webhook senden Schaltfläche. Dies sendet ein Test charge.succeeded Ereignis an den Webhook-Endpunkt, den wir zuvor hinzugefügt haben.
Sie sollten einen ähnlichen Text wie den folgenden erhalten:
SMS Notification
Schlussfolgerung
Wir haben gesehen, wie wir mit Nexmo sofortige SMS-Benachrichtigungen von Stripe erhalten können. Das ist wichtig, denn so sind wir immer auf dem Laufenden, was in unserer Anwendung passiert.
Es gibt noch andere Szenarien, für die Sie SMS-Benachrichtigungen von Stripe erhalten möchten. Sie können entscheiden, wie Sie diese handhaben möchten, indem Sie sich alle Ereignisse ansehen, die Stripe anbietet, und entscheiden, ob Sie auch über diese benachrichtigt werden möchten.
Dieses Tutorial kann als großartiger Leitfaden für das Hinzufügen weiterer Benachrichtigungen dienen, wenn Sie dies wünschen, und Sie können den gesamten oben aufgeführten Code auf GitHub.
