IT/PHP

[Laravel] 단순 API 샘플 (curl, post, get)

월공 2021. 9. 16. 08:50
728x90
300x250

카카오 알림톡 전송 api 를 개발하면서 라라벨로 작업 진행했습니다.

라라벨에 대한 개념이 아직 많이 부족해서 , 심플하지만 그래도 해보는게 중요한거같아서 진행했구요.

메시징 서비스 전문업체에게 전송해야하는 url 과 ,id, passwd, api 키를 발급받고 진행한거라 어려운점은 없었습니다.

 

제가 한건 아니지만 C 단에서도 해당 api 전송하는 부분이 개발작업이 진행되었었는데, 기본이 아스키코드인데 utf-8 로 전환을 안해줘서 암만 전송성공이떠도 카톡 메시지가 안오는 문제가 있어서 삽질좀 했었네요 ㅡ,.ㅡ ;

 

/routes/api.php

Route::prefix('/v1/')->group(function () {
    Route::post('report', [InfoController::class, 'create'])->name('info.create');
    Route::get('send', [InfoController::class, 'send'])->name('info.send');    
});

Route::fallback(function () {
    return "유효한 값이 아닙니다.";
});

호출하는 url 은 http://example.com/api/v1/send 방식으로 됩니다. 

 

컨트롤러 파일은 기존에 있는 컨트롤러 복사해서 직접 만들어줘도되고, 아래처럼 입력해서 만들어줘도됩니다.

php artisan make:controller InfoController

 

/app/Http/Controllers/InfoController.php

 

POST 로 api 호출하여 발송하는 부분

public function send(Request $request)
    {		
        //post body Data
        $post = [
            .... 생략
        ];

        $headers[] = 'X-IB-Client-Id: 발급받은ID';
        $headers[] = 'X-IB-Client-Passwd: 발급받은PASSWD';
        $headers[] = 'Content-Type: application/json;charset=UTF-8';
        $headers[] = 'Authorization: bearer 인증키';
        $headers[] = 'Accept: application/json';

        $ch = curl_init("전송 URL");

        // SSL important
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        
        curl_setopt($ch, CURLOPT_POST, 1);                              //post
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));       //파라미터 값
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);                    //return 값 반환 
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);                 //헤더
        curl_setopt($ch, CURLOPT_VERBOSE, true);                        //디버깅
        //curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);               //데이터 전달 형태
        //curl_setopt($ch, CURLOPT_COOKIE, 'token= ***** ');            //로그인 인증

        $output = curl_exec($ch);

        dd($output);
    }


리포트 api 가져오는 부분

* 위처럼 발송하고나면 메시징업체측에 전달이 성공된거라, 정확한 메시지 정상수신여부는 알수가없습니다.

그래서 메시징업체측에서 저희쪽으로 전송결과를 푸시api (GET 방식)로 보내준다해서 url 과 포트를 전달하였습니다. ( http -> 80 , https -> 443)

 

전송결과를 정상적으로 받았다면 또 저희쪽에서 json 형식으로 return 해줘야하는 값이 있어서 해당 부분 조정을 하였습니다.

public function create(Request $request)
    {
        DB::enableQueryLog(); // Enable query log

        $result = $request->result;
        // ... 생략
        

        if (!empty($test1)) {
            try {
                //DB::beginTransaction();

                $result = DB::table('전송결과 테이블')->insert(
                    [
                        'result'    => $result,                        
                        // ... 생략
                    ]
                );

                //dd(DB::getQueryLog()); // Show results of log
                //exit;


                if ($result > 0) {

                    $returnData = array('result' => $request->result);

                    return response()->json(
                        $returnData,
                        200,
                        ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
                        JSON_UNESCAPED_UNICODE
                    );
                }
                //DB::commit();
            } catch (Exception $e) {
                //DB::rollback();
                // other actions
                return response()->json(
                    "ERR",
                    200,
                    ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
                    JSON_UNESCAPED_UNICODE
                );
                exit;
            }
        } else {
            return response()->json(
                "NODATA",
                200,
                ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
                JSON_UNESCAPED_UNICODE
            );
            exit;
        }        
    }

 

728x90
300x250