API OneSignal с CURL я получаю эту ошибку (пожалуйста, включите чувствительный к регистру заголовок Authorization: Basic или Bearer token="" с действительным ключом REST API

Я хочу отправить уведомление целевому объекту (сегменты), например ["Активные пользователи"] с параметром "included_segments", но когда я вызываю API с помощью CURL в PHP, я получаю эту ошибку: (Пожалуйста, включите заголовок с учетом регистра Authorization: Basic или Bearer token="" с действительным ключом REST API.).

однако код работает хорошо, когда я меняю цель с параметра "included_segments" на "include_player_ids" .. но я хочу "included_segments" .. ПОМОГИТЕ мне!.

ССЫЛКА на справочник REST API

  • это мой код: `
function Copts($titlEN,$titlAR,$contEN,$contAR,$icon,$img){

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://onesignal.com/api/v1/notifications',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS =>'{
        "app_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "included_segments": ["Active Users"],
        "contents": {"en": "'.$contEN.'"},
        "headings": {"en": "'.$titlEN.'"},
        "global_image": "'.$img.'",
        "large_icon": "'.$icon.'"
      }',
    CURLOPT_HTTPHEADER => array(
      'Content-Type: application/json; charset=utf-8',
      'Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    )
));
 
return json_decode(curl_exec($curl),true);

}

`

Что работает, а что не работает?

Misunderstood 19.11.2022 06:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может помочь, если вы покажете значения: ($titlEN,$titlAR,$contEN,$contAR,$icon,$img)

Добавьте это в свой CURLOPT_HTTPHEADER

'Accept: application/json'

Я посмотрел пример curl в документации
Это их пример:

curl --request POST \
     --url https://onesignal.com/api/v1/notifications \
     --header 'Authorization: Basic YOUR_REST_API_KEY' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
     "app_id": "string",
     "included_segments": [
          "string"
     ],
     "external_id": "string",
     "contents": {
          "en": "English or Any Language Message",
          "es": "Spanish Message"
     },
     "name": "INTERNAL_CAMPAIGN_NAME",
     "send_after": "string",
     "delayed_option": "string",
     "delivery_time_of_day": "string",
     "throttle_rate_per_minute": 0
}'

Вот как их curl переводится в PHP с помощью https://curlconverter.com/php/:
Я думаю, что все \n и лишние пробелы можно убрать.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://onesignal.com/api/v1/notifications');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization' => 'Basic YOUR_REST_API_KEY',
    'accept' => 'application/json',
    'content-type' => 'application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '\n{\n     "app_id": "string",\n     "included_segments": [\n          "string"\n     ],\n     "external_id": "string",\n     "contents": {\n          "en": "English or Any Language Message",\n          "es": "Spanish Message"\n     },\n     "name": "INTERNAL_CAMPAIGN_NAME",\n     "send_after": "string",\n     "delayed_option": "string",\n     "delivery_time_of_day": "string",\n     "throttle_rate_per_minute": 0\n}');

не рекомендую использовать

 curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization' => 'Basic YOUR_REST_API_KEY',
        'accept' => 'application/json',
        'content-type' => 'application/json',
    ]);

Используйте это, чтобы сделать ваш HTTPHEADER:

$headers = array();
$headers[] = 'Authorization: Basic YOUR_REST_API_KEY';
$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';

curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);

Я предпочитаю индивидуальность curl_setopt()
а не curl_setopt_array()
но я стар, почти 70 лет.
и моя фотография профиля актуальна.

Я попробовал предложенные вами модификации, но безрезультатно. НО я обнаружил, что источником проблемы были REST API KEYS. мне поставили USER AUTH KEY вместо REST API KEYS, я нашел его здесь: dashboard -> settings -> keys & ids. я хочу поблагодарить вас за то, что вы пытаетесь мне помочь, и независимо от вашего возраста вы всегда будете из золота .. СПАСИБО.

ertibi 19.11.2022 17:40
Ответ принят как подходящий

Проблема заключалась в том, что КЛЮЧИ REST API неверны. USER AUTH KEY вместо REST API KEYS нашел здесь:

панель инструментов -> настройки -> ключи и идентификаторы

Смотрите документацию здесь: https://documentation.onesignal.com/docs/accounts-and-keys

.

Рад, что ты нашел это. Это было бы трудно для меня найти.

Misunderstood 19.11.2022 21:34

Другие вопросы по теме