You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
6.8 KiB
PHTML
265 lines
6.8 KiB
PHTML
2 years ago
|
<?php
|
||
|
|
||
|
namespace App\Services;
|
||
|
|
||
|
use App\Models\Sms;
|
||
|
use App\Models\SmsDetail;
|
||
|
|
||
|
class SmsService
|
||
|
{
|
||
|
private $sms_url = "https://apis.aligo.in/send/";
|
||
|
private $user_id = "jiasoft";
|
||
|
private $api_key = "0rsw46blu616mp6geidaldsy9z6o0pgi";
|
||
|
private $sender = '1577-5993';
|
||
|
|
||
|
/**
|
||
|
* Create a new job instance.
|
||
|
*/
|
||
|
public function __construct()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 문자전송
|
||
|
* @param int $sms_id
|
||
|
* @param string $phone
|
||
|
* @param string $message
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function sendSms(int $sms_id = 0, string $phone = '', string $message = '')
|
||
|
{
|
||
|
// 비어 있으면 건너뛰기
|
||
|
if (!$sms_id || empty($phone) || empty($message)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$result = $this->requestSms($phone, $message);
|
||
|
|
||
|
logger(json_encode($result));
|
||
|
|
||
|
$success = 0;
|
||
|
if ($result->result_code == 1) {
|
||
|
$success = 1;
|
||
|
}
|
||
|
|
||
|
if ($sms_id && $sms_id > 0) {
|
||
|
$fields = array(
|
||
|
'sms_id' => $sms_id,
|
||
|
'phone' => $phone,
|
||
|
'success' => $success,
|
||
|
'error' => $result->message
|
||
|
);
|
||
|
SmsDetail::query()->create($fields);
|
||
|
}
|
||
|
|
||
|
if (!$success) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 단일번호 문자전송
|
||
|
* @param string $phone
|
||
|
* @param string $message
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function sendPhone(string $phone = '', string $message = '')
|
||
|
{
|
||
|
$fields = array(
|
||
|
'title' => '',
|
||
|
'content' => $message,
|
||
|
'callback' => $this->sender,
|
||
|
'total' => 1,
|
||
|
'success' => 0,
|
||
|
'failure' => 0
|
||
|
);
|
||
|
$data = Sms::query()->create($fields);
|
||
|
|
||
|
if ($data) {
|
||
|
$success = $this->sendSms($data->id, $phone, $message);
|
||
|
|
||
|
if ($success) {
|
||
|
$data->success = 1;
|
||
|
$data->failure = 0;
|
||
|
} else {
|
||
|
$data->success = 0;
|
||
|
$data->failure = 1;
|
||
|
}
|
||
|
$data->save();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 단일회원 문자전송
|
||
|
* @param $user
|
||
|
* @param $message
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function sendUser($user, $message)
|
||
|
{
|
||
|
$fields = array(
|
||
|
'title' => '',
|
||
|
'content' => $message,
|
||
|
'callback' => $this->sender,
|
||
|
'total' => 1,
|
||
|
'success' => 0,
|
||
|
'failure' => 0
|
||
|
);
|
||
|
$data = Sms::query()->create($fields);
|
||
|
|
||
|
if ($data) {
|
||
|
$success = $this->sendSms($data->id, $user->phone, $message);
|
||
|
if ($success) {
|
||
|
$data->success = 1;
|
||
|
$data->failure = 0;
|
||
|
} else {
|
||
|
$data->success = 0;
|
||
|
$data->failure = 1;
|
||
|
}
|
||
|
$data->save();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 복수회원 문자전송
|
||
|
* @param array $users
|
||
|
* @param string $message
|
||
|
* @return int
|
||
|
*/
|
||
|
public function sendUsers(array $users = [], string $message = '')
|
||
|
{
|
||
|
$total = count($users);
|
||
|
$success = 0;
|
||
|
|
||
|
$fields = array(
|
||
|
'title' => '',
|
||
|
'content' => $message,
|
||
|
'callback' => $this->sender,
|
||
|
'total' => $total,
|
||
|
'success' => 0,
|
||
|
'failure' => 0
|
||
|
);
|
||
|
$data = Sms::query()->create($fields);
|
||
|
|
||
|
if ($data) {
|
||
|
foreach ($users as $user) {
|
||
|
$result = $this->sendSms($data->id, $user->phone, $message);
|
||
|
if ($result) {
|
||
|
$success++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$data->success = $success;
|
||
|
$data->failure = $total - $success;
|
||
|
$data->save();
|
||
|
|
||
|
return $success;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 복수번호 문자전송
|
||
|
* @param array $phones
|
||
|
* @param string $message
|
||
|
* @return int
|
||
|
*/
|
||
|
public function sendPhones(array $phones = [], string $message = '')
|
||
|
{
|
||
|
$total = count($phones);
|
||
|
$success = 0;
|
||
|
|
||
|
$fields = array(
|
||
|
'title' => '',
|
||
|
'content' => $message,
|
||
|
'callback' => $this->sender,
|
||
|
'total' => $total,
|
||
|
'success' => 0,
|
||
|
'failure' => 0
|
||
|
);
|
||
|
$data = Sms::query()->create($fields);
|
||
|
|
||
|
if ($data) {
|
||
|
foreach ($phones as $phone) {
|
||
|
$result = $this->sendSms($data->id, $phone, $message);
|
||
|
if ($result) {
|
||
|
$success++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$data->success = $success;
|
||
|
$data->failure = $total - $success;
|
||
|
$data->save();
|
||
|
|
||
|
return $success;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 문자전송 요청
|
||
|
* @param string $phone
|
||
|
* @param string $message
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function requestSms(string $phone = '', string $message = '')
|
||
|
{
|
||
|
$sms = [];
|
||
|
$sms['user_id'] = $this->user_id;
|
||
|
$sms['key'] = $this->api_key;
|
||
|
|
||
|
$sms['msg'] = stripslashes($message);
|
||
|
$sms['receiver'] = $phone;
|
||
|
$sms['sender'] = $this->sender;
|
||
|
|
||
|
$sms['rdate'] = '';
|
||
|
$sms['rtime'] = '';
|
||
|
$sms['testmode_yn'] = '';
|
||
|
$sms['title'] = '';
|
||
|
|
||
|
$sms['msg_type'] = 'SMS';
|
||
|
|
||
|
return $this->postUrl($this->sms_url, $sms);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 문자 전송 연동 모듈 함수 호출
|
||
|
* @param string $url
|
||
|
* @param array $fields
|
||
|
* @return mixed
|
||
|
*/
|
||
|
private function postUrl(string $url = '', array $fields = [])
|
||
|
{
|
||
|
$schema = explode("/", $url);
|
||
|
$port = $schema[0] == 'https:' ? 443 : 80;
|
||
|
|
||
|
$oCurl = curl_init();
|
||
|
curl_setopt($oCurl, CURLOPT_PORT, $port);
|
||
|
curl_setopt($oCurl, CURLOPT_URL, $url);
|
||
|
curl_setopt($oCurl, CURLOPT_POST, 1);
|
||
|
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
|
||
|
curl_setopt($oCurl, CURLOPT_POSTFIELDS, $fields);
|
||
|
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false);
|
||
|
$ret = curl_exec($oCurl);
|
||
|
curl_close($oCurl);
|
||
|
|
||
|
// result_code : 전송성공유무 (성공:1 / 실패: -100 부터 -999)
|
||
|
// message : success (성공시) / reserved (예약성공시) / 그외 (실패상세사유가 포함됩니다)
|
||
|
// msg_id : 메세지 고유ID = 고유값을 반드시 기록해 놓으셔야 sms_list API를 통해 전화번호별 성공/실패 유무를 확인하실 수 있습니다
|
||
|
// error_cnt : 에러갯수 = receiver 에 포함된 전화번호중 문자전송이 실패한 갯수
|
||
|
// success_cnt : 성공갯수 = 이동통신사에 전송요청된 갯수
|
||
|
// msg_type : 전송된 메세지 타입 = SMS / LMS / MMS (보내신 타입과 다른경우 로그로 기록하여 확인하셔야 합니다)
|
||
|
|
||
|
// 결과배열
|
||
|
return json_decode($ret);
|
||
|
}
|
||
|
}
|