Todos los productos
Search
Centro de documentos

Alibaba Cloud SDK:Integración con el SDK V2.0 de Alibaba Cloud para PHP

Última actualización: Sep 22, 2026

Cuando llame a operaciones de API, se recomienda integrar el SDK en su proyecto. Los SDK simplifican el proceso de desarrollo, integran funciones rápidamente y reducen considerablemente los costos de operación y mantenimiento. Para usar el SDK de Alibaba Cloud, siga estos pasos: instale el SDK de Alibaba Cloud, configure una credencial de acceso y utilice el SDK. Este tema describe cómo usar el SDK de Alibaba Cloud.

Requisitos previos

  • Tiene instalado PHP 5.6 o una versión posterior.

  • Tiene instalado Composer.

Importante

La versión de PHP que use para instalar el SDK V2.0 de Alibaba Cloud mediante Composer debe ser anterior o igual a la versión de PHP con la que ejecute dicho SDK. Por ejemplo, la carpeta vendor generada tras instalar el SDK V2.0 de Alibaba Cloud en PHP 7.2 solo se puede usar en PHP 7.2 o versiones posteriores. Si copia la carpeta vendor a PHP 5.6, la dependencia será incompatible con PHP 5.6. Si no logra instalar Composer por problemas de red, ejecute el siguiente comando para usar la imagen completa de Composer proporcionada por Alibaba Cloud:

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

Importe el SDK.

  1. Inicie sesión en Centro de SDK y seleccione el servicio cuyo SDK desea usar. En este ejemplo, se selecciona Short Message Service (SMS).

  2. En la página Install, seleccione V2.0 en la lista desplegable SDK Generation y haga clic en PHP dentro de la sección All languages. En la pestaña Quick Start, obtenga el método de instalación del SDK de Short Message Service (SMS).

    image

Configure una credencial de acceso

Para llamar a las operaciones de API de un servicio de Alibaba Cloud, debe configurar una credencial de acceso, como un AccessKey pair o un Security Token Service (STS) token. Para evitar filtraciones del par de AccessKey, guárdelo en variables de entorno. Para más información sobre otras soluciones de seguridad, consulte Credential security solutions. En este ejemplo, se usan las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET para almacenar los pares de AccessKey.

Método de configuración en Linux y macOS

Los siguientes ejemplos usan ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET como nombres de variable. Sustitúyalos por sus propios nombres si es necesario, como OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.

Ejecute los siguientes comandos export para establecer las variables de entorno:

Importante

Las variables establecidas con export son temporales y solo son válidas para la sesión actual. Para hacerlas persistentes, agregue el comando export al archivo de inicio de su shell (como ~/.bashrc o ~/.zshrc).

  • Establezca el ID de AccessKey:

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Establezca el secreto de AccessKey:

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Compruebe la configuración.

    Ejecute echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si se devuelve el valor correcto, la configuración fue exitosa.

Método de configuración en Windows

Use la interfaz gráfica de usuario (GUI)

  • Procedimiento

    A continuación se describe cómo establecer variables de entorno mediante la GUI en Windows 10.

    En el escritorio, haga clic derecho en This PC y elija Properties > Advanced system settings > Environment Variables > New en System variables o User variables. Luego, complete la configuración.

    Variable

    Valor de ejemplo

    ID de AccessKey

    • Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valor de la variable: yourAccessKeyID

    Secreto de AccessKey

    • Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valor de la variable: yourAccessKeySecret

  • Pruebe la configuración

    Haga clic en Start (o use el atajo de teclado Win+R), haga clic en Run, introduzca cmd y luego haga clic en OK (o presione Enter) para abrir el símbolo del sistema. Ejecute los comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% y echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.

