Tous les produits
Search
Centre de documentation

Alibaba Cloud SDK:Intégrer Alibaba Cloud SDK V2.0 pour PHP

Dernière mise à jour :Aug 11, 2026

Nous vous recommandons d'intégrer le SDK à votre projet pour appeler des opérations d'API. Les SDK simplifient le développement, accélèrent l'intégration des fonctionnalités et réduisent considérablement les coûts d'exploitation et de maintenance. Pour utiliser Alibaba Cloud SDK, procédez comme suit : installez-le, configurez un identifiant d'accès, puis utilisez le SDK. Cette rubrique décrit comment utiliser Alibaba Cloud SDK.

Prérequis

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

  • Composer est installé.

Important

La version de PHP utilisée pour installer Alibaba Cloud SDK V2.0 via Composer doit être antérieure ou égale à celle utilisée pour l'exécuter. Par exemple, le dossier vendor généré lors de l'installation d'Alibaba Cloud SDK V2.0 sous PHP 7.2 fonctionne uniquement avec PHP 7.2 ou une version ultérieure. Si vous copiez ce dossier vers un environnement PHP 5.6, la dépendance sera incompatible. En cas d'échec d'installation de Composer dû à des problèmes réseau, exécutez la commande suivante pour utiliser l'image complète de Composer fournie 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, Short Message Service (SMS) est sélectionné.

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

    image

Configurer un identifiant d'accès

Pour appeler les opérations d'API d'un service Alibaba Cloud, configurez un identifiant d'accès, tel qu'une AccessKey pair ou un Security Token Service (STS) token. Afin d'éviter toute fuite de la paire AccessKey, stockez-la dans des variables d'environnement. Pour plus d'informations sur les autres solutions de sécurité, consultez Solutions de sécurité des identifiants. Dans cet exemple, les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET servent à stocker les paires AccessKey.

Méthode de configuration sous Linux et macOS

Configurer les variables d'environnement à l'aide de la commande export

Important

Une variable d'environnement temporaire définie avec la commande export n'est valide que pour la session en cours. Elle est supprimée à la fin de la session. Pour une conservation à long terme, ajoutez la commande export au fichier de configuration de démarrage de votre système d'exploitation.

  • Configurez l'AccessKey ID et appuyez sur Entrée.

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Configurez l'AccessKey secret et appuyez sur Entrée.

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

    Exécutez la commande echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si la commande retourne l'AccessKey ID correct, 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 des variables d'environnement via l'interface graphique sous Windows 10.

    Sur votre bureau, faites un clic droit sur This PC, puis choisissez Properties > Advanced system settings > Environment Variables > New sous System variables ou User variables. Terminez ensuite la configuration.

    Variable

    Example value

    AccessKey ID

    • Variable name: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Variable value: yourAccessKeyID

    AccessKey Secret

    • Variable name: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Variable value: 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 retournent l'AccessKey correcte, 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. Vous pouvez omettre ce paramètre lors de la définition d'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 retournent l'AccessKey correcte, la configuration a réussi.

Utilisation de Windows PowerShell

Dans PowerShell, définissez de nouvelles variables d'environnement 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, disposez des permissions 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)

Définissez également des variables d'environnement temporaires, valides uniquement pour la session en cours :

$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 retournent l'AccessKey correcte, la configuration a réussi.

Utiliser le SDK

Dans cet exemple, l'opération d'API SendMessageToGlobe de 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 d'API transitent par un client. Avant d'appeler une opération d'API, initialisez le client de requête. Plusieurs méthodes permettent d'initialiser ce client. Cet exemple utilise une paire AccessKey. 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 utilisables dans des environnements multithreads 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, évitez d'utiliser fréquemment le mot-clé new pour créer des objets Client. Cela pourrait entraîner un gaspillage de ressources et dégrader les performances du service. Encapsulez plutôt le client selon le modèle singleton. Ainsi, une seule instance Client est initialisée pour le même identifiant d'accès et le même 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

Pour transmettre des paramètres lors de l'appel d'une opération d'API, utilisez l'objet de requête fourni par le SDK. Nommez l'objet de requête de l'opération d'API selon le format suivant : <Nom de l'opération d'API>Request. Par exemple, l'objet de requête de l'opération SendSms est SendSmsRequest. Pour plus d'informations sur les paramètres, reportez-vous à la référence d'API. Pour plus de détails sur les paramètres de l'opération SendMessageToGlobe, consultez SendMessageToGlobe.

Remarque

Si l'opération d'API ne prend pas en charge les paramètres de requête, la création d'un objet de requête n'est pas nécessaire. Par exemple, l'opération DescribeCdnSubList n'accepte aucun paramètre 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. Envoyer une requête d'API

Lorsque vous utilisez un client de requête pour appeler une opération d'API, nommez la fonction selon le format suivant : <Nom de l'opération d'API>WithOptions. Spécifiez <API operation name> en camel case. Cette fonction prend 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 permet de spécifier le comportement de la requête, tel que les configurations de délai d'expiration et de proxy. Pour plus d'informations, consultez Configuration avancée.

Remarque

Si l'opération d'API ne prend pas en charge les paramètres de requête, il est inutile de spécifier un objet de requête. Par exemple, seul le paramètre d'exécution est requis 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

Alibaba Cloud SDK V2.0 pour PHP classe les exceptions dans les catégories suivantes :

  • TeaUnretryableException : Ce type d'exception résulte généralement de problèmes réseau et survient lorsque le nombre maximal de tentatives est atteint.

  • InvalidArgumentException : Cette erreur se déclenche habituellement lorsqu'un paramètre obligatoire n'est pas spécifié ou lorsque le type de paramètre est invalide. Consultez le message d'erreur pour localiser le problème.

  • TeaException : Ce type d'exception provient généralement d'erreurs métier.

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

Important

Nous vous recommandons de mettre en place des mesures appropriées de gestion des exceptions, telles que le signalement, la journalisation et les 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 particulier : Téléversement 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éverser des images, l'API d'Image Search ou de VIAPI décrite dans la documentation ne prend pas en charge le téléversement direct. Pour téléverser des images, utilisez l'opération Advance, qui permet la transmission de flux de fichiers. Le service cloud stocke temporairement le fichier téléversé 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 tous deux spécifiés. Le paramètre regionId indique la région OSS où les fichiers temporaires sont stockés. Si vous ne configurez pas le paramètre regionId, le service cloud risque d'utiliser une région différente de celle d'OSS, ce qui entraînera des délais d'attente d'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 d'API>AdvanceRequest pour transmettre des flux de fichiers. Dans cet objet, 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. Envoyer une requête

    Appelez l'opération <Opération d'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 résoudre l'erreur « You are not authorized to perform this operation » renvoyée par une opération d'API ?

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

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

    Par exemple, si l'erreur « You are not authorized to perform this operation » est renvoyée par l'opération d'API SendMessageToGlobe, créez la politique personnalisée suivante pour accorder les permissions nécessaires à l'utilisateur RAM :

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

    Causes possibles : L'opération d'API ne prend pas en charge l'endpoint spécifié 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 résoudre l'erreur AccessKey « PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2 » renvoyée par une opération d'API ?

    Causes possibles : La paire AccessKey n'a pas été 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 » renvoyée par Alibaba Cloud SDK ?

    Causes possibles : Ce problème n'est pas lié à la méthode de requête. Avec Alibaba Cloud SDK, les paramètres de requête sont transmis via les URL. Si une URL contient un nombre excessif de paramètres ou des valeurs de paramètres trop longues, elle peut dépasser la longueur maximale autorisée et provoquer l'échec de la 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 auto-signé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 du SDK, consultez FAQ.