ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.