| 제목 | sms 연동 문의 | ||
|---|---|---|---|
| 카테고리 | CI 4 관련 | ||
| 글쓴이 | 우연 | 작성시각 | 2021/06/23 16:48:45 |
|
|
|||
|
sms 모듈을 연동중입니다.
샘플소스 https://github.com/innosms/innosms.example.php
문자가 발송되는 models 페이지 소스 -------------------------------------------------------------------------------------------------------------------------- //발급받은 API 아이디 $client_id = "api_id"; //발급받은 API키 $api_key = "api_key"; $contents = array( "msg_type" => "sms", //메세지 형식 "phone" => "01000000000", //수신번호, 동보전송일 경우 쉼표로 구분 ex)0111111111,0111111111 "callback" => "0111111111", //회신번호 "msg" => "SMS 전송 테스트\n가나다", //전송메세지 ); $MessagingService = new \App\Libraries\MessagingService($client_id, $api_key); $result = $MessagingService->sendMessage($contents); /****************************************************************************** - 결과값(배열) $result['msg_serial'] : 전송 메세지 고유키(전송내역 조회 및 예약 취소를 위해 DB에 저장해서 보관하세요) $result['total_count'] : 총 전송건수 $result['cost'] : 전송 차감 금액 ******************************************************************************/ echo $result['msg_serial'];
Libraries/MessagingService.php 페이지
<?php
namespace App\Libraries;
class MessagingService
{
/**
* @file MessagingService.php
* @brief REST API Messaging module (utf-8)
* @author INNOPOST (tech@innopost.com)
*/
private $ServiceURL = "https://api.innosms.com";
private $Version = "1";
private $UserID;
private $APIKey;
private $Token;
public function __construct($UserID, $APIKey){
$this->UserID = $UserID;
$this->APIKey = $APIKey;
$this->Token = $this->getToken();
}
public function __destruct(){
$this->deleteToken();
}
private function executeCURL($uri, $method = null, $header = array(), $postdata = null, $isMultiPart = false){
$http = curl_init($this->ServiceURL."/".$this->Version."/".$uri);
if($isMultiPart) {
$header[] = "Content-Type:multipart/form-data";
}else{
$header[] = "Content-Type:application/x-www-form-urlencoded;charset=utf-8;";
if($postdata){
foreach($postdata as $k => $v){
if ($k == "msg" || $k == "subject")
$v = urlencode($v);
$temp[] = $k."=".$v;
}
$postdata = implode($temp,"&");
}
}
$isPost = ($method == "POST")?true:false;
$options = array(
CURLOPT_POST => $isPost,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_HEADER => 0,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_TIMEOUT => 10,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPHEADER => $header,
CURLOPT_POSTFIELDS => $postdata,
);
@curl_setopt_array($http, $options);
$responseJson = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
if($http_status != 200){
throw new APIException($responseJson);
//오류코드 배열로 수신
$result = new APIException($responseJson);
$returnResult = $result->toArray();
}else{
$returnResult = json_decode($responseJson ,true);
}
return $returnResult;
}
private function convertEuckrToUtf8($str) {
if(is_array($str)){
foreach($str as $key => $val){
$returnResult[$key] = mb_convert_encoding($val,"UTF-8","EUC-KR");
}
}else{
$returnResult = mb_convert_encoding($str,"UTF-8","EUC-KR");
}
return $returnResult;
}
private function setContent($contents,$isPost=false){
$result = null;
if($isPost)
{
$result = array();
foreach($contents as $key => $val)
{
if($key == "image")
$result[$key] = (!empty($val))?new CURLFile(realpath($val)):"";
else{
/*
if(preg_match("/^(msg|msg_list|subject)$/", $key)){
$val = $this->convertEuckrToUtf8($val);
}
*/
if($key == "msg_list"){
$val = json_encode($val);
}
$result[$key] = $val;
}
}
}
else
{
foreach($contents as $val){
$result .= "/".urlencode($val);
}
}
return $result;
}
private function getToken(){
try{
$header = array();
$header[] = "Authorization: Basic ".base64_encode($this->UserID.":".$this->APIKey);
$result = $this->executeCURL("token","POST",$header);
return $result['token'];
}catch(APIException $e){
echo $e;
exit;
}
}
private function deleteToken(){
$header = array();
$header[] = "Authorization: Bearer ".$this->Token;
$this->executeCURL("token","DELETE",$header);
}
public function getBalance(){
try{
$header = array();
$header[] = "Authorization: Bearer ".$this->Token;
return $this->executeCURL("balance","GET",$header);
}catch(APIException $e){
echo $e;
exit;
}
}
public function sendMessage($contents){
try{
$header = array();
$header[] = "Authorization: Bearer ".$this->Token;
$isMulitPart = ($contents['msg_type'] == "mms")?true:false;
return $this->executeCURL("send","POST",$header,$this->setContent($contents,true),$isMulitPart);
}catch(APIException $e){
echo $e;
exit;
}
}
public function getMessage($contents){
try{
$header = array();
$header[] = "Authorization: Bearer ".$this->Token;
return $this->executeCURL("send".$this->setContent($contents),"GET",$header);
}catch(APIException $e){
echo $e;
exit;
}
}
public function cancelReservation($contents){
try{
$header = array();
$header[] = "Authorization: Bearer ".$this->Token;
return $this->executeCURL("reservation".$this->setContent($contents),"DELETE",$header);
}catch(APIException $e){
echo $e;
exit;
}
}
}
class APIException extends Exception
{
public function __construct($response, $code = 10000, Exception $previous = null) {
$Err = json_decode($response);
if(is_null($Err)) {
parent::__construct($response, $code);
}
else {
parent::__construct($Err->message, $Err->code);
}
}
public function toArray(){
$result = array(
"code" => $this->code,
"message" => mb_convert_encoding($this->message,"EUC-KR","UTF-8"),
);
return $result;
}
public function __toString() {
return __CLASS__ . ": [{$this->code}]: ".$this->message."\n";
}
}
?>
SMS API 연동중입니다. codeigniter으로 처음 개발중이라 삽질중이네요. models에서 문자 발송을 하는데 위와 같이 연결해주었습니다. 그리고 오류가 발생합니다. Class 'App\\Libraries\\Exception' not found 클래스명을 변경해도 계속 변경된 이름으로 제가 뭘 잘못하고 있는건가요? ㅠㅠ models로 넣어도 라이브러리로 넣어도 똑같은 에러들만 반복이네요.
|
|||
| 다음글 | index.php 죽이기 잘됩니다! 다만 https일때... (2) | ||
| 이전글 | 에러 로그를 그냥 아파치(php)로그에 쌓이도록 할 순... (3) | ||
|
변종원(웅파)
/
2021/06/23 17:06:22 /
추천
1
모델이 아니라 라이브러리로 작업하셔야 합니다.
|
|
한대승(불의회상)
/
2021/06/24 09:33:53 /
추천
1
// 잘못된 예
class APIException extends Exception
{
}
// 바른 예
class APIException extends \Exception
{
}
namespace를 지정하셨으니 "Exception" 을 "\Exception" 으로 수정해 주세요.
|