PDA

Просмотр полной версии : VkAPi


kotov
23.07.2019, 10:18
Следующий код, вк просто флудит на него запросами о новых сообщениях, видимо не принимает слово Ок, как решить?

PHP:






type)
{
case 'confirmation':
echo $VK_CONFIRM;
break;
case "message_new":
$userId = $data->object->user_id;
$request_params = array(
'message' => "Ты чето написал, я определил",
'chat_id' => '1',
'access_token' => $VK_TOKEN,
'v' => '5.0'
);
$get_params = http_build_query($request_params);
echo "Ok";
file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
break;
}
?>

itsLegend
23.07.2019, 12:06
видимо не принимает слово Ок


Что это значит?

Если ты делаешь LongPoll запрос, то в коде что-то явно не хватает. Например, первоначального запроса.

У ВК есть PHP SDK. Воспользуйся им.

xISRAPILx
23.07.2019, 12:11
Что это значит?
Если ты делаешь LongPoll запрос, то в коде что-то явно не хватает. Например, первоначального запроса.
У ВК есть PHP SDK. Воспользуйся им.


У него там Callback, можно понять по php://input. В Callback нужно отдавать в ответ "ok", для подтверждения правильной обработки запроса, иначе ВК будет стучаться пока не получит ok.



Следующий код, вк просто флудит на него запросами о новых сообщениях, видимо не принимает слово Ок, как решить?

PHP:












Измени "Ok" на "ok".

альбертио представляет
25.07.2019, 15:28
1) У тебя включены возможности выводов всех возможных варнингов на страницу, а не прямиком в логи.

Замени строки:

PHP:






ini_set
(
'error_resporing'
,
false
)
;
ini_set
(
'display_errors'
,
false
)
;
ini_set
(
'display_startup_errors'
,
false
)
;




2) За счет 1-го пункта твой сервер возвращал Notices/Warnings/Errors, но никак не Ok.

P.S. Там выше написали, что заменить Ok на ok - роли не играет.

3) В PHP быстрее работают массивы с ассоциативными ключами, нежели объекты:

PHP:






$user_id
=
(
int
)
$data
[
'object'
]
[
'user_id'
]
;




Для этого замени строку на:

PHP:






$data
=
json_decode
(
file_get_contents
(
"php://input"
)
,
true
)
;
//вторым аргументом в функции json_decode() мы разрешили использовать ассоциативный массив, а не объект




4) Для полной оптимизации, после того, как ты подтвердил ключ (метод confirmation), можешь перед json_decode() вставить следущее:

PHP:






echo
'ok'
;
fastcgi_finish_request
(
)
;




В таком случае, твой сервер сначала выдаст ответ 'ok' (HTTP 200 OK) и закроект соединение с Callback API, а потом уже начнет обрабатывать запрос. Это лучше тем, что Callback API не будет флудить твоему серверу запросами, если, к примеру, у тебя в скрипте идет перебор больших значений. Дело в том, что у Callback API установлен лимит ожидания ответа на 10 секунд.