Я хочу отправить уведомление целевому объекту (сегменты), например ["Активные пользователи"] с параметром "included_segments", но когда я вызываю API с помощью CURL в PHP, я получаю эту ошибку: (Пожалуйста, включите заголовок с учетом регистра Authorization: Basic или Bearer token="" с действительным ключом REST API.).
однако код работает хорошо, когда я меняю цель с параметра "included_segments" на "include_player_ids" .. но я хочу "included_segments" .. ПОМОГИТЕ мне!.
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);
}
`
Может помочь, если вы покажете значения: ($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.
я хочу поблагодарить вас за то, что вы пытаетесь мне помочь, и независимо от вашего возраста вы всегда будете из золота .. СПАСИБО.
Проблема заключалась в том, что КЛЮЧИ REST API неверны. USER AUTH KEY вместо REST API KEYS нашел здесь:
панель инструментов -> настройки -> ключи и идентификаторы
Смотрите документацию здесь: https://documentation.onesignal.com/docs/accounts-and-keys
.
Рад, что ты нашел это. Это было бы трудно для меня найти.
Что работает, а что не работает?