Quickblox: пользовательское изображение или аватар успешно загружены через API, но без предварительного просмотра в админ-панели quickblox?

Панель администратора Quickblox в состоянии изображений в разделе содержимого имеет статус Загружен, но предварительное изображение не просматривается, а ссылка AWS (amazons3) не работает.

Шаг 1 — Создайте сеанс с использованием учетной записи quickblox (основной учетной записи) и получите токен сеанса из ответа.

Шаг 2 — Войдите в API пользователя, используя учетные данные пользователя и токен сеанса.

Шаг 3 — Создаем большой двоичный объект и из ответа извлекаем все параметры информации о большом двоичном объекте и создаем массив json.

Шаг 4 — Загружаем пользовательское изображение / аватар и получаем ответ

    HTTP/1.1 100 Continue

HTTP/1.1 201 Created
x-amz-id-2: CaF37TJwdt0PZjGdquV4yQSeNqtDyWrZge1DfkBinhNdhHYb635nsWcECFhUoRgiYzuAAxf+z2Q=
x-amz-request-id: F24A002779D03E34
Date: Tue, 21 Mar 2017 13:15:17 GMT
ETag: "3b45dadd80ddb4019e129e1c8469ca40"Location: http://qbprod.s3.amazonaws.com/2e5b9610a6ff4a8395ade21377def2f500
Content-Type: application/xml
Content-Length: 269
Server: AmazonS3

Шаг 5 — Объявленный файл загружен.

Шаг 6 — Связанный идентификатор BLOB-объекта с пользователем API.

Вот мой весь код, скажите мне, что я делаю неправильно:

примечание: учетные данные не являются реальными.

<?php

$quickblox_user_name = "quickblox_agicent"; //quickblox account
$quickblox_password = "quickblox@123";

$user_login = "quickblox_qb_130"; //API
$user_pwd = "21663496";

$profile_pic = "c.png"; // image path
$file_size = filesize($profile_pic);

//CREATE SESSION
$session = createSession($quickblox_user_name,$quickblox_password);
$token = $session->token;

//LOGIN USER
$login_user        =    loginUser($user_login,$user_pwd,$token);
$login_user_decode  =   json_decode($login_user);
$log_in                =    $login_user_decode->user;
$user_id              =     $log_in->id;

//CREATE A BLOB
$create_blob   =    createBlob($profile_pic, $token);
$res           =    json_decode($create_blob)->blob;

$blob_id       =    $res->id;
$name         =     $res->name;
$size         =     $res->size;
$res_en         =   json_encode($res->blob_object_access);
$rr             =   json_decode($res_en);
$get_params =   $rr->params;

//EXTRACTING BLOB PARAMETER FROM QUERY STRING
$Query_String            = explode("&", explode("?", $get_params)[1] );
$content_type            = urldecode(substr($Query_String[0], strpos($Query_String[0], "=") + 1));
$expires                  = urldecode(substr($Query_String[1], strpos($Query_String[1], "=") + 1));
$acl                      = substr($Query_String[2], strpos($Query_String[2], "=") + 1);
$key                      = substr($Query_String[3], strpos($Query_String[3], "=") + 1);
$policy                    = substr($Query_String[4], strpos($Query_String[4], "=") + 1);
$success_action_status  = substr($Query_String[5], strpos($Query_String[5], "=") + 1);
$x_amz_algorithm          = substr($Query_String[6], strpos($Query_String[6], "=") + 1);
$x_amz_credential        = urldecode(substr($Query_String[7], strpos($Query_String[7], "=") + 1));
$x_amz_date                = substr($Query_String[8], strpos($Query_String[8], "=") + 1);
$x_amz_signature          = substr($Query_String[9], strpos($Query_String[9], "=") + 1);

//CREATE JSON ARRAY OF EXTRATED PARAMETER
$fields = array
(
"Content-Type"           => $content_type,
"Expires"                 => $expires,
"acl"                     => $acl,
"key"                     => $key,
"policy"                   => $policy,
"success_action_status" => $success_action_status,
"x-amz-algorithm"         => $x_amz_algorithm,
"x-amz-credential"       => $x_amz_credential,
"x-amz-date"               => $x_amz_date,
"x-amz-signature"         => $x_amz_signature,
"file"                   => "@".$profile_pic
);

//UPLOAD AVATAR / IMAGE
$upload_avatar = uploadAvatar($fields);
$resPP       = json_decode($upload_avatar);

//DECLARE FILE UPLOAD
$declare_upload_avatar = declareUploadAvatar($file_size,$blob_id,$token);

