Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Integrar o Alibaba Cloud SDK V2.0 para PHP

Última atualização: Jul 03, 2026

Ao chamar operações de API, recomendamos integrar o SDK ao seu projeto. Os SDKs simplificam o desenvolvimento, integram recursos rapidamente e reduzem significativamente os custos de O&M. Para usar o Alibaba Cloud SDK, execute as seguintes etapas: instale o SDK, configure uma credencial de acesso e utilize-o. Este tópico descreve como usar o Alibaba Cloud SDK.

Pré-requisitos

  • PHP 5.6 ou posterior instalado.

  • Composer instalado.

Importante

A versão do PHP usada para instalar o Alibaba Cloud SDK V2.0 via Composer deve ser igual ou anterior à versão usada para executá-lo. Por exemplo, a pasta vendor gerada após a instalação do Alibaba Cloud SDK V2.0 no PHP 7.2 só pode ser usada no PHP 7.2 ou posterior. Se você copiar a pasta vendor para o PHP 5.6, a dependência será incompatível com essa versão. Caso não consiga instalar o Composer devido a problemas de rede, execute o comando abaixo para usar a imagem completa do Composer fornecida pela Alibaba Cloud:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

Importar o SDK

  1. Faça login no SDK Center e selecione o serviço cujo SDK deseja utilizar. Neste exemplo, o Short Message Service (SMS) está selecionado.

  2. Na página Install, selecione V2.0 na lista suspensa SDK Generation e clique em PHP na seção All languages. Na aba Quick Start, obtenha o método de instalação do SDK do Short Message Service (SMS).

    image

Configurar uma credencial de acesso

Para chamar operações de API de um serviço da Alibaba Cloud, configure uma credencial de acesso, como um AccessKey pair ou um Security Token Service (STS) token. Para evitar vazamentos do par de AccessKey, armazene-o em variáveis de ambiente. Para mais informações sobre outras soluções de segurança, consulte Soluções de segurança de credenciais. Neste exemplo, as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET armazenam os pares de AccessKey.

Método de configuração no Linux e macOS

Configurar variáveis de ambiente usando o comando export

Importante

Uma variável de ambiente temporária definida com o comando export é válida apenas para a sessão atual. A variável é limpa quando a sessão termina. Para retenção de longo prazo (LTR), adicione o comando export ao arquivo de configuração de inicialização do seu sistema operacional.

  • Configure o AccessKey ID e pressione Enter.

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Configure o AccessKey secret e pressione Enter.

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Verifique a configuração.

    Execute o comando echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Se o retorno for o AccessKey ID correto, a configuração foi bem-sucedida.

Método de configuração no Windows

Usar a interface gráfica do usuário (GUI)

  • Procedimento

    As etapas a seguir descrevem como definir variáveis de ambiente usando a GUI no Windows 10.

    Na área de trabalho, clique com o botão direito em This PC e escolha Properties > Advanced system settings > Environment Variables > New em System variables ou User variables. Em seguida, conclua a configuração.

    Variável

    Valor de exemplo

    AccessKey ID

    • Nome da variável: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valor da variável: yourAccessKeyID

    AccessKey Secret

    • Nome da variável: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valor da variável: yourAccessKeySecret

  • Testar a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira cmd e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os retornos forem os valores corretos de AccessKey, a configuração foi bem-sucedida.

Usar o prompt de comando (CMD)

  • Procedimento

    Abra o prompt de comando como administrador e execute os seguintes comandos para adicionar novas variáveis de ambiente ao sistema.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    O parâmetro /M indica uma variável de ambiente do sistema. Você pode omitir esse parâmetro ao definir uma variável de ambiente de usuário.

  • Testar a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira cmd e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os retornos forem os valores corretos de AccessKey, a configuração foi bem-sucedida.

Usar o Windows PowerShell

No PowerShell, defina novas variáveis de ambiente válidas para todas as novas sessões:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

