
シェア:
Software Developer who loves building awesome tools and products. I currently work with Laravel, PHP and Vue.
Laravelを使ったStripe SMS通知
このチュートリアルでは、Stripeがチャージ成功イベントを送信するたびに、Nexmoを使ってSMS通知を送信するシンプルなアプリケーションを作成します。
ストライプは、アカウントに何か発生すると、様々なWebhookイベントを送信します。新規購入など、これらのイベントが発生した際に即座に通知を受け取りたい場合があります。
始めよう!
前提条件
使用予定 Laravel 5.8を使用し コンポーザーを使用してインストールし、すべての依存関係を管理します。
のアカウントも必要です。 アカウントも必要です。のアカウントも必要です。
最後に Ngrokをインストールして、ローカルで開発するアプリケーションをウェブからアクセスできるようにしておく必要がある。
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Laravelのセットアップ
Composerを使って新しいLaravelプロジェクトをインストールします。コマンドラインから、以下のコマンドを使用します:
Laravelは、Nexmoを使ったSMS通知の送信をサポートしています。しかし、Laravel 5.8以上では、これはファーストパーティパッケージに抽出されているので、まず以下のコマンドを実行して、そのパッケージも取り込む必要があります:
環境変数と設定変数
お好きなエディタでプロジェクトのルートを開き .envファイルを編集して、先ほど説明したNexmo APIキーとシークレットクレデンシャルを追加します。
変数に SMS_FROM変数に先ほど購入した番号を設定する(必ず E.164形式).
また SMS_TO変数も追加しました。これはSMS通知を受け取る電話番号で、自分の番号を設定できます。
次に、先ほど定義した環境変数を設定ファイルから参照する。環境変数を参照するために config\servicesディレクトリに行き、新しいNexmo array.
'nexmo' => [
'key' => env('NEXMO_KEY'),
'secret' => env('NEXMO_SECRET'),
'sms_from' => env('SMS_FROM'),
'sms_to' => env('SMS_TO')
]
Webhookエンドポイントの作成
チャージが成功するたびにStripeがリクエストするWebhookエンドポイントを追加します。 POSTリクエストを追加しましょう。
を編集して routes/api.phpを編集して以下のコードを追加する:
Route::post('/stripe/webhook', 'WebhookController@handle'); Webhookコントローラの作成
次に、次のコマンドを実行して、コマンドラインから新しい WebhookControllerを生成する:
これで WebhookControllerファイルを追加する。 App\Http\Controllersディレクトリに追加されます。そのファイルを以下のコードで編集する:
<?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');
}
}
コントローラ上の handle()メソッドは、Stripeから送信された eventをチェックします。 charge.succeededイベントです。そして、Laravelが提供するNotification Facadeを使って、通知をトリガーします。
メソッドが受け取る最初のパラメータは、この通知の配信チャネルです。 routeメソッドが受け取る最初のパラメータは、この通知の配信チャネルで、この場合はNexmoです。2番目のパラメータは、SMS通知を送信したい電話番号です。
メソッドは notifyメソッドは NewSaleOccurrednotificationインスタンスを受け取ります。
通知クラスの作成
artisanを使って、以下のコマンドを実行する:
php artisan make:notification NewSaleOccurredディレクトリの下に新しい通知クラスが生成されます。 App\Notificationsディレクトリに生成されます。以下のコードでファイルを編集してください:
<?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);
}
}
その payloadの eventに渡されます。 constructorに渡されます。この via()メソッドは notifiableインスタンスを受け取る一方で、この通知に使用する異なる配信チャネルからなる配列を返します。
を受け取ります。 toNexmo()を受け取る。 notifiableエンティティを私たちは amountから payloadから取得し、100で割ってセントからドルに変換します。また、金額と一緒に送りたいカスタム messageを返します。 Illuminate\Notifications\Messages\NexmoMessageを返します。これはSMS通知の実際の送信を処理します。
ングロックのセットアップ
アプリケーションが期待通りに動くかテストするには、Ngrokをセットアップする必要がある。これにより、Stripeからアプリにアクセスできるようになります。アプリケーションをローカルで提供するには php artisan serveを実行し、別のターミナルウィンドウで次のコマンドを実行します:
これで、以下のような新しいターミナルが生成される。
The ngrok terminal
最初の forwardingこれがStripe webhookの設定に使用するURLです。
Stripe Webhookを扱う
次のステップは、アプリケーションにデータを送信するために、Stripeアカウントにエンドポイントを設定することです。Stripeのダッシュボードにアクセスして、環境を テストモードに設定し、Webhookエンドポイントにテストイベントを送信できるようにします。
の下にある 開発者 > ウェブフックセクションで Add Endpointを選択し、先ほどコピーした ngrok urlを使って設定します。完全なURLは次のようになる、 http://6fb4323a.ngrok.io/api/stripe/webhookアドレスの先頭の英数字IDだけが異なります。
Stripe Webhook Setup
テスト
StripeのWebhook設定で テストウェブフックを送信ボタンをクリックします。これでテスト charge.succeededイベントが送信されます。
以下のようなテキストが届くはずです:
SMS Notification
結論
Nexmoを使ってStripeから即座にSMS通知を受け取る方法を見てきました。これは重要なことで、アプリケーションで何が起きているのか常に最新情報を得ることができます。
StripeからSMS通知を受け取りたいシナリオは他にもあり、Stripeが提供するすべてのイベントを見て、それらについてもアラートを出すかどうかを決めることで、どのように処理するかを決めることができます。
このチュートリアルは、より多くの通知を追加するための素晴らしいスタートガイドとして役立ちます。 GitHub.
