Я пытаюсь отправить простые push-уведомления с помощью pushbullet, просто используя электронную почту и отправляя их на связанный аккаунт, чтобы избежать необходимости в данных аккаунта. (см. ссылку здесь: https://docs.pushbullet.com/#pushes)
Поэтому я использую не cURL-метод в php, который я (не только) нашел здесь:
Как отправить запрос POST с помощью PHP?
К сожалению, я получаю сообщение об ошибке следующим образом:
<br />
<b>Warning</b>: file_get_contents(https://api.pushbullet.com/v2/pushes): failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized
in <b>/path/to/function.php</b> on line <b>42</b><br />
bool(false)
Опция использования URL для file_get_contents установлена на «on».
Мой код:
$pushdata = array(
"email" => $email,
"type" => "link",
"title" => "Demo Pushbullet Notification",
"body" => "You have new comment(s)!",
"url" => "http://demo.example.com/comments");
//Post without cURL
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n"."Authorization: Bearer <xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>\r\n",
'method' => 'POST',
'content' => http_build_query($pushdata),
),
);
$context = stream_context_create($options);
$result = file_get_contents("https://api.pushbullet.com/v2/pushes", false, $context, -1, 40000);
var_dump($result);
РЕДАКТИРОВАТЬ: изменил код в ответ Кристоферхезе, по-прежнему не работает. Это также не должно требовать токенов доступа, поскольку я понимаю, что нажатие. Я понимаю это как продвижение уведомления от нейтрального к связанному электронному письму. Может быть, я ошибаюсь, но токен доступа не исправляет это.
РЕДАКТИРОВАТЬ (решено): токен доступа ЯВЛЯЕТСЯ необходимо выдвигать уведомления, и поскольку он не работает с этим методом, он работает с cURL.
Для этого вам нужно использовать cURL, чтобы вы могли передать ключ API в качестве заголовка, определенного в документации: https://docs.pushbullet.com/#http.
<?php
$curl = curl_init('https://api.pushbullet.com/v2/pushes');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: Bearer <your_access_token_here>']);
curl_setopt($curl, CURLOPT_POSTFIELDS, ["email" => $email, "type" => "link", "title" => "Demo Pushbullet Notification", "body" => "You have new comment(s)!", "url" => "http://demo.example.com/comments"]);
// UN-COMMENT TO BYPASS THE SSL VERIFICATION IF YOU DON'T HAVE THE CERT BUNDLE (NOT RECOMMENDED).
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
print_r($response);
ЭТОТ КОДЕКС ПОЛНОСТЬЮ ОТ ЛИЦА МОЕЙ ГОЛОВКИ И НЕ БЫЛ ПРОВЕРЕН
Я разбил параметры, чтобы вы могли их легко увидеть, но вы можете объединить их в массив и передать через curl_setoptarray($curl, []);
Похоже, вы пропустили токен доступа для вашей учетной записи пользователя. Вы можете найти это на https://www.pushbullet.com/account . Вы должны включить его в заголовок, такой как «Авторизация»: «Носитель ACCESS_TOKEN_HERE».
Я знаю, что это старый пост, но у меня были те же проблемы с sendgrid, который использует тот же метод авторизации: APAREY на предъявителя, что и на вашем сайте.
Я наконец-то заставил его работать, используя необработанный пост php, используя следующий код
$url = "your url";
$post_data = 'yourdata';
// Set the headers
$options = array('http' =>
array(
'method' => 'POST',
'header' => "Authorization: Bearer APIKEY\r\n" . 'Content-Type: application/x-www-form-urlencoded',
'content' => $post_data
)
);
// Send the POST data
$ctx = stream_context_create($options);
$fp = fopen($url, 'rb', false, $ctx);
// Read the POST data
$result = json_decode(stream_get_contents($fp));
echo "done";
Кажется, что переключение порядка заголовка и пропуск \ r \ n в конце, похоже, сработало. Я потратил целый час на то, чтобы попробовать разные комбинации, поэтому я решил опубликовать это для других.
Обратите внимание, что если вы используете API-интерфейс sendgrid, обязательно установите «Content-Type: application / json» и убедитесь, что ваши $ post_data находятся в json