PHP调用华为快应用消息推送接口

PHP通过curl方式调用华为快应用消息推送接口

      继上一篇推送vivo快应用接口,这一篇跟大家分享调用华为快应用消息推送接口。

      首先是调用请求逻辑,代码如下:

/**
 * 华为请求发送
 * @param $remote_server
 * @param $post_string
 * @param string $authToken
 * @return mixed
 */
function huaWeiRequestByCurl($remote_server, $post_string, $authToken = "")
{
    $authToken = str_replace("\\", "", $authToken);
    $Bearer = "Bearer " . $authToken;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $remote_server);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    //根据情况展示
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;charset=utf-8',
        'Authorization:' . $Bearer,
    ));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

/**
 * 华为curl请求
 * @param $dataParams
 * @param $urlApi
 * @return mixed
 */
function huaWeiCurlPost($dataParams, $urlApi)
{
    $data = http_build_query($dataParams);
    //初使化init方法
    $ch = curl_init();
    //指定URL
    curl_setopt($ch, CURLOPT_URL, $urlApi);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36');
    //设定请求后返回结果
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //声明使用POST方式来进行发送
    curl_setopt($ch, CURLOPT_POST, 1);
    //发送什么数据呢
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    //忽略证书
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    //忽略header头信息
    curl_setopt($ch, CURLOPT_HEADER, 0);
    //设置超时时间
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    //发送请求
    $output = curl_exec($ch);
    //关闭curl
    curl_close($ch);
    #json转数组
    $result = json_decode($output, true);
    #返回
    return $result;
}

       然后是获取AccessToken,代码如下:

/**
 * 华为-获取AccessToken
 * @param string $client_id
 * @param string $client_secret
 * @return string
 */
function getHuaWeiAccessToken($client_id = "", $client_secret = "")
{
    #请求地址
    $url = "https://login.cloud.huawei.com/oauth2/v2/token";
    #组合请求数据
    $dataParams = array(
        "grant_type" => "client_credentials",
        "client_id" => $client_id,
        "client_secret" => $client_secret,
    );
    #调取接口
    $getAccessToken = huaWeiCurlPost($dataParams, $url);
    #判断是否调用成功
    if (!isset($getAccessToken["access_token"])||(empty($getAccessToken["access_token"]))){
        return "";
    } else {
        return $getAccessToken["access_token"];
    }
}

      然后是消息推送逻辑,代码如下:

$client_id = "自己的client_id";
$client_secret = "自己的client_secret";
$accessToken = getHuaWeiAccessToken($client_id, $client_secret);
$userToken = "用户的regId";
$url = "https://push-api.cloud.huawei.com/v1/{$client_id}/messages:send";
$messageParams = array(
    "pushtype" => 0,
    "pushbody" => array(
        "title" => "消息通知!",
        "description" => "系统通知",
        "page" => "/",
        "params" => array("key1"=>"123"),
        "ringtone" => array(
            "vibration" => "true",
            "breathLight" => "true"
        )
    ),
);
$dataParams = array(
    "validate_only" => false,
    "message" => array(
        "data" => json_encode($messageParams),
        "android" => array("fast_app_target" => 2),
        "token" => array($userToken),
    ),
);
$post_string = json_encode($dataParams);
$data = huaWeiRequestByCurl($url, $post_string, $accessToken);
$result = json_decode($data, true);

       这样就完成了华为消息推送逻辑,但是不同vivo快应用消息推送,华为快应用消息推送一天只能接收到一次,也就是说,你发过一次,后面无论如何都是显示成功,但是设备不会再次收到。

0条评论

发表评论