Para definir variáveis de ambiente para todos os usuários, são necessárias permissões administrativas:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

Defina variáveis de ambiente temporárias válidas apenas para a sessão atual:

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

No PowerShell, execute os comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID e Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Se os retornos forem os valores corretos de AccessKey, a configuração foi bem-sucedida.

Usar o SDK

Neste exemplo, chamamos a operação de API SendMessageToGlobe do Short Message Service (SMS). Para mais informações sobre SendMessageToGlobe, consulte SendMessageToGlobe.

1. Inicializar um cliente de requisição

No SDK, todas as requisições para operações de API partem de um cliente. Antes de chamar uma operação de API, inicialize o cliente de requisição. Existem vários métodos para essa inicialização. Neste exemplo, usamos um par de AccessKey. Para mais informações, consulte Gerenciar credenciais de acesso.

Importante
  • Objetos Client, como instâncias Dysmsapi, são thread-safe e podem ser usados em ambientes multithread sem riscos de segurança. Não é necessário criar uma instância para cada thread.

  • Em projetos de desenvolvimento, evite usar a palavra-chave new para criar objetos Client frequentemente. Caso contrário, o desperdício de recursos pode aumentar e o desempenho do serviço pode degradar. Recomendamos encapsular o cliente no padrão singleton. Isso garante que apenas uma instância Client seja inicializada para a mesma credencial de acesso e endpoint durante todo o ciclo de vida da aplicação.

