@pirammax

Как отправить СМС в VK API при помощи secure.sendSMSNotification на PHP?

Как сделать правильно? Вот мой код, который всегда возвращает ошибку №5 "User authorization failed: you should pass client_secret param to use secure methods":

<?php
  // параметры
  $target="12345"; // кому направляется приложение

  // параметры приложения
  $client_id="12345"; // id приложения
  $client_secret="AAAAAAaaaaaaaBBBBBB000000"; // секретный ключ приложения

  // работа с POST
  function postdata($url, $data)
  {
    $uagent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0";

    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
    curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
    curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
    curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
    curl_setopt($ch, CURLOPT_POST, 1);             // использовать POST-запрос
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   // POST-данные
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа

    $content = curl_exec( $ch );    // получить содержимое
    $header  = curl_getinfo( $ch ); // получить заголовок
    $errmsg  = curl_error( $ch );   // получить сообщение ошибки
    $err     = curl_errno( $ch );   // получить номер ошибки

    curl_close( $ch ); // очистить память

    $result['content'] = $content;
    $result['errmsg']  = $errmsg;
    $result['errno']   = $err;

    return $result;
  }

  // определить access_token
  $data    = "client_id=". $client_id ."&client_secret=". $client_secret ."&grant_type=client_credentials&v=5.26&test_mode=1";
  $content = postdata("https://oauth.vk.com/access_token", $data);

  // декодирование
  $response = json_decode($content['content']);

  // вывести ответ
  print_r($response);

  // спарсить access_token
  $access_token = $response->access_token;

  // готовим запрос на отправку SMS
  $data    = "access_token=". $access_token ."&user_id=". $target ."&message=TEST&v=5.26&test_mode=1";
  $content = postdata("https://api.vk.com/method/secure.sendSMSNotification", $data);

  // декодирование
  $response = json_decode($content['content']);

  // вывести ответ
  print_r($response);
  • Вопрос задан
  • 2487 просмотров
Пригласить эксперта
Ответы на вопрос 1
KorsaR-ZN
@KorsaR-ZN
Во-первый, серверные методы не поддерживают тестовый режим, об этом в документации написано.
Во-вторых, вы не правильно его вызываете и в ошибке об этом написано...
Добавьте в параметры к вызову данного метода, параметр - client_secret значение из поля защищенный ключ в настройках приложения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы