xxb/lib/tpns/tpns.class.php
2023-10-23 15:51:36 +08:00

140 lines
3.8 KiB
PHP

<?php
/**
* Tencent Push Notification Service lib.
*
* @copyright Copyright 2009-2023 ZenTao Software (Qingdao) Co., Ltd. (www.zentao.net)
* @author Wenrui LI <liwenrui@cnezsoft.com>
* @package tpns
* @license ZOSL (http://zpl.pub/page/zoslv1.html)
* @version $Id$
* @Link http://xuan.im
*/
class tpns
{
/**
* TPNS Endpoints.
*/
const ENDPOINT_PUSH = 'https://api.tpns.tencent.com/v3/push/app';
/**
* Set accessId and secretKey.
*
* @param string $accessId
* @param string $secretKey
*/
public function __construct($accessId, $secretKey)
{
assert(isset($accessId) && isset($secretKey));
$this->accessId = $accessId;
$this->secretKey = $secretKey;
}
/**
* Execute curl, POST only.
*
* @param string $url url of API endpoint.
* @param array $params POST params.
* @param string $header auth header, or any other headers.
* @access private
* @return object|bool returns false if failed to curl.
*/
private function curl($url, $params = array(), $header = '')
{
$params = is_array($params) ? json_encode($params) : $params;
$curlConfig = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
CURLOPT_HTTPHEADER => $header
);
$ch = curl_init();
curl_setopt_array($ch, $curlConfig);
$data = curl_exec($ch);
curl_close($ch);
if(!empty($data))
{
$data = stripslashes($data);
$data = json_decode($data);
}
if(json_last_error() !== JSON_ERROR_NONE) return false;
return $data;
}
/**
* Sign and send push request to TPNS.
*
* @param object $params
* @access private
* @return object|bool
*/
public function push($params)
{
$authHeader = array('Authorization: Basic ' . base64_encode($this->accessId . ':' . $this->secretKey));
if(is_object($params)) $params = (array)$params;
return $this->curl(tpns::ENDPOINT_PUSH, $params, $authHeader);
}
/**
* Make a tpns push pack with message and tokens.
*
* @param object $message
* @param array $tokenList
* @access public
* @return object
*/
public function makePushPack($message, $tokenList)
{
$push = new stdclass();
$push->audience_type = 'token_list';
$push->token_list = $tokenList;
$push->message = $message;
$push->message_type = 'notify';
return $push;
}
/**
* Make message for a push pack.
*
* @param string $title
* @param string $content
* @param string $intent
* @access public
* @return object
*/
public function makeMessagePack($title, $content = ' ', $intent = '')
{
$message = new stdclass();
$message->title = $title;
$message->content = $content;
/* Set android pack to message if intent presents. */
if(!empty($intent)) $message->android = $this->makeAndroidPack($intent);
return $message;
}
/**
* Make the android part of a message pack.
*
* @param string $intent
* @access private
* @return object
*/
private function makeAndroidPack($intent)
{
$android = new stdclass();
$android->action = new stdclass();
$android->action->action_type = 3; // 1 = open app, 2 = open browser, 3 = open intent.
$android->action->intent = $intent;
return $android;
}
}