Todos os produtos
Search
Central de documentação

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

Última atualização: Sep 22, 2026

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

Pré-requisitos

  • PHP 5.6 ou superior instalado.

  • Composer instalado.

Importante

A versão do PHP usada para instalar o Alibaba Cloud SDK V2.0 com o Composer deve ser anterior ou igual à versão do PHP usada para executar o Alibaba Cloud SDK V2.0. 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 superior. Se a pasta vendor for copiada para o PHP 5.6, a dependência será incompatível com o PHP 5.6. Se você não conseguir instalar o Composer devido a problemas de rede, execute o seguinte comando para usar a imagem completa do Composer fornecida pela Alibaba Cloud:

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

Importe o SDK.

  1. Acesse o Centro de SDK e selecione o service cujo SDK você deseja usar. 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

Configure uma credencial de acesso

Para chamar operações de API de um Alibaba Cloud service, você deve configurar uma credencial de acesso, como um AccessKey pair ou um Security Token Service (STS) token. Para evitar vazamentos de AccessKey pair, você pode registrar o AccessKey pair em variáveis de ambiente. Para mais informações sobre outras soluções de segurança, consulte Credential security solutions. Neste exemplo, as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET são usadas para registrar AccessKey pairs.

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

Os exemplos a seguir usam ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET como nomes de variáveis. Substitua-os pelos seus próprios nomes, se necessário, como OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET.

Execute os seguintes comandos export para definir as variáveis de ambiente:

Importante

As variáveis definidas com export são temporárias e válidas apenas para a sessão atual. Para persistência, adicione o comando export ao seu arquivo de inicialização do shell (como ~/.bashrc ou ~/.zshrc).

  • Defina o AccessKey ID:

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Defina o AccessKey secret:

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

    Execute echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Se o valor correto for retornado, a configuração foi bem-sucedida.

Método de configuração no Windows

Use 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 sua á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

  • Teste a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Execute, 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 comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Use 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 do usuário.

  • Teste a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Execute, 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 comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Use o Windows PowerShell

No PowerShell, você pode definir 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, você deve ter 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)

Você pode definir variáveis de ambiente temporárias que são 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 comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Use o SDK

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

1. Inicialize um client de requisição

No SDK, todas as requisições para operações de API são enviadas de um client. Antes de chamar uma operação de API, você deve inicializar o client de requisição. Você pode usar vários métodos para inicializar um client de requisição. Neste exemplo, um AccessKey pair é usado para inicializar um client de requisição. Para mais informações, consulte Gerencie 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. Você não precisa criar uma instância para cada thread.

  • Em projetos de desenvolvimento, recomendamos não usar a palavra-chave new para criar objetos client com frequência. Caso contrário, o desperdício de recursos pode aumentar e a performance do service pode degradar. Recomendamos encapsular o client no modo 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. Crie um objeto de requisição

Ao chamar uma operação de API para passar parâmetros, você deve usar o objeto de requisição fornecido pelo SDK. Nomeie o objeto de requisição da operação de API no seguinte formato: <API operation name>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 mais informações sobre os parâmetros da operação SendMessageToGlobe, consulte SendMessageToGlobe.

Nota

Se a operação de API não suportar parâmetros de requisição, você não precisa criar um objeto de requisição. Por exemplo, a operação DescribeCdnSubList não suporta 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. Inicie uma requisição de API

Ao usar um client de requisição para chamar uma operação de API, recomendamos nomear a função no seguinte formato: <API operation name>WithOptions. Especifique <API operation name> em camel case. Esta 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 é usado para especificar a ação da requisição, como configurações de timeout e proxy. Para mais informações, consulte Advanced configuration.

Nota

Se a operação de API não suportar parâmetros de requisição, você não precisa especificar um objeto de requisição na requisição. Por exemplo, você só precisa especificar o parâmetro de runtime ao chamar a operação DescribeCdnSubList.

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

4. Trate erros

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

  • TeaUnretryableException: Na maioria dos casos, esse tipo de exceção é causado por problemas de rede e é reportado quando o número máximo de tentativas é atingido.

  • InvalidArgumentException: Na maioria dos casos, esse tipo de erro é acionado quando um parâmetro obrigatório não é especificado ou o tipo do parâmetro é inválido. Você pode verificar o message do erro para localizar o erro.

  • TeaException: Na maioria dos casos, esse tipo de exceção é causado por erros de negócio.

Para mais informações sobre como tratar exceções do SDK, consulte Exception handling.

Importante

Recomendamos que você tome medidas adequadas de tratamento de exceções, como reportar exceções, registrar logs de exceções e executar tentativas, para garantir a robustez e a estabilidade do seu sistema.

Visualize o código de exemplo completo

Exemplo: Chame 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 o Image Search ou o Visual Intelligence API (VIAPI) para processar imagens em uma máquina local ou fazer upload de imagens, a API do Image Search ou VIAPI descrita na documentação não suporta upload direto. Para fazer upload de imagens, você precisa usar a operação Advance, que suporta a transmissão de fluxos de arquivos. O cloud service 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. Inicialize um client de requisição

    Certifique-se de que tanto o parâmetro regionId quanto o endpoint do cloud service estejam especificados. 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 cloud service poderá usar uma região diferente 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. Crie um objeto de requisição

    Crie o objeto de requisição <API operation>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. Inicie uma requisição

    Chame a operação <API operation>AdvanceRequest.

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

Visualize 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();

FAQ

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

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

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

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

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

    Causas possíveis: A operação de API não suporta o endpoint que você especifica ao inicializar o client de requisição.

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

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

    Causas possíveis: O AccessKey pair não é passado corretamente para a requisição.

    Soluções: Certifique-se de que o AccessKey pair seja passado corretamente ao inicializar o client de requisição. O valor XXX de getenv("XXX") é obtido da variável de ambiente.

  • Como trato o erro "code: 414 URL Too Long" lançado pelo Alibaba Cloud SDK?

    Causas possíveis: Este problema não é causado pelo método de requisição. Ao usar o Alibaba Cloud SDK, os parâmetros de requisição são passados em URLs. Se uma URL contiver um número excessivo de parâmetros ou valores de parâmetros muito longos, a URL pode exceder o comprimento máximo e causar falhas na requisição.

    Soluções: Para evitar URLs muito longas, recomendamos que você use request syntax and signature method V3. Use assinaturas autoassinadas para passar parâmetros no corpo da requisição e defina o tipo do corpo como Content-Type: application/x-www-form-urlencoded.

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