Use el símbolo del sistema (CMD)

  • Procedimiento

    Abra el símbolo del sistema como administrador y ejecute los siguientes comandos para agregar nuevas variables de entorno al sistema.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    El parámetro /M indica una variable de entorno del sistema. Puede omitir este parámetro cuando establezca una variable de entorno de usuario.

  • Pruebe la configuración

    Haga clic en Start (o use el atajo de teclado Win+R), haga clic en Run, introduzca cmd y luego haga clic en OK (o presione Enter) para abrir el símbolo del sistema. Ejecute los comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% y echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.

Use Windows PowerShell

En PowerShell, puede establecer nuevas variables de entorno válidas para todas las sesiones nuevas:

[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 establecer variables de entorno para todos los usuarios, necesita permisos de administrador:

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

También puede establecer variables de entorno temporales que solo sean válidas para la sesión actual:

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

En PowerShell, ejecute los comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID y Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.

Use el SDK

En este ejemplo, se llama a la operación de API SendMessageToGlobe de Short Message Service (SMS). Para más información sobre SendMessageToGlobe, consulte SendMessageToGlobe.

1. Inicialice un cliente de solicitud

En el SDK, todas las solicitudes a las operaciones de API se envían desde un cliente. Antes de llamar a una operación de API, debe inicializar el cliente de solicitud. Existen varios métodos para inicializarlo. En este ejemplo, se usa un par de AccessKey para inicializar un cliente de solicitud. Para más información, consulte Manage access credentials.

Importante
  • Los objetos de cliente, como las instancias de Dysmsapi, son seguros para hilos y se pueden usar en entornos multihilo sin riesgos de seguridad. No es necesario crear una instancia para cada hilo.

  • En los proyectos de desarrollo, se recomienda no usar la palabra clave new para crear objetos de cliente con frecuencia. De lo contrario, podría aumentar el desperdicio de recursos y degradarse el rendimiento del servicio. Se recomienda encapsular el cliente en modo singleton. Esto garantiza que solo se inicialice una instancia Client para la misma credencial de acceso y endpoint durante todo el ciclo de vida de la aplicación.

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. Cree un objeto de solicitud

Cuando llame a una operación de API para pasar parámetros, debe usar el objeto de solicitud proporcionado por el SDK. Asigne un nombre al objeto de solicitud de la operación de API con el siguiente formato: <API operation name>Request. Por ejemplo, el objeto de solicitud de la operación de API SendSms es SendSmsRequest. Para más información sobre los parámetros, consulte la referencia de la API. Para más detalles sobre los parámetros de la operación SendMessageToGlobe, consulte SendMessageToGlobe.

Nota

Si la operación de API no admite parámetros de solicitud, no es necesario crear un objeto de solicitud. Por ejemplo, la operación DescribeCdnSubList no admite parámetros de solicitud.

// 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. Envíe una solicitud de API

Cuando use un cliente de solicitud para llamar a una operación de API, se recomienda nombrar la función con el siguiente formato: <API operation name>WithOptions. Especifique <API operation name> en formato camel case. Esta función contiene dos parámetros: el objeto de solicitud y el parámetro de tiempo de ejecución. El objeto de solicitud se creó en el paso anterior. El parámetro de tiempo de ejecución sirve para especificar la acción de la solicitud, como las configuraciones de tiempo de espera y de proxy. Para más información, consulte Advanced configuration.

Nota

Si la operación de API no admite parámetros de solicitud, no es necesario especificar un objeto de solicitud en la petición. Por ejemplo, al llamar a la operación DescribeCdnSubList, solo necesita especificar el parámetro de tiempo de ejecución.

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

4. Gestione los errores

El SDK V2.0 de Alibaba Cloud para PHP clasifica las excepciones en los siguientes tipos:

  • TeaUnretryableException: en la mayoría de los casos, este tipo de excepción se debe a problemas de red y se reporta cuando se alcanza el número máximo de reintentos.

  • InvalidArgumentException: generalmente, este error se activa cuando no se especifica un parámetro obligatorio o el tipo de parámetro no es válido. Revise el message de error para localizar el problema.

  • TeaException: casi siempre, este tipo de excepción se origina por errores de negocio.

Para más información sobre cómo gestionar las excepciones del SDK, consulte Exception handling.

Importante

Se recomienda aplicar medidas adecuadas de gestión de excepciones, como reportarlas, registrarlas y reintentar las operaciones, para garantizar la solidez y estabilidad de su sistema.

Haga clic para ver el código de muestra completo

Ejemplo de : Llame a la operación 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));