//CONNECT BLOB ID TO API USER
$resultConnect = connectBlobToUser($blob_id,$user_id,$token);//FUNCTIONS
function createSession($login,$pwd)
{
// Application credentials - change to yours (found in QB Dashboard)
DEFINE('APPLICATION_ID', 12345);
DEFINE('AUTH_KEY', "MDJ8979q328");
DEFINE('AUTH_SECRET', 'asDCE-JLDJCEU');
DEFINE("RESETPWD_BASE_URL", strtolower(stristr($_SERVER["SERVER_PROTOCOL"], "/", true)) . "://" . $_SERVER["HTTP_HOST"] ."/img");

// User credentials
DEFINE('USER_LOGIN', $login);
DEFINE('USER_PASSWORD', $pwd);

// Quickblox endpoints
DEFINE('QB_API_ENDPOINT', "https://api.quickblox.com");
DEFINE('QB_PATH_SESSION', "session.json");

// Generate signature
$nonce = rand();
$timestamp = time();
$signature_string = "application_id=".APPLICATION_ID."&auth_key=".AUTH_KEY."&nonce=".$nonce."&timestamp=".$timestamp."&user[login]=".USER_LOGIN."&user[password]=".USER_PASSWORD;

$signature = hash_hmac('sha1', $signature_string , AUTH_SECRET);

$post_body = "application_id=" . APPLICATION_ID . "&auth_key=" . AUTH_KEY . "&timestamp=" . $timestamp . "&nonce=" . $nonce . "&signature=" . $signature . "&user[login]=" . USER_LOGIN . "&user[password]=" . USER_PASSWORD;

// Configure cURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, QB_API_ENDPOINT . '/' . QB_PATH_SESSION); // Full path is - https://api.quickblox.com/session.json
curl_setopt($curl, CURLOPT_POST, true); // Use POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_body); // Setup post body
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Receive server response
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_CAINFO,RESETPWD_BASE_URL."/quickblox.com.crt");

// Execute request and read response
$response = curl_exec($curl);
$responseJSON = json_decode($response);
// Check errors
if ($response)
{
$rs = json_decode($response)->session;
return $rs;

} else {
echo "0";
//  $error = curl_error($curl). '(' .curl_errno($curl). ')';
//  echo $error . "\n";
}

// Close connection
curl_close($curl);

}

function loginUser($login1,$pwd1,$token)
{
$requestCred =  '{"login": "'.$login1.'", "password": "'.$pwd1.'"}';

$ch = curl_init('http://api.quickblox.com/login.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestCred);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'QuickBlox-REST-API-Version: 0.1.1',
'QB-Token: ' . $token
));
$res = curl_exec($ch);
curl_close( $ch );

return $res;
}

function createBlob($profile_pic,$token)
{
$ext               =    pathinfo($profile_pic, PATHINFO_EXTENSION);
if($ext == 'png' || $ext == "Png" || $ext == "PNG")
$request =  '{"blob": {"content_type": "image/png", "name": "'.$profile_pic.'", "public": "true"}}';
else
$request =  '{"blob": {"content_type": "image/jpeg", "name": "'.$profile_pic.'"}}';

$ch = curl_init('http://api.quickblox.com/blobs.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'QuickBlox-REST-API-Version: 0.1.1',
'QB-Token: ' . $token
));
$res = curl_exec($ch);
curl_close( $ch );

return $res;
}

function uploadAvatar($fields)
{
$ch = curl_init('http://qbprod.s3.amazonaws.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS,  $fields );
$res = curl_exec($ch);
curl_close( $ch );

return $res;
}

function declareUploadAvatar($file_size,$blob_id,$token)
{
$request_size =     '{"blob": {"size": '.$file_size.'}}';
$ch = curl_init("http://api.quickblox.com/blobs/".$blob_id."/complete.json/");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,  $request_size );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'QuickBlox-REST-API-Version: 0.1.1',
'QB-Token: ' . $token
));
$res = curl_exec($ch);
curl_close( $ch );

return $res;
}

function connectBlobToUser($blob_id,$user_id,$token)
{
$update_user =  '{"user": {"blob_id": '.$blob_id.'}}';
$ch = curl_init("http://api.quickblox.com/users/$user_id.json/");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,  $update_user );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'QuickBlox-REST-API-Version: 0.1.1',
'QB-Token: ' . $token
));
$res = curl_exec($ch);
curl_close( $ch );

return $res;
}

?>

2

Решение

Перед запросом curl вы должны создать новый объект CURLFile
и использовать его в массиве $ fields.

        $file_ext  = mime_content_type($profile_pic);
$file_path = realpath($profile_pic);
$curl_file = new CURLFile($file_path, $file_ext, $profile_pic);

$fields = array
(
"Content-Type"          => $content_type,
"Expires"               => $expires,
"acl"                   => $acl,
"key"                   => $key,
"policy"                => $policy,
"success_action_status" => $success_action_status,
"x-amz-algorithm"       => $x_amz_algorithm,
"x-amz-credential"      => $x_amz_credential,
"x-amz-date"            => $x_amz_date,
"x-amz-signature"       => $x_amz_signature,
"file"                  => $curl_file
);

Вы можете прочитать о CURLOPT_POSTFIELDS здесь: http://php.net/manual/en/class.curlfile.php

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]