Ниже я привожу полностью готовый PHP код для публикации
ТЕКСТ + КАРТИНКИ.
Примечание*:
$images - массив с URL картинок вида: ["..path/img/cat.jpg","..path/img/dog.jpg"], его вы сформируете сами. А так же все остальные необходимые переменные ( токен, key и т.д. ) и передавайте в эту функцию
ok_wall_post() и все будет работать.
$images = []; // <- массив с URL картинок вида: ["..path/img/cat.jpg","..path/img/dog.jpg"]
$message = 'String'; // <- Message
$user = [] // <-массив с данными пользователя (id, token, и т.д., какие данные у вас хранятся). В этом коде здесь находится token: $user['access_token']
$application_key = 'String' // <- Публичный ключ приложения -- присылается по e-mail после регистрации приложения
$session_secret_key = 'String' // <- Session_secret_key приложения -- присылается по e-mail после регистрации приложения
$application_secret_key = 'String' // <- Секретный ключ приложения -- присылается по e-mail после регистрации приложения
function ok_wall_post($user, $message, $images, $application_key, $application_secret_key, $session_secret_key) {
function getUrl($url, $type = "GET", $params = array(), $image = false, $decode = true) {
if ($ch = curl_init()) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
if ($type == "POST") {
curl_setopt($ch, CURLOPT_POST, true);
// Картинка
if ($image) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
// Обычный запрос
elseif($decode) {
curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
}
// Текст
else {
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
}
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close($ch);
// Еще разок, если API завис
if (isset($data['error_code']) && $data['error_code'] == 5000) {
$data = getUrl($url, $type, $params);
}
return $data;
} else {
return "{}";
}
}
$arrPhotos = Array(); // <- Сюда будем складывать массивы с парами Array('id' => $photo_token);
foreach ($images as $image) { // $images - массив с URL картинок вида: ["..path/img/cat.jpg","..path/img/dog.jpg"]
$params = [
'application_key' => $application_key, // Публичный ключ приложения
'session_secret_key'=> $session_secret_key, // Session_secret_key
'access_token' => $user['access_token'], // access_token
'method' => 'photosV2.getUploadUrl',
'format' => 'json'
];
ksort($params);
$paramsS='';
foreach($params as $k=>$v) {
$paramsS .= $k . "=" . $v;
}
$sigg = md5($paramsS.$application_secret_key);
$params['sig'] = strtolower($sigg);
$photo_get_id = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
// echo '<pre>' . json_encode($photo_get_id, JSON_PRETTY_PRINT) . '</pre>';
$photo_send_id = $photo_get_id['photo_ids']['0'];
$upload_url = $photo_get_id['upload_url'];
$paramsP = array('pic1' => curl_file_create($image));
$photo_send = json_decode(getUrl($upload_url, "POST", $paramsP, true), true);
// echo '<pre>' . json_encode($photo_send, JSON_PRETTY_PRINT) . '</pre>';
$photo_token = $photo_send['photos'][$photo_send_id]['token'];
$arrPhotos[] = Array('id' => $photo_token);
// echo $photo_token . '<br>';
}
$media = array('media' =>
array(
array('type'=> 'text','text'=> $message),
array('type'=> 'photo', 'list'=> $arrPhotos),
),
);
$paramsArray = [
'application_key'=> $application_key,
'access_token'=> $user['access_token'],
'type'=> 'USER',
'attachment'=> json_encode($media),
'format' => 'json',
'method' => 'mediatopic.post',
];
ksort($paramsArray);
$paramsStr='';
foreach($paramsArray as $k=>$v) {
$paramsStr .= $k . "=" . $v;
}
$sig = md5($paramsStr.$application_secret_key);
$paramsArray['sig'] = strtolower($sig);
$status = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $paramsArray, false, false ), true);
//? echo $status . '<br>'; <- String
echo '<pre>' . json_encode($status, JSON_PRETTY_PRINT) . '</pre>';
}