Laravel
AWS 문자서비스(SNS) 연동
짱구를왜말려?
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