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
'IT > PHP' 카테고리의 다른 글
[PHP] PHP session 저장소 권한 설정 (0) | 2022.04.17 |
---|---|
[Linux] crontab php 파일 실행시켜서 로그 찍기 (0) | 2021.12.25 |
[Laravel] migration 관련 , 테이블 생성, 컬럼 수정, 삭제 (0) | 2021.09.09 |
[laravel] laralvelsail 라라벨세일 간단메모 (0) | 2021.07.21 |
[PHP + JS] TreeView 트리뷰 , 트리구조 구현 (8) | 2021.06.02 |