我的产品,点击产品对应的Push服务,点击“移动应用详情”获取)
private $tokenUrl = "https://login.cloud.huawei.com/oauth2/v2/token"; //获取认证Token的URL
private $apiUrl = "https://api.push.hicloud.com/pushsend.do"; //应用级消息下发API
private $accessToken;//下发通知消息的认证Token
private $tokenExpiredTime; //accessToken的过期时间
private $void;//参数组
/**
* [void 参数设置]
* @Author Jerry
* @DateTime 2018-10-31T08:45:37+0800
* @Example eg:
* @param [type] $key [description]
* @param [type] $value [description]
* @return [type] [description]
*/
private function void($key, $value)
{
$this->void[$key] = $value;
}
/**
* [send 数据推送方法]
* @Author Jerry
* @DateTime 2018-11-12T20:25:51+0800
* @Example eg:
* @param array $deviceTokens [description]
* @param string $title [description]
* @param string $content [description]
* @param integer $actionType [description]
* @param integer $msgType [description]
* @param array $params [description]
* @return [type] [description]
*/
public function sends($deviceTokens=[],$title='',$content='',$actionType=3,$msgType=3,$params=[])
{
$this->refreshToken();
return $this->sendPushMessage($deviceTokens,$title,$content,$actionType,$msgType,$params);
}
/**
* [refreshToken 获取ke下发通知消息的认证Token]
* @Author Jerry
* @DateTime 2018-10-31T08:44:39+0800
* @Example eg:
* @return [type] [description]
*/
private function refreshToken()
{
$client_secret = $this->appSecret;
$client_id = $this->appId;
$this->void = null;
$this->void(CURLOPT_POST, 1);
$this->void(CURLOPT_HEADER, false);
$this->void(CURLOPT_RETURNTRANSFER, true);
$this->void(CURLOPT_CONNECTTIMEOUT, 5000);
$this->void(CURLOPT_TIMEOUT, 5000);
$this->void(CURLOPT_POSTFIELDS, 'grant_type=client_credentials&client_secret=' . $client_secret . '&client_id=' . $client_id);
$response = $this->send($this->tokenUrl, $this->void);
$obj = json_decode($response);
$this->accessToken = $obj->access_token;
$this->tokenExpiredTime = $this->msectime() + $obj->expires_in - 5 * 60 * 1000;
}
/**
* [sendPushMessage 发送Push消息]
* @Author Jerry
* @DateTime 2018-10-31T08:43:47+0800
* @Example eg:
* @param array $deviceTokens [设置TOKEN]
* @param string $title [推送标题]
* @param string $content [推送内容]
* @param integer $actionType [行为类型]
* @param integer $msgType [信息类型]
* @param array $params [附加参数]
* @return [type] [description]
*/
private function sendPushMessage($deviceTokens=[],$title='',$content='',$actionType=3,$msgType=3,$params=[])
{
if ($this->tokenExpiredTime <= $this->msectime()) {
$this->refreshToken();
}
/*PushManager.requestToken为客户端申请token的方法,可以调用多次以防止申请token失败*/
/*PushToken不支持手动编写,需使用客户端的onToken方法获取*/
if(!$deviceTokens){
$deviceTokens[] = 'XXXXXXXXX';## 测试用的设备TOKEN
}
// die;
// dump($deviceTokens);
//仅通知栏消息需要设置标题和内容,透传消息key和value为用户自定义
$body = [
'title' => $title?$title:'Push message title',//消息标题
'content' => $content?$content:'Push message content',//消息标题
];
$param = [
'appPkgName' =>isset($params['appPkgName'])?$params['appPkgName']:'cn.honor.qinxuan',//定义需要打开的appPkgName
'intent' =>'#Intent;action=cn.honor.qinxuan.action.msg;package=cn.honor.qinxuan;end',
];
$action = [
'param' =>$param,//消息点击动作参数
'type' =>$actionType?$actionType:3,//1 自定义行为:行为由参数intent定义2 打开URL:URL地址由参数url定义3 打开APP:默认值,打开App的首页 注意:富媒体消息开放API不支持。
];
$msg = [
'action' =>$action,//消息点击动作
'type' =>$msgType?$msgType:3,//1 透传异步消息3 系统通知栏异步消息注意:2和4以后为保留后续扩展使用
'body' =>$body
];
$ext = [
'biTag' =>'Trump',//设置消息标签,如果带了这个标签,会在回执中推送给CP用于检测某种类型消息的到达率和状态。注意:BigTag不能携带下面几个保留字符:逗号‘,’,竖线‘|’,长度不能超过100个字符。
'icon' => '',//自定义推送消息在通知栏的图标,value为一个公网可以访问的URL
"customize" =>[$params['customize']],##扩展信息
];
#华为PUSH消息总结构体
$hps = [
'msg' =>$msg,
'ext' =>$ext,
];
$payload = [
'hps' =>$hps,
];
$postBody = 'access_token=' . urlencode($this->accessToken) . '&nsp_svc=' . urlencode('openpush.message.api.send') . '&nsp_ts=' . (int)urlencode($this->msectime()/1000)
. '&device_token_list=' . urlencode(json_encode($deviceTokens)) . '&payload=' . urlencode(json_encode($payload));
$postUrl = $this->apiUrl . '?nsp_ctx=' . urlencode("{\"ver\":\"1\", \"appId\":\"" . $this->appId . "\"}");
$this->void = null;
$this->void(CURLOPT_POST, 1);
$this->void(CURLOPT_HEADER, false);
$this->void(CURLOPT_RETURNTRANSFER, 1);
$this->void(CURLOPT_BINARYTRANSFER, 1);
$this->void(CURLOPT_CONNECTTIMEOUT, 5000);
$this->void(CURLOPT_TIMEOUT, 5000);
$this->void(CURLOPT_POSTFIELDS, $postBody);
return $response = $this->send($postUrl, $this->void);
}
}
- 备注说明
-
PHP
- 基本语法
- 函数
-
所有内置函数(待完善/练习)
-
Array 数组
-
对比
- 待补充array_intersect_uassoc
- 待补充array_intersect_ukey
- array_uintersect_assoc
- array_uintersect_uassoc
- 待补充array_intersect_key
- 待补充array_intersect_assoc
- array_intersect
- 待补充array_diff_ukey
- 待补充array_diff_uassoc
- 待补充array_diff_key
- array_diff_assoc
- array_diff
- array_udiff
- array_udiff_assoc
- array_uintersect
- array_udiff_uassoc
- 去重 array_flip和array_unique区别
- 运算
- 排序
- 替换
- array_values
- array_map/array_filter/array_walk和foreach
- *array_reduce
- *array_map
- array_walk_recursive
- *array_walk
- *array_filter
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_fill
- array_fill_keys
- array_key_exists
- array_keys
- array_merge
- array_merge_recursive
- array_merge,array_recursive区别
- array_pad
- array_pop
- array_pash
- array_rand
- array_reverse
- array_search
- array_shift
- array_unshift
- 待补充array_splice
- 待补充compact
- count/sizeof
- current/pos
- list
- each
- end
- extract
- in_array
- next
- prev
- range
- reset
- shuffle(数组随机重新排序)
-
对比
-
String 字符串
- 输出
- 转义/反转
- 加密
- 比对
- 字符截取/分割/打散
- 搜索
- 字符替换
- bin2hex
- hex2bin
- pack
- chr
- chop
- 待验证count_chars
- 待补get_html_translation_table
- 待补html_entity_decode
- implode/join
- lcfirst/ucfirst/ucwords/strtolower/strtoupper
- ltrim/rtrim/trim
- _money_format
- number_format
- sscanf
- str_getcsv
- str_pad
- str_repeat
- str_rot13
- str_shuffle
- str_word_count
- ===strcmp
- ===strcspn
- strip_tags
- strlen/mb_strlen
- strrev
- substr_count
- _wordwrap
- Calendar 日历
- cURL
- Date/Time 时间
- Directory 目录
- Error&Logging
- Filesystem 文件
- Filter 过滤
- FTP
- http
- Math 数学
- 其它
- PDO
- ZIP
- GD 图像
- PCRE 正则表达式
-
Array 数组
- 时间
- cookie&session
- 类(待补充)
- 命名空间(待补充)
- errors(待补充)
- 函数参考(待补充)
- 表达式&运算符
- 对象
- 字符串Heredoc&Nowdoc
- 生成器
- Iterator(迭代器)(待补充)
- 安全
- 交互
- PHP扩展库列表/归类.
- OOP 变更日志
- mysql
- 框架
- 待补充PHP5和PHP7区别及特性
- Composer
- 了解,熟悉
- swoole
- psr代码规范
-
开发笔记
- 保存远程图片
- php 判断http还是https,以及获得当前url的方法
- php 奇葩问题 ob_clean() MARK一下(输出的JSON数据前面有个小红点)
- PHP开发过程,常见问题和解决方法
- CTRL+ENTER提交数据
- PHP打印常量
- php结合redis实现高并发下的抢购、秒杀功能
- php系统类函数
- php高并发秒杀解决方案 {思路}
- PHP解决网站大数据大流量与高并发
- websocket demo
- websocket心跳重连
- workerman启动失败解决方法
- PHP两个函数参考 call_user_method call_user_function
- thinkphp 图形验证码 小程序中使用,总是验证失败(sessionid设置)
- oss 数据迁移(DISCUZ OSS图片处理)
- 解决VUE请求PHP后台,跨域的问题
- 常用的PHP方法整理(持续更新)
- (秒杀应用)PHP 文件锁
- 查看PHP扩展所带来的相关函数 以scws为例
- php.ini注释
- php跨域
- echo 用法
- 53个要点提高PHP编程效率
- str_replace 该函数返回一个字符串或者数组
- mysql dump
- call_user_func_array 用法
- PHP 返出日期时间类型带毫秒
- php相关转义的函数
- 处理时间的相关方法 日期内容带豪秒和当前毫秒时间戳
- JAVA BASE64(HMacSHA256(key, StringToSign)) php 对接处理
- 解决SSL connect error及CURLOPT_SSLVERSION 的问题
- PHP 对接华为云透传消息DEMO
- 过滤enmoji表情
- PHP 大数据导出
- PHP 微服务
- phpRaghtWay
- emoji表情处理
- php+redis 限流
- PHP WINDOS 工具
- composer 加载本地包
本文档由 Jerry.Chen 维护更新