| 제목 | 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" 으로 수정해 주세요. |