Почему не работает скрипт для метода execute VK API?

196
28 июля 2018, 14:40

Имеем PHP скрипт для VK API. Скрипт создает запись в открытых группах ВК (метод wall.post) методом execute, т. е. один скрипт должен создавать записи сразу в нескольких сообществах.

<?php
$token = file_get_contents('token.txt');
$code = 'var params = {
  "message": "test",
  "from_group": 0,
};
var out = { "result": [] };
params.owner_id = -84832628; 
out.result.push( API.wall.post(data));
params.owner_id = -154893317; 
out.result.push( API.wall.post(data));
params.owner_id = -39257424;
out.result.push( API.wall.post(data));
return out;';
$url = sprintf('https://api.vk.com/method/execute?');
$ch = curl_init();
curl_setopt_array( $ch, array (
  CURLOPT_URL            => $url,
  CURLOPT_POST           => TRUE,
  CURLOPT_RETURNTRANSFER => TRUE,
  CURLOPT_SSL_VERIFYPEER => FALSE,
  CURLOPT_SSL_VERIFYHOST => FALSE,
  CURLOPT_POSTFIELDS     => array(
    "code"         => $code,
    "access_token" => $token,
    "v"            => '5.80',
  ),
));
$result = curl_exec($ch);
curl_close($ch);
if(!$result){
  printf('Ошибка. Пост не опубликован!');
  exit;
}
$data = json_decode($result);
if(!$data){
  printf('ВК вернул не json!');
  exit; 
}
if($data->error || !$data->response){
  printf('ВК вернул ошибку %s', json_encode($data->error));
  exit; 
}
$response = $data->response;
foreach($response as $wall_post_result) {
  echo 'post_id: ' . $wall_post_result->post_id . PHP_EOL;
}

При выполнении вернул ошибку:

ВК вернул ошибку {"error_code":12,"error_msg":"Unable to compile code: undefined identifier 'data' in line 8","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"execute"},{"key":"code","value":"var params = {\r\n \"message\": \"test\",\r\n \"from_group\": 0,\r\n};\r\nvar out = { \"result\": [] };\r\n\r\nparams.owner_id = -84832628; \r\nout.result.push( API.wall.post(data));\r\n\r\nparams.owner_id = -154893317; \r\nout.result.push( API.wall.post(data));\r\n\r\nparams.owner_id = -39257424;\r\nout.result.push( API.wall.post(data));\r\n\r\nreturn out;"},{"key":"v","value":"5.80"}]}

Большая просьба подсказать что и в каком месте делаю не правильно. Заранее благодарю за внимание!

Answer 1

У вас в коде не определена переменная data в строке API.wall.post(data);, вам стоит лишь заменить data на params и все будет работать.

Получится следующий execute код:

var params = {
  "message": "test",
  "from_group": 0,
};
var out = { "result": [] };
params.owner_id = -84832628; 
out.result.push(API.wall.post(params));
params.owner_id = -154893317; 
out.result.push(API.wall.post(params));
params.owner_id = -39257424;
out.result.push(API.wall.post(params));
return out;

И результатом данного кода будет следующий ответ:

{
  "response": {
    "result": [{
      "post_id": 14627
    }, {
      "post_id": 6883
    }, {
      "post_id": 7239823
    }]
  }
}
READ ALSO
Yii2 выборка gridview с условием dropdownlist

Yii2 выборка gridview с условием dropdownlist

Yii2 я изучаю недавно, и столкнулся с такой проблемойСуть задачи: вывести всех студентов специальности

165
Добавление записей в google sheets при помощи php

Добавление записей в google sheets при помощи php

Кто знаком с api google sheets, не могли бы подсказать, что не так с данным кодом? Выдает ошибку в последней строке кодаПросьба не кидать ссылки на документацию

174
Подключение к COM порту через PHP

Подключение к COM порту через PHP

Требуется настроить отправку и получение SMS через GSRS- модем (используется GPRS-модем iRZ MC52iT)Сообщения будут хранится в базе и предполагается,...

190