直接上代码吧,照着官方文档调一下参数就行,简版测试通过。
class HuaweiNoti { protected $tokenExpiredTime = NULL; protected $accessToken = NULL; function __construct() { $this->appId = '******'; $this->appSecret = '******'; $this->tokenUrl = "******"; //获取认证Token的URL $this->apiUrl = "******"; //应用级消息下发API $this->timestamp = strval(time()); } // 获取token function onToken() { $res = http_post( 'https://login.cloud.huawei.com/oauth2/v2/token', [ 'grant_type' => 'client_credentials', 'client_secret' => $this->appSecret, 'client_id' => $this->appId, ] ); $resArray = json_decode($res, true); if(isset($resArray['access_token']) && isset($resArray['expires_in'])){ $huaweiToken = $resArray['access_token']; } return $huaweiToken; } //单播消息 function sendAndroidUnicast($device_tokens,$title,$text,$param = []) { $huaweiToken = $this->onToken(); try { $body = array();//仅通知栏消息需要设置标题和内容,透传消息key和value为用户自定义 $body['title'] = $title;//消息标题 $body['content'] = $text;//消息标题 $para = array(); $para['appPkgName'] = '';//定义需要打开的appPkgName $action = array(); $action['param'] = $para;//消息点击动作参数 $action['type'] = 3;//类型3为打开APP,其他行为请参考接口文档设置 $msg = array(); $msg['action'] = $action;//消息点击动作 $msg['type'] = 3;//3: 通知栏消息,异步透传消息请根据接口文档设置 $msg['body'] = $body;//通知栏消息body内容 $ext = array();//扩展信息,含BI消息统计,特定展示风格,消息折叠。 $ext['biTag'] = 'Trump';//设置消息标签,如果带了这个标签,会在回执中推送给CP用于检测某种类型消息的到达率和状态 $ext['icon'] = "";//自定义推送消息在通知栏的图标,value为一个公网可以访问的URL $hps = array();//华为PUSH消息总结构体 $hps['msg'] = $msg; $hps['ext'] = $ext; $payload = array(); $payload['hps'] = $hps; $res = http_post( 'https://api.push.hicloud.com/pushsend.do?nsp_ctx=' . urlencode('{"ver":"1", "appId":"******"}'), [ 'access_token' => $huaweiToken, 'nsp_svc' => 'openpush.message.api.send', 'nsp_ts' => (int)time(), 'device_token_list' => json_encode([$device_tokens]), 'payload' => json_encode($payload), ] ); //var_dump(json_decode($res, true));//查看结果 } catch (Exception $e) { print("Caught exception: " . $e->getMessage()); } }
}
注:
http_post 自己封装一个http_curl的方法就行。
/** * 发送HTTP请求方法 * @param string $url 请求URL * @param array $postData 请求参数 * @param array $header 请求头 * @return array $data 响应数据 */ function http_post($url, $postData = [], $formUrlencoded = true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $header = ['Content-Type: application/x-www-form-urlencoded; charset=utf-8']; if ($header) { curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if ($postData) { curl_setopt($ch, CURLOPT_POST, true); //如果不用http_build_query你就会踩到坑的,你可以试试 if($formUrlencoded){ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); }else{ curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); } } $response = curl_exec($ch); if ($errno = curl_errno($ch)) { $error = curl_error($ch); $this->errmsg = $error; $this->errno = $errno; curl_close($ch); return false; } curl_close($ch); return $response ; }