TIP게시판

제목 PushWoosh push 전송 클래스
글쓴이 테러보이 작성시각 2015/05/04 13:31:23
댓글 : 2 추천 : 1 스크랩 : 0 조회수 : 14446   RSS
테러보이
이건 만든지가 조금됬는데.. 다듬어서 사용하시면 될 것 같습니다.
<?php
/**
* 제작: 임동덕
* 작업일: 2015-02-11
* 사용법
-------------------------------------------
$Push = new TBPushWoosh; // 클래스 선언
$Push->setConfig( pushwoosh api 토큰키 , pushwoosh 어플리케이션코드(어플아님) , 디버그모드(true, false) ); // 기본환경설정
$Push->Send( 메시지 ); // 전체 발송
$Push->Send( 메시지, '', Y-m-d H:i 형태의 시간 ); // 예약 전체 발송
$Push->Send( 메시지, 디바이스코드(array or string) ); // 디바이스 지정 발송
$Push->Send( 메시지, 디바이스코드(array or string) , Y-m-d H:i 형태의 시간 ); // 디바이스 지정 예약발송
$Push->unsetConfig(); // 기본환경설정 초기화 (특이사항에서만 사용)
**/
class TBPushWoosh {
 
	var $config;
 
 
	# 기본 pushwosh 토큰과 디버그 모드를 설정한다.
	public function setConfig($Auth, $AppCode, $Debug=false) {
 
		$this->config['auth'] = $Auth;
		$this->config['app_code'] = $AppCode;
		$this->config['debug'] = $Debug;
	}
 
 
	# 설정된 토큰과 디버그 모드를 리셋한다.
	public function unsetConfig() {
 
		$this->config['auth'] = '';
		$this->config['app_code'] = '';
		$this->config['debug'] = false;
	}
 
 
	# 설정을 확인한다.
	public function printConfig() {
 
		$config = $this->config;
 
		return $config;
	}
 
 
	# 내부에서 사용하는 CURL 함수
	private function Curl($Url, $Request) {
 
		// 반환 변수 초기값
		$output = array();
 
		$ch = curl_init($Url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
		curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
		curl_setopt($ch, CURLOPT_HEADER, true);
		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $Request);
		$response = curl_exec($ch);
		$info = curl_getinfo($ch);
		curl_close($ch);
 
		$output['response'] = $response;
		$output['info'] = $info;
 
		return $output;
	}
 
	# array to json
	public function array_to_json($data) {
 
		switch (gettype($data)) {
 
			case 'boolean':
				return $data?'true':'false';
			case 'integer':
			case 'double':
				return $data;
			case 'string':
				return '"'.strtr($data, array('\\'=>'\\\\','"'=>'\\"')).'"';
			case 'array':
				$rel = false; // relative array?
				$key = array_keys($data);
				foreach ($key as $v) {
					if (!is_int($v)) {
						$rel = true;
						break;
					}
				}
 
				$arr = array();
				foreach ($data as $k=>$v) {
					$arr[] = ($rel?'"'.strtr($k, array('\\'=>'\\\\','"'=>'\\"')).'":':'').$this->array_to_json($v);
				}
 
				return $rel?'{'.join(',', $arr).'}':'['.join(',', $arr).']';
			default:
				return '""';
		}
	}
 
 
	# 메시지를 발송한다.
	public function Send($msg, $Device='', $SetTime='now') {
 
 
		// 초기값 선언
		$request_add = '';
		$notifications_add = '';
 
		// 통신 매쏘드 (고정) + url
		$method= 'createMessage';
		$url = 'https://cp.pushwoosh.com/json/1.3/' . $method;
 
		// 예약 발송시 사용
		if($SetTime == 'now') {
			
			$notifications_add .= ', "send_date": "now" ';
		}
		else {
 
			if(time() > strtotime($SetTime)) $notifications_add .= ', "send_date": "now" '; // 과거 시간으로 전송 차단
			else $notifications_add .= ', "send_date": "'.date('Y-m-d H:i', strtotime($SetTime)).'" ';
		}
 
		// 디바이스 지정 전송 설정
		if(trim($Device)) {
 
			if(is_array($Device)) {
 
				$notifications_add .= ' ,"devices": [ ';
				foreach($Device as $key=>$val) {
 
					if($key > 0) $notifications_add .= ', ';
 
					$notifications_add .= ' "'.$val.'" ';
				}
				$notifications_add .= ' ] ';
			}
			else {
 
				$notifications_add .= ' ,"devices": ["'.$Device.'"] ';
			}
		}
 
		// msg to json
		$msg = $this->array_to_json($msg);
 
		// json 전송 포맷 설정
		$request = '{
			"request": {
				"application": "'.$this->config['app_code'].'",
				"auth": "'.$this->config['auth'].'",
				"notifications": [{
					"ignore_user_timezone": true,
					"content": '.$msg.'
					'.$notifications_add.'
				}]
				'.$request_add.'
			}
		}';
 
		// 서버로 전송 및 결과 반환
		$Result = $this->Curl($url, $request);
 
		// 디버깅 모드시 결과 출력
		if ($this->config['debug'] === true) {
 
			print "[PW] request: $request<hr>";
			print "[PW] response: {$Result['response']}<hr>";
			print "[PW] info: " . print_r($Result['info'], true).'<hr>';
			print "[config] config: ". print_r($this->printConfig(), true);
		}
	}
}
 다음글 라라벨 프레임워크 5.0 한글 메뉴얼 (4)
 이전글 parse push전송 클래스 (5)

댓글

한대승(불의회상) / 2015/05/04 14:19:45 / 추천 0
좋은 정보 감사 합니다. ^^
일용직노동자 / 2015/06/19 10:44:54 / 추천 0
좋은 정보 감사합니다 ^^