P
P
pirammax2014-11-29 09:32:26
PHP
pirammax, 2014-11-29 09:32:26

How to send SMS to VK API using secure.sendSMSNotification in PHP?

How to do it right? Here is my code that always returns error #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);

Answer the question

In order to leave comments, you need to log in

1 answer(s)
K
KorsaR-ZN, 2015-01-05
@KorsaR-ZN

Firstly, server methods do not support test mode, this is written in the documentation.
Secondly, you call it incorrectly and the error says about it...
Add to the parameters to the call of this method, the parameter - client_secret value from the protected key field in the application settings.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question