Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Quickblox:用户图像或化身通过API成功上传,但未在Quickblox管理面板中预览?_Php_Api_Quickblox - Fatal编程技术网

Php Quickblox:用户图像或化身通过API成功上传,但未在Quickblox管理面板中预览?

Php Quickblox:用户图像或化身通过API成功上传,但未在Quickblox管理面板中预览?,php,api,quickblox,Php,Api,Quickblox,内容部分图像状态中的Quickblox管理面板已上载,但nethier图像正在预览,AWS(amazons3)链接也不起作用 步骤1-使用quickblox帐户(主帐户)创建会话,并从响应中获取会话令牌 步骤2-使用用户凭据和会话令牌登录API用户 步骤3-创建一个blob,并从响应中提取所有blob信息参数,并生成一个json数组 步骤4-上传用户图像/化身并获得响应 HTTP/1.1 100 Continue HTTP/1.1 201 Created x-amz-id-2: CaF

内容部分图像状态中的Quickblox管理面板已上载,但nethier图像正在预览,AWS(amazons3)链接也不起作用

步骤1-使用quickblox帐户(主帐户)创建会话,并从响应中获取会话令牌

步骤2-使用用户凭据和会话令牌登录API用户

步骤3-创建一个blob,并从响应中提取所有blob信息参数,并生成一个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 id连接到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;
        }

        ?>

在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的信息: