鼠笼管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

301 lines
7.8 KiB

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 14-8-23
* Time: 下午4:56
*/
Class ApnsUtils
{
static function validatePayloadLength($locKey, $locArgs, $message, $actionLocKey, $launchImage, $badge, $sound, $payload,$contentAvailable)
{
$json = ApnsUtils :: processPayload($locKey, $locArgs, $message, $actionLocKey, $launchImage, $badge, $sound, $payload,$contentAvailable);
return strlen($json);
}
static function processPayload($locKey, $locArgs, $message, $actionLocKey, $launchImage, $badge, $sound, $payload, $contentAvailable)
{
$isValid = false;
$pb = new Payload();
if ($locKey != null && strlen($locKey) > 0) {
// loc-key
$pb->setAlertLocKey(($locKey));
// loc-args
if ($locArgs != null && strlen($locArgs) > 0) {
$pb->setAlertLocArgs(explode(',',($locArgs)));
}
$isValid = true;
}
// body
if ($message != null && strlen($message) > 0) {
$pb->setAlertBody(($message));
$isValid = true;
}
// action-loc-key
if ($actionLocKey!=null && strlen($actionLocKey) > 0) {
$pb->setAlertActionLocKey($actionLocKey);
}
// launch-image
if ($launchImage!=null && strlen($launchImage) > 0) {
$pb->setAlertLaunchImage($launchImage);
}
// badge
$badgeNum = -1;
if(is_numeric($badge)){
$badgeNum = (int)$badge;
}
if ($badgeNum >= 0) {
$pb->setBadge($badgeNum);
$isValid = true;
}
// sound
if ($sound != null && strlen($sound) > 0) {
$pb->setSound($sound);
} else {
$pb->setSound("default");
}
//contentAvailable
if ($contentAvailable == 1) {
$pb->setContentAvailable(1);
$isValid = true;
}
// payload
if ($payload != null && strlen($payload) > 0) {
$pb->addParam("payload", ($payload));
}
if($isValid == false){
throw new Exception("one of the params(locKey,message,badge) must not be null or contentAvailable must be 1");
}
$json = $pb->toString();
if($json == null){
throw new Exception("payload json is null");
}
return $json;
}
}
Class Payload
{
var $APS = "aps";
var $params;
var $alert;
var $badge;
var $sound = "";
var $alertBody;
var $alertActionLocKey;
var $alertLocKey;
var $alertLocArgs;
var $alertLaunchImage;
var $contentAvailable;
function getParams()
{
return $this->params;
}
function setParams($params)
{
$this->params = $params;
}
function addParam($key, $obj)
{
if ($this->params == null) {
$this->params = array();
}
if ($this->APS == strtolower($key)) {
throw new Exception("the key can't be aps");
}
$this->params[$key] = $obj;
}
function getAlert()
{
return $this->alert;
}
function setAlert($alert)
{
$this->alert = $alert;
}
function getBadge()
{
return $this->badge;
}
function setBadge($badge)
{
$this->badge = $badge;
}
function getSound()
{
return $this->sound;
}
function setSound($sound)
{
$this->sound = $sound;
}
function getAlertBody()
{
return $this->alertBody;
}
function setAlertBody($alertBody)
{
$this->alertBody = $alertBody;
}
function getAlertActionLocKey()
{
return $this->alertActionLocKey;
}
function setAlertActionLocKey($alertActionLocKey)
{
$this->alertActionLocKey = $alertActionLocKey;
}
function getAlertLocKey()
{
return $this->alertLocKey;
}
function setAlertLocKey($alertLocKey)
{
$this->alertLocKey = $alertLocKey;
}
function getAlertLaunchImage()
{
return $this->alertLaunchImage;
}
function setAlertLaunchImage($alertLaunchImage)
{
$this->alertLaunchImage = $alertLaunchImage;
}
function getAlertLocArgs()
{
return $this->alertLocArgs;
}
function setAlertLocArgs($alertLocArgs)
{
$this->alertLocArgs = $alertLocArgs;
}
function getContentAvailable()
{
return $this->contentAvailable;
}
function setContentAvailable($contentAvailable)
{
$this->contentAvailable = $contentAvailable;
}
function putIntoJson($key, $value, $obj)
{
if ($value != null) {
$obj[$key] = $value;
}
return $obj;
}
function toString()
{
$object = array();
$apsObj = array();
if ($this->getAlert() != null) {
$apsObj["alert"] = urlencode($this->getAlert());
} else {
if ($this->getAlertBody() != null || $this->getAlertLocKey() != null) {
$alertObj = array();
$alertObj = $this->putIntoJson("body", ($this->getAlertBody()), $alertObj);
$alertObj = $this->putIntoJson("action-loc-key", ($this->getAlertActionLocKey()), $alertObj);
$alertObj = $this->putIntoJson("loc-key", ($this->getAlertLocKey()), $alertObj);
$alertObj = $this->putIntoJson("launch-image", ($this->getAlertLaunchImage()), $alertObj);
if ($this->getAlertLocArgs() != null) {
$array = array();
foreach ($this->getAlertLocArgs() as $str) {
array_push($array, ($str));
}
$alertObj["loc-args"] = $array;
}
$apsObj["alert"] = $alertObj;
}
}
if ($this->getBadge() != null) {
$apsObj["badge"] = $this->getBadge();
}
// 判断是否静音
if ("com.gexin.ios.silence" != ($this->getSound())) {
$apsObj = $this->putIntoJson("sound", ($this->getSound()), $apsObj);
}
if($this->getContentAvailable() == 1){
$apsObj["content-available"]=1;
}
$object[$this->APS] = $apsObj;
if ($this->getParams() != null) {
foreach ($this->getParams() as $key => $value) {
$object[($key)] = ($value);
}
}
return Util::json_encode($object);
}
}
class Util
{
static function json_encode($input){
// 从 PHP 5.4.0 起, 增加了这个选项.
if(defined('JSON_UNESCAPED_UNICODE')){
return json_encode($input, JSON_UNESCAPED_UNICODE);
}
if(is_string($input)){
$text = $input;
$text = str_replace("\\", "\\\\", $text);
//$text = str_replace('/', "\\/", $text);
$text = str_replace('"', "\\".'"', $text);
$text = str_replace("\b", "\\b", $text);
$text = str_replace("\t", "\\t", $text);
$text = str_replace("\n", "\\n", $text);
$text = str_replace("\f", "\\f", $text);
$text = str_replace("\r", "\\r", $text);
//$text = str_replace("\u", "\\u", $text);
return '"' . $text . '"';
} else if(is_array($input) || is_object($input)) {
$arr = array();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach($input as $k=>$v){
if($is_obj){
$arr[] = self::json_encode($k) . ':' . self::json_encode($v);
}else{
$arr[] = self::json_encode($v);
}
}
if($is_obj){
return '{' . join(',', $arr) . '}';
}else{
return '[' . join(',', $arr) . ']';
}
}else{
return $input . '';
}
}
}