-
AWS 문자서비스(SNS) 연동Laravel 2020. 3. 25. 17:57반응형SMALL
1. 설치 및 세팅
@ composer.json
composer require aws/aws-sdk-php-laravel
@ config/app.php
'providers' => array( // ... Aws\Laravel\AwsServiceProvider::class, ) => 버전 8 기준으로는 이거 안해도 되는듯
'aliases' => array( // ... 'AWS' => Aws\Laravel\AwsFacade::class, )
@ env에 다음 값들 세팅
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=
php artisan vendor:publish --provider="Aws\Laravel\AwsServiceProvider"
@ aws.php의 AWS_REGION을 AWS_DEFAULT_REGION으로 바꿔놓기
2. AWS sns 서비스 신청
1) sns 주제 생성(이 때 화면 오른쪽 위 region을 tokyo로 해놔야돼, 서울 지원안함)
2) 한도 추가 요청 미리 보내놓기(샌드박스 해제)
-> 이거 해야만 문자 보낼 수 있어, 안그러면 문자가 안가
-> 처음부터 10000$ 이렇게 요청하면 정지당하니까 400$정도로 요청
(support history 참고해)
-> 한도 추가되면 계정지출한도 늘려야돼(안그러면 메세지 몇개 못보내)
3) 기존 IAM 계정에 AmazonSNSFullAccess 권한 주기
4) Simple Queue Service 설정
- 대기열 이름을 [프로젝트명_용도]처럼 지어
(habito_verification)
- 표준 대기열(Standard Queue)로 대기열 빠른 생성
- 만든 대기열 클릭 후 "작업" > "Amazon SNS 주제 구독" 클릭 후 아까 만든 주제 연결
5) 실제 테스트해보기
@ .env
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION= AWS_BUCKET=
@web.php
Route::get('/', function () { $snsClient = new \Aws\Sns\SnsClient([ "region" => "ap-northeast-1", "version" => "2010-03-31", ]); $message = "테스트"; $phone = "+8201030254488"; // 한국은 앞에 +82 붙여야돼 if (!$result = $snsClient->checkIfPhoneNumberIsOptedOut(['phoneNumber' => $phone])) { // 번호확인 실패 return; } if ($result['isOptedOut']) { // 잘못된 번호 맞다면 return; } return $snsClient->publish([ 'Message' => $message, 'PhoneNumber' => $phone ]); });
3. SMS 클래스로 만들어놓기
@ SMS.php
<?php namespace App\Models; use Aws\Sns\SnsClient; class SMS { protected $client; public function __construct() { $this->client = new \Aws\Sns\SnsClient([ "region" => "ap-northeast-1", "version" => "2010-03-31", ]); } public function send($to, $message) { if (!$result = $this->client->checkIfPhoneNumberIsOptedOut(['phoneNumber' => $to])) { // 번호확인 실패 return; } if ($result['isOptedOut']) { // 잘못된 번호 맞다면 return; } return $this->client->publish([ "Message" => $message, "PhoneNumber" => $to ]); } }
LIST'Laravel' 카테고리의 다른 글
이미지 다루기 with 미디어 라이브러리(Media Library) + S3 (0) 2020.04.21 API Resource, Collection (0) 2020.03.27 라라벨 + 리액트 타입스크립트(typescript) (0) 2020.03.26 아이디 기반을 이메일에서 폰번호나 닉네임으로 바꾸는법 (0) 2020.03.26 Sanctum(spa login, auth) (0) 2020.03.26