【PHP】artisanコマンドとAWSを使ってスマホにSMSを送る
すっごく苦戦したので記事にします!!!笑
ちなみに僕が躓いたポイントは
<Error> <Type>Sender</Type> <Code>InvalidClie (truncated...) InvalidClientTokenId (client): The security token included in the request is invalid. - <ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/"> <Error> <Type>Sender</Type> <Code>InvalidClientTokenId</Code> <Message>The security token included in the request is invalid.</Message> </Error>
でした・・・。
以下のコマンドをはたきます。
$ composer require aws/aws-sdk-php-laravel
aws-sdk-php-laravelが入るので、「./config/app.php」に以下を追加してあげます。
'providers' => [ Aws\Laravel\AwsServiceProvider::class, ],
おそらく、providersはすでに定義されているはずなので、1行追加するだけですね!
次にartisanコマンドをベシっと。
$ php artisan vendor:publish --provider="Aws\Laravel\AwsServiceProvider"
すると今度は「./config/aws.php」というファイルができるはずなので、そこに以下を追記します。
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
],
次にこの実装の中核とも言えるSMSを送信する部分を書きます。
「./app/console/commands/SendSms.php」
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use AWS;
class SendSms extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'send:sms {phonenum} {body}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send SMS';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$phonenum = $this->argument('phonenum');
$body = $this->argument('body');
$sns = AWS::createClient('Sns');
$sns->publish(['Message' => $body, 'PhoneNumber' => $phonenum]);
}
}
肝は「protected $signature = ‘send:sms {phonenum} {body}’;」ですね。
コマンド実行時に引数で電話番号と本文を渡せるようにしています。
必須にしたかったので引数は必須で実装しています(だってSMSに宛先や本文がなかったら事件ですよね)。
最後に「./.env」ファイルに「AWS_ACCESS_KEY_ID」と「AWS_SECRET_ACCESS_KEY」を記入します。
ちなみに僕が403を食らっていた理由は、同僚がすでにAWS_ACCESS_KEY_IDを.envで定義していたからでした・・・。
末尾に追記した僕のアクセスキーではなく、ファイルの中断にあった友人のアクセスキーが読まれていたという、なんとも童貞臭いミスでした・・・。インフラチームごめんよ・・・。
なので、特に宗教上の理由がなかったら「aws.php」の定義も「.env」ファイルも
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID_FOR_SNS'),
'secret' => env('AWS_SECRET_ACCESS_KEY_FOR_SNS'),
],
とかにしておくことを心のそこからおすすめします。
一般常識レベルですが念のため。
「.env」ファイルでアクセスキーを記載する際はクォーテーションなどは不要なので注意を。
アクセスキーとシークレットアクセスキーはAWSのIAMから取得してくだされ。
php artisan send:sms +819012345678 テストだよ
※電話番号はダミーの番号です。必ずご自身の番号で疎通テストをしてください。mokabuu.comでは一切の責任を負いかねます。

やったね!
[adsense]