Escenario especial: Carga de archivos mediante la operación Advance

Cuando use Image Search o Visual Intelligence API (VIAPI) para procesar imágenes en una máquina local o cargar imágenes, la API de Image Search o VIAPI descrita en la documentación no admite la carga directa. Para cargar imágenes, necesita usar la operación Advance, que admite la transmisión de flujos de archivos. El servicio en la nube almacena temporalmente el archivo cargado en Object Storage Service (OSS) y lee el archivo temporal desde OSS cuando es necesario. La región predeterminada de OSS es cn-shanghai. El siguiente ejemplo muestra cómo llamar a la operación DetectBodyCount de VIAPI:

Nota

Los archivos temporales en OSS se eliminan periódicamente.

  1. Inicialice un cliente de solicitud

    Asegúrese de especificar tanto el parámetro regionId como el endpoint del servicio en la nube. El parámetro regionId indica la región de OSS donde se almacenan los archivos temporales. Si no configura el parámetro regionId, el servicio en la nube podría usar una región distinta a la de OSS, lo que provocaría tiempos de espera agotados en la 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. Cree un objeto de solicitud

    Cree el objeto de solicitud <API operation>AdvanceRequest para pasar flujos de archivos. En el objeto de solicitud, establezca el nombre del 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. Envíe una solicitud

    Llame a la operación <API operation>AdvanceRequest.

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

Haga clic para ver el código de muestra 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();

Preguntas frecuentes

  • ¿Cómo gestiono el error "You are not authorized to perform this operation" que devuelve una operación de API?

    Posibles causas: el par de AccessKey del usuario de Resource Access Management (RAM) no tiene los permisos necesarios para llamar a la operación de API.

    Soluciones: otorgue los permisos necesarios al usuario de RAM. Para más información, consulte Manage RAM user permissions.

    Por ejemplo, si la operación de API SendMessageToGlobe devuelve el error "You are not authorized to perform this operation", cree la siguiente política personalizada para otorgar los permisos necesarios al usuario de RAM:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • ¿Cómo gestiono el error de endpoint "PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException'" cuyo mensaje de error es cURL error 3?

    Posibles causas: la operación de API no es compatible con el endpoint que especificó al inicializar el cliente de solicitud.

    Soluciones: especifique un endpoint compatible e inténtelo de nuevo. Para más información, consulte Configure an endpoint.

  • ¿Cómo gestiono el error de AccessKey "PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2" que devuelve una operación de API?

    Posibles causas: el par de AccessKey no se pasó correctamente a la solicitud.

    Soluciones: asegúrese de pasar correctamente el par de AccessKey al inicializar el cliente de solicitud. El valor XXX de getenv("XXX") se obtiene de la variable de entorno.

  • ¿Cómo gestiono el error "code: 414 URL Too Long" que devuelve el SDK de Alibaba Cloud?

    Posibles causas: este problema no se debe al método de solicitud. Cuando usa el SDK de Alibaba Cloud, los parámetros de solicitud se pasan en las URL. Si una URL contiene demasiados parámetros o valores de parámetros muy largos, puede superar la longitud máxima permitida y provocar errores en la solicitud.

    Soluciones: para evitar URL demasiado largas, se recomienda usar request syntax and signature method V3. Utilice firmas autofirmadas para pasar los parámetros en el cuerpo de la solicitud y establezca el tipo de cuerpo como Content-Type: application/x-www-form-urlencoded.

Para más información sobre cómo gestionar los errores del SDK, consulte FAQ.