PHP код:
<?php
class VKDataProvider {
protected $api_id;
protected $api_secret;
protected $db;
public function VKDataProvider($api_id, $api_secret){
$this->api_id=$api_id;
$this->api_secret=$api_secret;
}
public static $SEND_NOTIFICATION = 1;
public static $SAVE_APP_STATUS = 2;
public static $GET_APP_BALANCE = 3;
public static $USER_GET_BALANCE = 4;
public static $WITH_DRAW_VOTES = 5;
public static $ADD_VOTES = 6;
public static $GET_TRANSACTIONS = 7;
/*
PUBLIC
*/
public function init($api_id, $api_secret){
$this->api_id=$api_id;
$this->api_secret=$api_secret;
}
public function SendRequest($method, $data){
$data = $this->PrepareRequest($method,$data);
$ch = $this->PrepareCurl($data);
$response = curl_exec($ch);
if($method==self::$WITH_DRAW_VOTES){
$file2=fopen("logfile.txt","a");
fwrite($file2," \n".$data['uid']." RAW VK Data:". $response);
}
curl_close($ch);
$result = json_decode($response,true);
return $result;
}
/*
PRIVATE (PROTECTED)
*/
protected function PrepareCurl($postData){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.vkontakte.ru/api.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData);
/* REMOVE PROXY */
//curl_setopt($ch, CURLOPT_PROXY, '192.168.0.2:8080');
return $ch;
}
protected function PrepareRequest($method, $data){
$array = array();
$array['api_id'] = $this->api_id;
$array['random'] = mt_rand();
$array['timestamp'] = time();
$array['format'] = 'JSON';
$array['v']='2.0';
$array['method'] = $this->getMethod($method);
$array = array_merge($array, $data);
$array['sig'] = $this->Sign($array);
return $array;
}
protected function getMethod($method){
switch ($method){
case VKDataProvider::$SEND_NOTIFICATION:
$str = 'sendNotification';
break;
case VKDataProvider::$SAVE_APP_STATUS:
$str = 'saveAppStatus';
break;
case VKDataProvider::$GET_APP_BALANCE:
$str = 'getAppBalance';
break;
case VKDataProvider::$USER_GET_BALANCE:
$str = 'getBalance';
break;
case VKDataProvider::$WITH_DRAW_VOTES:
$str = 'withdrawVotes';
break;
case VKDataProvider::$ADD_VOTES:
$str = 'addVotes';
break;
case VKDataProvider::$GET_TRANSACTIONS:
$str = 'getTransactionsHistory';
break;
default:
$str = "error";
break;
}
return 'secure.'.$str;
}
protected function Sign($params){
$sparams = $params;
ksort($sparams);
$string = "";
foreach ($sparams as $key=>$value)
$string.=$key.'='.$value;
return md5($string.$this->api_secret);
}
}
?>
Пример использования:
PHP код:
$result = $vk->SendRequest(VKDataProvider::$SEND_NOTIFICATION, array('uids'=>$uids,'message'=>$text));
За один запрос можно послать не более 100 уидов. Так же ограничено количество запросов в секунду к серверу АПИ ВК. Максимум для обычного приложения, по-моему, 10 запросов в секунду.