PHPで作るSMS送信API
2020.11.10.火
はじめに
既存のWebシステムにSMS認証を行うご要望をいただいた為、今回TwilioというクラウドコミュニケーションAPIを使用して実装を行いました。
Twilioとは?
Twilioで電話番号取得
まずTwilioでアカウントを作成します。
アカウントを有効にする際、本人身元確認が必要なようです。
TwilioのPHPモジュール「twilio/sdk」をインストールする
対象プロジェクトのディレクトリに移動し、以下のコマンドを実行する。
$ mkdir twilio-php-app
$ cd twilio-php-app
$ composer init --require=twilio/sdk
$ composer install
国際番号に変換するモジュールをインストールする
今回こちらを使用させていただきました。
https://github.com/giggsey/libphonenumber-for-php
$ composer require giggsey/libphonenumber-for-php
PHPサンプルコード
main.php(POST値は適宜サニタイズ処理をしてください)
<?php
//TwilioのアカウントSIDを指定する
$account_sid = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
//TwilioのAUTHTOKENを指定する
$auth_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
//Twilioで購入済の番号を指定する
$twilio_number = "+16xxxxxxxxxx";
//コールバックURL
$statuscallback_url = 'https://your_damain/statuscallback_receive.php';
//Twilioモジュール読み込み
require __DIR__ . '/vendor/autoload.php';
use Twilio\Rest\Client;
$to = $_POST['to'];
$number = $_POST['number'];
//国際番号に変換する
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$obj = $phoneUtil->parse($to, 'JP');
$convert_to = $formatedPhoneNum = $phoneUtil->format($obj, \libphonenumber\PhoneNumberFormat::E164);
$client = new Client($account_sid, $auth_token);
$result = $client->messages->create(
$convert_to,
array(
'from' => $twilio_number,
'body' => "認証コードは次の通りです。{$number}",
'StatusCallback' => $statuscallback_url . '?number=' . $number
)
);
statuscallback_receive.php
<?php
//コールバックURLにPOSTされた値を取得して何かしら処理を行う
$SmsSid = $_POST['SmsSid'];
$SmsStatus = $_POST['SmsStatus'];
$MessageStatus = $_POST['MessageStatus'];
$To = $_POST['To'];
$MessageSid = $_POST['MessageSid'];
$AccountSid = $_POST['AccountSid'];
$From = $_POST['From'];
$ApiVersion = $_POST['ApiVersion'];
まとめ
今回簡単な投稿でしたが、Twilioでのアカウントの身元確認に時間がかかったイメージがあります。
コールバックで受け取った値はデータベースに保存する等でログとして残す事が可能です。
是非試してみてください。