public static function createClient(){
      $config = new Config([
            // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        $config->endpoint = "dysmsapi.aliyuncs.com";
        return new Dysmsapi($config);
    }

2. Criar um objeto de requisição

Ao chamar uma operação de API para passar parâmetros, utilize o objeto de requisição fornecido pelo SDK. Nomeie o objeto de requisição da operação de API no seguinte formato: <Nome da operação de API>Request. Por exemplo, o objeto de requisição da operação de API SendSms é SendSmsRequest. Para mais informações sobre os parâmetros, consulte a referência da API. Para detalhes sobre os parâmetros da operação SendMessageToGlobe, visualize SendMessageToGlobe.

Nota

Se a operação de API não suportar parâmetros de requisição, não será necessário criar um objeto de requisição. Por exemplo, a operação DescribeCdnSubList não aceita parâmetros de requisição.

// Create request object and set required input parameters
$sendMessageToGlobeRequest = new SendMessageToGlobeRequest([
            // Please replace with the actual recipient number.
            "to" => "<YOUR_VALUE>",
            // Please replace with the actual SMS content.
            "message" => "<YOUR_VALUE>"
        ]);

3. Iniciar uma requisição de API

Ao usar um cliente de requisição para chamar uma operação de API, recomendamos nomear a função no seguinte formato: <Nome da operação de API>WithOptions. Especifique <API operation name> em camel case. Essa função contém dois parâmetros: o objeto de requisição e o parâmetro de runtime. O objeto de requisição é criado na etapa anterior. O parâmetro de runtime serve para especificar ações da requisição, como configurações de timeout e proxy. Para mais informações, consulte Configuração avançada.

Nota

Se a operação de API não suportar parâmetros de requisição, não especifique um objeto de requisição na chamada. Por exemplo, ao chamar a operação DescribeCdnSubList, especifique apenas o parâmetro de runtime.

 // Create runtime parameters.
 $runtime = new RuntimeOptions([]);
 $client = self::createClient();
 // Send a request.
 $client->sendMessageToGlobeWithOptions($sendMessageToGlobeRequest, $runtime);

4. Tratar erros

O Alibaba Cloud SDK V2.0 para PHP classifica as exceções nos seguintes tipos:

  • TeaUnretryableException: Geralmente causada por problemas de rede e reportada quando o número máximo de tentativas é atingido.

  • InvalidArgumentException: Normalmente ocorre quando um parâmetro obrigatório não é especificado ou o tipo do parâmetro é inválido. Verifique a message de erro para localizar a falha.

  • TeaException: Na maioria dos casos, resulta de erros de negócio.

Para mais informações sobre como lidar com exceções do SDK, consulte Tratamento de exceções.

Importante

Recomendamos adotar medidas adequadas de tratamento de exceções, como relatar erros, registrar logs e realizar novas tentativas, para garantir a robustez e estabilidade do seu sistema.

Clique para visualizar o código de exemplo completo

Exemplo de : Chamar a operação SendMessageToGlobe

<?php
namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\SDK\Dysmsapi\V20180501\Dysmsapi;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20180501\Models\SendMessageToGlobeRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
require_once('vendor/autoload.php');

class Sample {

    public static function createClient(){
        $config = new Config([
            // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        $config->endpoint = "dysmsapi.aliyuncs.com";
        return new Dysmsapi($config);
    }
    
    public static function main($args){
        $client = self::createClient();
        // Create request object and set required input parameters
        $sendMessageToGlobeRequest = new SendMessageToGlobeRequest([
            // Please replace with the actual recipient number.
            "to" => "<YOUR_VALUE>",
            // Please replace with the actual SMS content.
            "message" => "<YOUR_VALUE>"
        ]);
        $runtime = new RuntimeOptions([]);
        try {
            // Send a request
            $client->sendMessageToGlobeWithOptions($sendMessageToGlobeRequest, $runtime);
        }
        catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            // Only a printing example. Please be careful about exception handling and do not ignore exceptions directly in engineering projects.
            // print error message
            var_dump($error->message);
            // Please click on the link below for diagnosis.
            var_dump($error->data["Recommend"]);
            Utils::assertAsString($error->message);
        }
    }
}

Sample::main(array_slice($argv, 1));

Cenário especial: Upload de arquivo através da operação Advance

Ao usar Image Search ou Visual Intelligence API (VIAPI) para processar imagens em uma máquina local ou fazer upload de imagens, note que a API descrita na documentação não suporta upload direto. Para enviar imagens, utilize a operação Advance, que suporta transmissão de fluxos de arquivos. O serviço em nuvem armazena temporariamente o arquivo enviado no Object Storage Service (OSS) e lê o arquivo temporário do OSS quando necessário. A região padrão do OSS é cn-shanghai. O exemplo a seguir mostra como chamar a operação DetectBodyCount do VIAPI:

Nota

Arquivos temporários no OSS são limpos regularmente.

  1. Inicializar um cliente de requisição

    Certifique-se de especificar tanto o parâmetro regionId quanto o endpoint do serviço em nuvem. O regionId indica a região do OSS onde os arquivos temporários são armazenados. Se você não configurar o parâmetro regionId, o serviço em nuvem poderá usar uma região diferente da do OSS, resultando em timeouts de API.

    function createClient()
    {
        $config = new Config([
            // getenv specifies that the access credential is obtained from environment variables.
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Specify the same region for the endpoint and regionId parameters.
        $config->endpoint = "facebody.cn-shanghai.aliyuncs.com";
        $config->regionId = "cn-shanghai";
        return new Facebody($config);
    }
  2. Criar um objeto de requisição

    Crie o objeto de requisição <Operação de API>AdvanceRequest para passar fluxos de arquivos. No objeto de requisição, defina o nome do parâmetro como ImageURLObject.

    // Read the file and convert it to a Stream object.
            $imagePath = "<FILE_PATH>";   // Replace <FILE_PATH> with the actual file path.
            try {
                $fileStream = new Stream(fopen($imagePath, "r"));
            } catch (\Exception $e) {
                die("Failed to read the file: " . $e->getMessage());
            }
            // Create a request object and configure the request parameters.
            $detectBodyCountAdvanceRequest = new DetectBodyCountAdvanceRequest([
                "imageURLObject" =>  $fileStream
            ]);   
  3. Iniciar uma requisição

    Chame a operação <Operação de API>AdvanceRequest.

    // Configure the runtime parameters.
     $runtime = new RuntimeOptions([]);
     $client = self::createClient();
     // Send the request.      
     $client->detectBodyCountAdvance($detectBodyCountAdvanceRequest, $runtime);

Clique para visualizar o código de exemplo completo

<?php

// composer require alibabacloud/facebody-20191230

namespace AlibabaCloud\SDK\Sample;
use Darabonba\OpenApi\Models\Config;
use GuzzleHttp\Psr7\Stream;
use AlibabaCloud\SDK\Facebody\V20191230\Facebody;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\SDK\Facebody\V20191230\Models\DetectBodyCountAdvanceRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;

require_once 'vendor/autoload.php';

class Sample
{
    public static function createClient()
    {
        $config = new Config([
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        $config->regionId = "cn-shanghai";
        return new Facebody($config);
    }

    public static function main()
    {
        $client = self::createClient();

        // Read the file and convert it to a Stream object.  
        $imagePath = "<FILE_PATH>";   // Replace the value with the actual file path.
        if (!file_exists($imagePath)) {
            die("File does not exist: $imagePath");
        }
        try {
            $fileStream = new Stream(fopen($imagePath, "r"));
        } catch (Exception $e) {
            die("Failed to read the file: " . $e->getMessage());
        }
        // Create a request object.
        $detectBodyCountAdvanceRequest = new DetectBodyCountAdvanceRequest([
            "imageURLObject" => $fileStream
        ]);
        // Configure runtime settings.
        $runtime = new RuntimeOptions([]);
        try {
            // Send the request.
            $resp = $client->detectBodyCountAdvance($detectBodyCountAdvanceRequest, $runtime);
            var_dump($resp->body);
        } catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            var_dump($error);
        }
    }
}

Sample::main();

Perguntas frequentes

  • Como tratar o erro "You are not authorized to perform this operation" retornado por uma operação de API?

    Causas possíveis: O par de AccessKey do usuário do Resource Access Management (RAM) não possui permissões para chamar a operação de API.

    Soluções: Conceda as permissões necessárias ao usuário RAM. Para mais informações, consulte Gerenciar permissões de usuário RAM.

    Por exemplo, se a operação de API SendMessageToGlobe retornar o erro "You are not authorized to perform this operation", crie a seguinte política personalizada para conceder as permissões necessárias ao usuário RAM:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • Como resolver o erro de endpoint "PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException" com a mensagem de erro cURL error 3?

    Causas possíveis: A operação de API não suporta o endpoint especificado durante a inicialização do cliente de requisição.

    Soluções: Especifique um endpoint suportado e tente novamente. Para mais informações, consulte Configurar um endpoint.

  • Como lidar com o erro de AccessKey "PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2" retornado por uma operação de API?

    Causas possíveis: O par de AccessKey não foi passado corretamente para a requisição.

    Soluções: Certifique-se de passar o par de AccessKey corretamente ao inicializar o cliente de requisição. O valor XXX em getenv("XXX") é obtido da variável de ambiente.

  • Como corrigir o erro "code: 414 URL Too Long" retornado pelo Alibaba Cloud SDK?

    Causas possíveis: Esse problema não decorre do método de requisição. Ao usar o Alibaba Cloud SDK, os parâmetros de requisição são passados nas URLs. Se uma URL contiver muitos parâmetros ou valores excessivamente longos, ela pode exceder o comprimento máximo e causar falhas na requisição.

    Soluções: Para evitar URLs excessivamente longas, recomendamos usar a sintaxe de requisição e método de assinatura V3. Utilize assinaturas autoassinadas para passar parâmetros no corpo da requisição e defina o tipo de corpo como Content-Type: application/x-www-form-urlencoded.

Para mais informações sobre como tratar erros do SDK, consulte Perguntas frequentes.