Tous les produits
Search
Centre de documentation

Alibaba Cloud SDK:Intégration avec le SDK Alibaba Cloud V2.0 pour PHP

Dernière mise à jour :Sep 22, 2026

Lorsque vous appelez des opérations API, nous vous recommandons d'intégrer le SDK à votre projet. Les SDK simplifient le développement, permettent une intégration rapide des fonctionnalités et réduisent considérablement les coûts d'exploitation et de maintenance. Pour utiliser le SDK Alibaba Cloud, suivez les étapes suivantes : installez le SDK Alibaba Cloud, configurez un identifiant d'accès, puis utilisez le SDK. Cette rubrique explique comment utiliser le SDK Alibaba Cloud.

Prérequis

  • PHP 5.6 ou version ultérieure est installé.

  • Composer est installé.

Important

La version de PHP utilisée pour installer le SDK Alibaba Cloud V2.0 via Composer doit être inférieure ou égale à la version de PHP utilisée pour exécuter le SDK Alibaba Cloud V2.0. Par exemple, le dossier vendor généré après l'installation du SDK Alibaba Cloud V2.0 dans PHP 7.2 ne peut être utilisé que dans PHP 7.2 ou une version ultérieure. Si vous copiez le dossier vendor dans un environnement PHP 5.6, la dépendance sera incompatible. Si vous ne parvenez pas à installer Composer en raison de problèmes réseau, exécutez la commande suivante pour utiliser le miroir complet de Composer fourni par Alibaba Cloud :

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

Importer le SDK

  1. Connectez-vous au SDK Center et sélectionnez le service dont vous souhaitez utiliser le SDK. Dans cet exemple, le service Short Message Service (SMS) est sélectionné.

  2. Sur la page Install, sélectionnez V2.0 dans la liste déroulante SDK Generation et cliquez sur PHP dans la section All languages. Sous l'onglet Quick Start , obtenez la méthode d'installation du SDK Short Message Service (SMS).

    image

Configurer un identifiant d'accès

Pour appeler les opérations API d'un service Alibaba Cloud, vous devez configurer un identifiant d'accès, tel qu'une paire AccessKey ou un jeton Security Token Service (STS). Afin de prévenir la fuite de paires AccessKey, enregistrez-les dans des variables d'environnement. Pour plus d'informations sur d'autres solutions de sécurité, consultez la rubrique Solutions de sécurité des identifiants. Dans cet exemple, les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sont utilisées pour enregistrer les paires AccessKey.

Méthode de configuration sous Linux et macOS

Les exemples suivants utilisent ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET comme noms de variables. Remplacez-les par vos propres noms si nécessaire, par exemple OSS_ACCESS_KEY_ID et OSS_ACCESS_KEY_SECRET.

Exécutez les commandes export suivantes pour définir les variables d'environnement :

Important

Les variables définies avec export sont temporaires et valides uniquement pour la session actuelle. Pour les rendre persistantes, ajoutez la commande export à votre fichier de démarrage de shell (tel que ~/.bashrc ou ~/.zshrc).

  • Définissez l'ID AccessKey :

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Définissez le secret AccessKey :

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Vérifiez la configuration.

    Exécutez echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si la valeur correcte s'affiche, la configuration a réussi.

Méthode de configuration sous Windows

Utiliser l'interface graphique (GUI)

  • Procédure

    Les étapes suivantes décrivent comment définir les variables d'environnement à l'aide de l'interface graphique sous Windows 10.

    Sur votre bureau, faites un clic droit sur This PC et choisissez Properties > Advanced system settings > Environment Variables > New sous System variables ou User variables. Ensuite, complétez la configuration.

    Variable

    Valeur d'exemple

    ID AccessKey

    • Nom de la variable : ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valeur de la variable : yourAccessKeyID

    Secret AccessKey

    • Nom de la variable : ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valeur de la variable : yourAccessKeySecret

  • Tester la configuration

    Cliquez sur Start (ou utilisez le raccourci clavier Win+R), cliquez sur Run, saisissez cmd, puis cliquez sur OK (ou appuyez sur Entrée) pour ouvrir l'invite de commandes. Exécutez les commandes echo %ALIBABA_CLOUD_ACCESS_KEY_ID% et echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si les commandes renvoient l'AccessKey correct, la configuration a réussi.

