https://a.storyblok.com/f/270183/294895/646296e546/unnamed.png

Laravelを使ったStripe SMS通知

最終更新日 November 5, 2020

所要時間:5 分

このチュートリアルでは、Stripeがチャージ成功イベントを送信するたびに、Nexmoを使ってSMS通知を送信するシンプルなアプリケーションを作成します。

ストライプは、アカウントに何か発生すると、様々なWebhookイベントを送信します。新規購入など、これらのイベントが発生した際に即座に通知を受け取りたい場合があります。

始めよう!

前提条件

使用予定 Laravel 5.8を使用し コンポーザーを使用してインストールし、すべての依存関係を管理します。

のアカウントも必要です。 アカウントも必要です。のアカウントも必要です。

最後に Ngrokをインストールして、ローカルで開発するアプリケーションをウェブからアクセスできるようにしておく必要がある。

Laravelのセットアップ

Composerを使って新しいLaravelプロジェクトをインストールします。コマンドラインから、以下のコマンドを使用します:

composer create-project --prefer-dist laravel/laravel nexmo-stripe

Laravelは、Nexmoを使ったSMS通知の送信をサポートしています。しかし、Laravel 5.8以上では、これはファーストパーティパッケージに抽出されているので、まず以下のコマンドを実行して、そのパッケージも取り込む必要があります:

composer require laravel/nexmo-notification-channel

環境変数と設定変数

お好きなエディタでプロジェクトのルートを開き .envファイルを編集して、先ほど説明したNexmo APIキーとシークレットクレデンシャルを追加します。

NEXMO_KEY = xxxx NEXMO_SECRET = xxxx SMS_FROM = xxxx SMS_TO = xxxx

変数に 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を生成する:

php artisan make:controller 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);
    }

}

その payloadeventに渡されます。 constructorに渡されます。この via()メソッドは notifiableインスタンスを受け取る一方で、この通知に使用する異なる配信チャネルからなる配列を返します。

を受け取ります。 toNexmo()を受け取る。 notifiableエンティティを私たちは amountから payloadから取得し、100で割ってセントからドルに変換します。また、金額と一緒に送りたいカスタム messageを返します。 Illuminate\Notifications\Messages\NexmoMessageを返します。これはSMS通知の実際の送信を処理します。

ングロックのセットアップ

アプリケーションが期待通りに動くかテストするには、Ngrokをセットアップする必要がある。これにより、Stripeからアプリにアクセスできるようになります。アプリケーションをローカルで提供するには php artisan serveを実行し、別のターミナルウィンドウで次のコマンドを実行します:

ngrok http 8000

これで、以下のような新しいターミナルが生成される。

The ngrok terminalThe 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 SetupStripe Webhook Setup

テスト

StripeのWebhook設定で テストウェブフックを送信ボタンをクリックします。これでテスト charge.succeededイベントが送信されます。

以下のようなテキストが届くはずです:

SMS NotificationSMS Notification

結論

Nexmoを使ってStripeから即座にSMS通知を受け取る方法を見てきました。これは重要なことで、アプリケーションで何が起きているのか常に最新情報を得ることができます。

StripeからSMS通知を受け取りたいシナリオは他にもあり、Stripeが提供するすべてのイベントを見て、それらについてもアラートを出すかどうかを決めることで、どのように処理するかを決めることができます。

このチュートリアルは、より多くの通知を追加するための素晴らしいスタートガイドとして役立ちます。 GitHub.

シェア:

https://a.storyblok.com/f/270183/250x250/d288ec8a73/dotun.png
Dotun Jolaoso

Software Developer who loves building awesome tools and products. I currently work with Laravel, PHP and Vue.