Здравствуйте, столкнулся с непонятной проблемой. Пытаюсь добавить к медиатопику картинку, но после этого скрипт неправильно подписывает запрос. Прошу помочь разобраться. Без строки с photo всё работает нормально.
На всякий случай приведу весь код:
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
function getUrl($url, $type="GET", $params=array(), $timeout=30) {
if ($ch = curl_init()) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
if ($type == "POST") {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot');
$data = curl_exec($ch);
curl_close($ch);
return $data;
} else {
return "{}";
}
}
function arInStr($array) {
ksort($array);
$string = "";
foreach($array as $key=>$val) {
if (is_array($val)) {
$string .= $key."=".arInStr($val);
} else {
$string .= $key."=".$val;
}
}
return $string;
}
function uploadPhoto($url_upload){
$target=$url_upload;
$cfile = curl_file_create('testpic.jpg','image/jpg','pic1');
$imgdata = array('myimage' => $cfile);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $target);
curl_setopt($curl, CURLOPT_USERAGENT,'PHP Bot');
curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type: multipart/form-data'));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // stop verifying certificate
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true); // enable posting
curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata); // post images
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // if any redirection after upload
return $r = curl_exec($curl);
curl_close($curl);
}
$ok_access_token = "";//Наш вечный токен
$ok_private_key = "";//Секретный ключ приложения
$ok_public_key = "";//Публичный ключ приложения
$ok_group = ""; //ID группы
//
// Для photo
$params_p = array(
"application_key"=>$ok_public_key,
"method"=>"photosV2.getUploadUrl",
"gid"=>$ok_group,//ID нашей группы
"count"=>"1",//количество фото
"format"=>"json"
);
$sig = md5(arInStr($params_p).md5("{$ok_access_token}{$ok_private_key}"));
$params_p["access_token"]=$ok_access_token;
$params_p["sig"]=$sig;
$result = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params_p), true);
//Если парсер не смог открыть нашу ссылку (иногда он это делает со второй попытки), то отправляем ещё раз
if (isset($result['error_code']) && $result['error_code'] == 5000) {
$result = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params_p), true);
}
//var_dump($result);
echo 'Photo id: '.$photo_id=$result['photo_ids'][0];
echo '<br>';
echo 'URL: '.$url_upload=$result['upload_url'];
var_dump($result = json_decode(uploadPhoto($url_upload), true));
echo 'Photo token: '.$photo_token=$result['photos'][$photo_id]['token'];
// Конец photo
//
$params = array(
"application_key"=>$ok_public_key,
"method"=>"mediatopic.post",
"gid"=>$ok_group,//ID нашей группы
"type"=>"GROUP_THEME",
"attachment"=>'{"media": [
{"type": "photo", "list": [
{"id": "'.$photo_token.'"}
]},
{"type": "link","url": "https://www.google.com"},
{"type": "text", "text": "Текст в придачу"}
]}',
"format"=>"json"
);
$sig = md5(arInStr($params).md5("{$ok_access_token}{$ok_private_key}"));
$params["access_token"]=$ok_access_token;
$params["sig"]=$sig;
$result = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
//Если парсер не смог открыть нашу ссылку (иногда он это делает со второй попытки), то отправляем ещё раз
if (isset($result['error_code']) && $result['error_code'] == 5000) {
$result = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
}
var_dump($result);
?>
Часть кода включая подпись была взята из интернета. Сразу извиняюсь за плохое качество кода)
Проблема появляется в конце при последнем запросе. Выходит сообщение об ошибке:
array (size=3)
'error_code' => int 104
'error_msg' => string 'PARAM_SIGNATURE : Invalid signature ********, calculated by string application_key=*******Aattachment={"media": [
{"type": "photo", "list":[{"id": "hVyr0BrE6e pWLr2ULGgLrJ869Pfl 8797DbUoYbISX3bUxfxtkkEZXjdROoRkF6sLGbL2p6ARyzvM7447VWuuqxlJqazdYPxOqf4biSQQ/bYwU/2Dovj41EFmNIvLJPNYrzIBQ3BHy/b4FAuxiKHDAFgUP4sJXnnA2lgttIk8mc2VRdQf2nVQ=="}]},
{"type": "link","url": "https://www.google.com"},
{"type": "text", "text": "Текст в придачу"}
]}format=jsongi'... (length=591)
'error_data' => null