Utiliser l'invite de commandes (CMD)

  • Procédure

    Ouvrez l'invite de commandes en tant qu'administrateur et exécutez les commandes suivantes pour ajouter de nouvelles variables d'environnement au système.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    Le paramètre /M indique une variable d'environnement système. Omettez ce paramètre pour définir une variable d'environnement utilisateur.

  • Tester la configuration

    Cliquez sur Start (ou utilisez le raccourci clavier Win+R), cliquez sur Run, saisissez cmd, puis cliquez sur OK (ou appuyez sur Entrée) pour ouvrir l'invite de commandes. Exécutez les commandes echo %ALIBABA_CLOUD_ACCESS_KEY_ID% et echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si les commandes renvoient l'AccessKey correct, la configuration a réussi.

Utiliser Windows PowerShell

Dans PowerShell, vous pouvez définir de nouvelles variables d'environnement qui seront valides pour toutes les nouvelles sessions :

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

Pour définir des variables d'environnement pour tous les utilisateurs, vous devez disposer des autorisations d'administrateur :

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

Vous pouvez définir des variables d'environnement temporaires qui ne sont valides que pour la session actuelle :

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

Dans PowerShell, exécutez les commandes Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID et Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si les commandes renvoient l'AccessKey correct, la configuration a réussi.

Utiliser le SDK

Dans cet exemple, l'opération API SendMessageToGlobe du service Short Message Service (SMS) est appelée. Pour plus d'informations sur SendMessageToGlobe, consultez SendMessageToGlobe.

1. Initialiser un client de requête

Dans le SDK, toutes les requêtes vers les opérations API sont envoyées depuis un client. Avant d'appeler une opération API, vous devez initialiser le client de requête. Plusieurs méthodes permettent d'initialiser un client de requête. Dans cet exemple, une paire AccessKey est utilisée pour initialiser un client de requête. Pour plus d'informations, consultez Gérer les identifiants d'accès.

Important
  • Les objets client, tels que les instances Dysmsapi, sont thread-safe et peuvent être utilisés dans des environnements multithread sans risque de sécurité. Il n'est pas nécessaire de créer une instance pour chaque thread.

  • Dans les projets de développement, nous vous recommandons de ne pas utiliser fréquemment le mot-clé new pour créer des objets client. Cela pourrait entraîner un gaspillage de ressources et une dégradation des performances du service. Nous vous conseillons d'encapsuler le client en mode singleton. Cela garantit qu'une seule instance Client est initialisée pour le même identifiant d'accès et endpoint tout au long du cycle de vie de l'application.

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. Créer un objet de requête

Lorsque vous appelez une opération API pour transmettre des paramètres, vous devez utiliser l'objet de requête fourni par le SDK. Nommez l'objet de requête de l'opération API selon le format suivant : <nom de l'opération API>Request. Par exemple, l'objet de requête de l'opération API SendSms est SendSmsRequest. Pour plus d'informations sur les paramètres, consultez la référence API. Pour plus d'informations sur les paramètres de l'opération SendMessageToGlobe, consultez SendMessageToGlobe.

Remarque

Si l'opération API ne prend pas en charge les paramètres de requête, il n'est pas nécessaire de créer un objet de requête. Par exemple, l'opération DescribeCdnSubList ne prend pas en charge les paramètres de requête.

// 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. Initier une requête API

Lorsque vous utilisez un client de requête pour appeler une opération API, nous vous recommandons de nommer la fonction selon le format suivant : <nom de l'opération API>WithOptions. Spécifiez <API operation name> en camel case. Cette fonction contient deux paramètres : l'objet de requête et le paramètre d'exécution. L'objet de requête est créé à l'étape précédente. Le paramètre d'exécution est utilisé pour spécifier l'action de requête, telle que les configurations de délai d'attente et de proxy. Pour plus d'informations, consultez Configuration avancée.

Remarque

Si l'opération API ne prend pas en charge les paramètres de requête, il n'est pas nécessaire de spécifier un objet de requête dans la demande. Par exemple, vous devez uniquement spécifier le paramètre d'exécution lors de l'appel de l'opération DescribeCdnSubList.

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

4. Gérer les erreurs

Le SDK Alibaba Cloud V2.0 pour PHP classe les exceptions dans les types suivants :

  • TeaUnretryableException : Dans la plupart des cas, ce type d'exception est causé par des problèmes réseau et est signalé lorsque le nombre maximal de tentatives est atteint.

  • InvalidArgumentException : Dans la plupart des cas, ce type d'erreur est déclenché lorsqu'un paramètre requis n'est pas spécifié ou que le type de paramètre est invalide. Vous pouvez vérifier le message d'erreur pour localiser l'erreur.

  • TeaException : Dans la plupart des cas, ce type d'exception est causé par des erreurs métier.

