Deathfinite
@Deathfinite
Мастер по воде и костылям в PHP

File_get_contents не работает. Что я делаю не так?

я оч тупой и не понимаю в упор, что я делаю не так.
просвятите идиота.
спойлер: у меня сервер = вдс, где всё настроил правильно в пхп. и file_get_contents с curl-ом работают. да и сама ссылка корректна совершенно, сколько проверял.

function replyWI($chat,$text,$numbuttons,$buttonsarr = []){
        $arr = '{"buttons":[[';
        $arraynum = 1;
        foreach($buttonsarr as $buttons){
        if ($arraynum != $numbuttons){
        $arr .= '{"action":{"type":"text","label":"'. $buttons .'","payload":"{\"button\":\"'. $arraynum .'\"}"}},';    
        }
        else{
        $arr .= '{"action":{"type":"text","label":"'. $buttons .'","payload":"{\"button\":\"'. $arraynum .'\"}"}}';    
        }
        ++$arraynum;
        }
        $arr .= ']],"inline":true}';
        $arr = json_encode($arr, JSON_UNESCAPED_UNICODE);
        $random_id = random_int(1,9999999);
        $link = 'https://api.vk.com/method/execute?access_token=123123&v=5.103&code=return%20API.messages.send({"random_id":'. $random_id .',"peer_id":'. $chat .',"message":"'. $text .'","group_id":123123123"keyboard": '. $arr .'});';
        return json_decode(file_get_contents($link),true);
    }

replyWI($peer_id,"Текстик.",2,[1 => "ван", 2 => "ту"]);


если я вообще всё не так сделал - ну, помогите тупому x) я слепой совсем
п.с.: тэги такие ибо это для бота. да, я решил сделать функцию, вместо кучи кода - зачем везде одно и то же вставлять, когда можно сделать функцию.
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
Deathfinite
@Deathfinite Автор вопроса
Мастер по воде и костылям в PHP
В общем, я решил всё по-китайски и решил взять функцию, что предложил edward_freedom, а свою функцию заставить генерировать code для execute. Чтобы было проще, сделал функцию, чтобы не вводить две строки. 8)

Кому интересно, что получилось, код ниже.
А вот если есть идеи, как что-то иначе сделать, можете писать сюда в комментарии. Я буду читать всё и отвечать тоже по возможности. 8)

+ спасибо за просветление в юзер-агенты zkrvndm. Мне, возможно, это поможет. :)

<?php

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
header('Content-Type: text/html; charset= utf-8'); 
class idiot{

    private $token = '';
    private $v = '';

    public function __construct($token, $v){
        $this->token = $token;
        $this->v = $v;
    }

    public function replyWithInline($c,$t,$nb,$ba = []){
        $codethis = $this->keyboardGen($c,$t,$nb,$ba);
        $this->request("execute", ["code" => $codethis]);
    }
    
    private function keyboardGen($chat,$text,$numbuttons,$buttonsarr = []){
        header('Content-Type: text/html; charset= utf-8'); 
        $arr = '{"buttons":[[';
        $arraynum = 1;
        foreach($buttonsarr as $buttons){
        if ($arraynum != $numbuttons){
        $arr .= '{"action":{"type":"text","label":"'. $buttons .'","payload":"{\"button\":\"'. $arraynum .'\"}"}},';    
        }
        else{
        $arr .= '{"action":{"type":"text","label":"'. $buttons .'","payload":"{\"button\":\"'. $arraynum .'\"}"}}';    
        }
        ++$arraynum;
        }
        $arr .= ']],"inline":true}';
        $arr = json_encode($arr, JSON_UNESCAPED_UNICODE);
        $random_id = random_int(1,9999999);
        $code = 'return API.messages.send({"random_id":'. $random_id .',"peer_id":'. $chat .',"message":"'. $text .'","group_id":188141677,"keyboard": '. $arr .'});';
        return $code;
    }
    private function request($method, array $params){
        $params['v'] = '5.103';
        $ch = curl_init('https://api.vk.com/method/' . $method . '?access_token=' . $this->token);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        $data = curl_exec($ch);
        curl_close($ch);
        $json = json_decode($data, true);
        //print_r($json);
        if (!isset($json['response'])) {
            // throw new \Exception($data);
            return $json;
        }
        return $json['response'];
        }
    }
    
const VK_KEY = "1111111111111111";
const VERSION = "5.хх"; 

$a = new idiot(VK_KEY,VERSION);
$t = $a->replyWithInline(2000000001,"text",2,[1=>"ora",2=>"muda"]);
echo $t;

?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zkrvndm
Веб-разработчик
У меня одно время тоже гет контент не работал, в упор не мог понять в чем проблема. Оказалось проблема была не в скрипте, а в том, что конечный сайт блокировал все запросы от подозрительных юзер агентов. Короче, мне помогла установка правильного заголовка, замаскировал юзер агент под хром и все заработало.

Попробуйте и вы:
https://yandex.ru/search/touch/?text=file_get_cont...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 100 000 руб.
Teamlead Ставрополь
от 25 000 до 50 000 руб.
от 60 000 до 80 000 руб.
17 нояб. 2019, в 00:48
2000 руб./за проект
16 нояб. 2019, в 22:17
500 руб./за проект
16 нояб. 2019, в 22:10
2000 руб./за проект