友盟推送,php简单代码

<?php
	/*
		推送测试
	*/
	namespace Service\Controller;
	use Think\Controller;

	class PushController extends Controller {
		private $_config 		= array();

		public function __construct() {
			parent::__construct();
			$this->_config 		= $this->_makeConfig();
		}


		/*
			安卓发送
		*/
		public function PtoAndroid($device_tokens,$ticker,$title,$text) {
			if(count($device_tokens) > 500) {
				die('设备超过500个');
			}

			//拼接签名
			$post_data 		= $this->_android($device_tokens,$ticker,$title,$text);
			$sign 			= $this->_makeSign($post_data,1);
			$url 			= $this->_config['url'] . '?sign=' . $sign;

			//发送请求
			$res 			= $this->_curl($url,$post_data);

			//判断
			if($res['ret'] != 'SUCCESS'){
				//发送失败,
				die($res['data']->error_code);
			}
		}


		public function testA() {
			$device_tokens 		= array('AkFWCLpTmtJBeOf17rSnSAyPux4ayvzi6dru3O1avuSe');
			$this->PtoAndroid($device_tokens,'通知栏的文字','测试标题','测试内容');
		}


		/*
			iOS发送
		*/
		public function PtoIos($device_tokens,$text) {
			if(count($device_tokens) > 500) {
				die('设备超过500个');
			}

			//拼接post数据
			$post_data 		= $this->_ios($device_tokens,$text);

			//拼接签名
			$sign 			= $this->_makeSign($post_data,2);
			$url 			= $this->_config['url'] . '?sign=' . $sign;

			//发送请求
			$res 			= $this->_curl($url,$post_data);

			//判断
			if($res['ret'] != 'SUCCESS'){
				//发送失败,
				die($res['data']->error_code);
			}
		}

		public function testIos() {
			$device_tokens 		= array('dd61807869efb4664491cd36eca8843a111a96d39e9772ea7940f0e83ce217c6');
			$this->PtoIos($device_tokens,'hello');
		}


		//生成配置文件
		private function _makeConfig() {
			return array(
				'method' 					=> 'POST',
				'url' 						=> 'http://msg.umeng.com/api/send',
				'ios_app_key'				=> '55541bb767e58e2094000492',
				'ios_app_master_secret' 	=> 'wbo2vnu5wmdvzfwzc2axdiiojj5ujkwt',
				'and_app_key' 				=> '5551b48767e58ec961001d17',
				'and_app_master_secret' 	=> 'wjnbje5ju9rf89opo2p30phywwjqsavy',
			);
		}


		/*
			生成签名
			@param 		post_body 请求体
						type 	1,安卓,2 ios
			@return 	str
		*/
		private function _makeSign($post_body,$type) {
			if($type == 1)
				return strtolower(md5($this->_config['method'] . $this->_config['url'] . $post_body . $this->_config['and_app_master_secret']));
			else 
				return strtolower(md5($this->_config['method'] . $this->_config['url'] . $post_body . $this->_config['ios_app_master_secret']));

		}


		/*
			android post_body设置
			@param 		ticker 	str 提示栏文字
						title 	str 通知标题
						text 	str 文字描述
						device_tokens 	array 设备号
			@return 
		*/
		private function _android($device_tokens,$ticker,$title,$text) {

			$temp_arr 			= array(
				'appkey'  		=> $this->_config['and_app_key'],
				'timestamp' 	=> time(),
				'type' 			=> 'listcast',
				'device_tokens' => trim(implode(',', $device_tokens),','),
				'payload' 		=> array(
					'display_type' 		=> 'notification',//通知,友盟接管处理
					'body' 				=> array(
						'ticker' 		=> $ticker,
						'title' 		=> $title,
						'text' 			=> $text,
						'after_open'	=> 'go_custom',
						'custom' 		=> 'do things', //点击通知后做的事
					),
				),
				'description' 			=> '',//描述
				'production_mode' 		=> 'false',//测试,上线为true
			);

			return json_encode($temp_arr);
		}


		/*
			ios post_body消息体设置
			@param 		ticker 	str 提示栏文字
						title 	str 通知标题
						text 	str 文字描述
						device_tokens 	array 设备号
			@return 
		*/
		private function _ios($device_tokens,$text) {
			$temp_arr 		=	array(
									'appkey'  		=> $this->_config['ios_app_key'],
									'timestamp' 	=> time(),
									'type' 			=> 'listcast',
									'device_tokens' => trim(implode(',', $device_tokens),','),
									'payload' 		=> array(
										'aps' 			=> array(
											'alert' 		=> $text,
											'after_open'	=> 'go_custom',
											'custom' 		=> 'do things', //点击通知后做的事
										),
									),
									'description' 			=> 'listcast',//描述
									'production_mode' 		=> 'false',//测试,上线为true
								);
			return json_encode($temp_arr);
		}


		/*
			拼接curl请求
		*/
		private function _curl($url,$post) {
	  		$ch 			= curl_init($url);

	        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
	        curl_setopt($ch, CURLOPT_POST,1);
	        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
	        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
	        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

	        $result 		= curl_exec($ch);

	        $httpCode 		= curl_getinfo($ch, CURLINFO_HTTP_CODE);
	        $curlErrNo 		= curl_errno($ch);
	        $curlErr 		= curl_error($ch);
	        curl_close($ch);

	        if ($httpCode == "0") 
	           	die("Curl error number:" . $curlErrNo . " , Curl error details:" . $curlErr . "\r\n");
	        else if ($httpCode != "200") 
	           	die("Http code:" . $httpCode .  " details:" . $result . "\r\n");
	        else
	        	return (array)json_decode($result);
		}






	}

  

posted @ 2015-05-15 16:05  栋的博客  阅读(1879)  评论(0编辑  收藏  举报
深入理解php php扩展开发 docker mongodb