Pour plus d'informations sur la gestion des exceptions SDK, consultez Gestion des exceptions.

Important

Nous vous recommandons de prendre des mesures appropriées de gestion des exceptions, telles que le signalement des exceptions, la journalisation des exceptions et l'exécution de nouvelles tentatives, afin de garantir la robustesse et la stabilité de votre système.

Cliquez pour afficher l'exemple de code complet

Exemple : Appeler l'opération 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));

Scénario spécial : Téléchargement de fichiers via l'opération Advance

Lorsque vous utilisez Image Search ou Visual Intelligence API (VIAPI) pour traiter des images sur une machine locale ou télécharger des images, l'API d'Image Search ou de VIAPI décrite dans la documentation ne prend pas en charge le téléchargement direct. Pour télécharger des images, vous devez utiliser l'opération Advance, qui prend en charge la transmission de flux de fichiers. Le service cloud stocke temporairement le fichier téléchargé dans Object Storage Service (OSS), et lit le fichier temporaire depuis OSS si nécessaire. La région par défaut d'OSS est cn-shanghai. L'exemple suivant montre comment appeler l'opération DetectBodyCount de VIAPI :

Remarque

Les fichiers temporaires dans OSS sont régulièrement supprimés.

  1. Initialiser un client de requête

    Assurez-vous que le paramètre regionId et l'endpoint du service cloud sont spécifiés. regionId indique la région OSS dans laquelle les fichiers temporaires sont stockés. Si vous ne configurez pas le paramètre regionId, le service cloud peut utiliser une région différente de celle d'OSS, ce qui entraîne des délais d'expiration de l'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. Créer un objet de requête

    Créez l'objet de requête <opération API>AdvanceRequest pour transmettre des flux de fichiers. Dans l'objet de requête, définissez le nom du paramètre sur 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. Initier une requête

    Appelez l'opération <opération API>AdvanceRequest.

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

Cliquez pour afficher l'exemple de code complet

<?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

  • Comment gérer l'erreur « You are not authorized to perform this operation » générée par une opération API ?

    Causes possibles : La paire AccessKey de l'utilisateur Resource Access Management (RAM) ne dispose pas des autorisations nécessaires pour appeler l'opération API.

    Solutions : Accordez les autorisations requises à l'utilisateur RAM. Pour plus d'informations, consultez Gérer les autorisations des utilisateurs RAM.

    Par exemple, si l'erreur « You are not authorized to perform this operation » est générée par l'opération API SendMessageToGlobe, créez la stratégie personnalisée suivante pour accorder les autorisations requises à l'utilisateur RAM :

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • Comment gérer l'erreur d'endpoint « PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException » dont le message d'erreur est cURL error 3 ?

    Causes possibles : L'opération API ne prend pas en charge l'endpoint que vous spécifiez lors de l'initialisation du client de requête.

    Solutions : Spécifiez un endpoint pris en charge et réessayez. Pour plus d'informations, consultez Configurer un endpoint.

  • Comment gérer l'erreur AccessKey « PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2 » générée par une opération API ?

    Causes possibles : La paire AccessKey n'est pas correctement transmise à la requête.

    Solutions : Assurez-vous que la paire AccessKey est correctement transmise lors de l'initialisation du client de requête. La valeur XXX de getenv("XXX") est obtenue à partir de la variable d'environnement.

  • Comment gérer l'erreur « code: 414 URL Too Long » générée par le SDK Alibaba Cloud ?

    Causes possibles : Ce problème n'est pas causé par la méthode de requête. Lorsque vous utilisez le SDK Alibaba Cloud, les paramètres de requête sont transmis dans les URL. Si une URL contient un nombre excessif de paramètres ou des valeurs de paramètre trop longues, l'URL peut dépasser la longueur maximale et provoquer des échecs de requête.

    Solutions : Pour éviter les URL trop longues, nous vous recommandons d'utiliser la syntaxe de requête et la méthode de signature V3. Utilisez des signatures autosignées pour transmettre les paramètres dans le corps de la requête et définissez le type de corps sur Content-Type: application/x-www-form-urlencoded.

Pour plus d'informations sur la gestion des erreurs SDK, consultez FAQ.