Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud SDK:Alibaba Cloud SDK V2.0 for PHP ile Entegrasyon

Son Güncelleme:Oct 07, 2026

API işlemlerini çağırırken SDK'yı projenize entegre etmenizi öneririz. SDK'lar geliştirme sürecini basitleştirir, özellikleri hızlıca entegre eder ve işletim maliyetlerini büyük ölçüde azaltır. Alibaba Cloud SDK'yı kullanmak için şu adımları izleyin: Alibaba Cloud SDK'yı yükleyin, bir erişim kimlik bilgisi yapılandırın ve SDK'yı kullanın. Bu konuda Alibaba Cloud SDK'nın nasıl kullanılacağı açıklanmaktadır.

Ön Koşullar

  • PHP 5.6 veya sonraki bir sürüm yüklü olmalıdır.

  • Composer yüklü olmalıdır.

Önemli

Composer kullanarak Alibaba Cloud SDK V2.0'ı yüklemek için kullanılan PHP sürümü, Alibaba Cloud SDK V2.0'ı çalıştırmak için kullanılan PHP sürümüne eşit veya ondan önceki bir sürüm olmalıdır. Örneğin, PHP 7.2'de Alibaba Cloud SDK V2.0 yüklendikten sonra oluşturulan vendor klasörü yalnızca PHP 7.2 veya sonraki sürümlerde kullanılabilir. Vendor klasörü PHP 5.6'ya kopyalanırsa bağımlılık PHP 5.6 ile uyumsuz olur. Ağ sorunları nedeniyle Composer'ı yükleyemezseniz Alibaba Cloud tarafından sağlanan Composer tam yansımasını kullanmak için aşağıdaki komutu çalıştırabilirsiniz:

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

SDK'yı İçe Aktarma

  1. SDK Center adresine gidin ve SDK'sını kullanmak istediğiniz hizmeti seçin. Bu örnekte Short Message Service (SMS) seçilmiştir.

  2. Install sayfasında , SDK Generation açılır listesinden V2.0 seçeneğini belirleyin ve All languages bölümünde PHP seçeneğine tıklayın. Quick Start sekmesinde Short Message Service (SMS) SDK'sının yükleme yöntemini edinin.

    image

Erişim Kimlik Bilgisini Yapılandırma

Bir Alibaba Cloud hizmetinin API işlemlerini çağırmak için AccessKey pair veya Security Token Service (STS) token gibi bir erişim kimlik bilgisi yapılandırmanız gerekir. AccessKey çiftlerinin sızmasını önlemek için AccessKey çiftlerini ortam değişkenlerinde kaydedebilirsiniz. Diğer güvenlik çözümleri hakkında daha fazla bilgi için bkz. Kimlik bilgisi güvenlik çözümleri. Bu örnekte AccessKey çiftlerini kaydetmek için ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenleri kullanılır.

Linux ve macOS'ta yapılandırma yöntemi

Aşağıdaki örneklerde değişken adı olarak ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET kullanılmıştır. Gerekirse bunları kendi değişken adlarınızla değiştirin; örneğin OSS_ACCESS_KEY_ID ve OSS_ACCESS_KEY_SECRET.

Ortam değişkenlerini ayarlamak için aşağıdaki export komutlarını çalıştırın:

Önemli

Export ile ayarlanan değişkenler geçicidir ve yalnızca geçerli oturum için geçerlidir. Kalıcılık sağlamak için export komutunu kabuk başlangıç dosyanıza (örneğin ~/.bashrc veya ~/.zshrc) ekleyin.

  • AccessKey ID'yi ayarlayın:

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • AccessKey secret'ı ayarlayın:

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Yapılandırmayı doğrulayın.

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID komutunu çalıştırın. Doğru değer döndürülürse yapılandırma başarılı demektir.

Windows'ta yapılandırma yöntemi

Grafik kullanıcı arabirimini (GUI) kullanma

  • Prosedür

    Aşağıdaki adımlarda Windows 10'da GUI kullanarak ortam değişkenlerinin nasıl ayarlanacağı açıklanmaktadır.

    Masanızda This PC öğesine sağ tıklayın ve Properties > Advanced system settings > Environment Variables > System variables veya User variables altında New seçeneklerini seçin. Ardından yapılandırmayı tamamlayın.

    Değişken

    Örnek değer

    AccessKey ID

    • Değişken adı: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Değişken değeri: yourAccessKeyID

    AccessKey secret

    • Değişken adı: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Değişken değeri: yourAccessKeySecret

  • Yapılandırmayı test edin

    Start öğesine tıklayın (veya Win+R klavye kısayolunu kullanın), Run öğesine tıklayın, cmd girin ve ardından OK düğmesine tıklayın (veya Enter tuşuna basın) komut istemini açmak için. echo %ALIBABA_CLOUD_ACCESS_KEY_ID% ve echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET% komutlarını çalıştırın. Komutlar doğru AccessKey'i döndürürse yapılandırma başarılı demektir.

Komut istemini (CMD) kullanma

  • Prosedür

    Komut istemini yönetici olarak açın ve sisteme yeni ortam değişkenleri eklemek için aşağıdaki komutları çalıştırın.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    /M parametresi bir sistem ortam değişkenini belirtir. Kullanıcı ortam değişkeni ayarlarken bu parametreyi atlayabilirsiniz.

  • Yapılandırmayı test edin

    Start öğesine tıklayın (veya Win+R klavye kısayolunu kullanın), Run öğesine tıklayın, cmd girin ve ardından OK düğmesine tıklayın (veya Enter tuşuna basın) komut istemini açmak için. echo %ALIBABA_CLOUD_ACCESS_KEY_ID% ve echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET% komutlarını çalıştırın. Komutlar doğru AccessKey'i döndürürse yapılandırma başarılı demektir.

Windows PowerShell kullanma

PowerShell'de tüm yeni oturumlarda geçerli olacak yeni ortam değişkenleri ayarlayabilirsiniz:

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

Tüm kullanıcılar için ortam değişkenleri ayarlamak üzere yönetici izinlerine sahip olmanız gerekir:

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

Yalnızca geçerli oturum için geçerli olacak geçici ortam değişkenleri ayarlayabilirsiniz:

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

PowerShell'de Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID ve Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET komutlarını çalıştırın. Komutlar doğru AccessKey'i döndürürse yapılandırma başarılı demektir.

SDK'yı Kullanma

Bu örnekte Short Message Service (SMS) hizmetinin SendMessageToGlobe API işlemi çağrılır. SendMessageToGlobe hakkında daha fazla bilgi için bkz. SendMessageToGlobe.

1. Bir istek istemcisini başlatma

SDK'da API işlemlerine yönelik tüm istekler bir istemci üzerinden gönderilir. Bir API işlemini çağırmadan önce istek istemcisini başlatmanız gerekir. Bir istek istemcisini başlatmak için birden çok yöntem kullanabilirsiniz. Bu örnekte bir istek istemcisini başlatmak için bir AccessKey çifti kullanılır. Daha fazla bilgi için bkz. Erişim kimlik bilgilerini yönetme.

Önemli
  • Dysmsapi örnekleri gibi istemci nesneleri iş parçacığı açısından güvenlidir ve güvenlik riski olmadan çok iş parçacıklı ortamlarda kullanılabilir. Her iş parçacığı için bir örnek oluşturmanız gerekmez.

  • Geliştirme projelerinde istemci nesnelerini sık sık oluşturmak için new anahtar sözcüğünü kullanmamanızı öneririz. Aksi takdirde kaynak israfı artabilir ve hizmet performansı düşebilir. İstemciyi singleton modunda kapsüllemenizi öneririz. Bu uygulama yaşam döngüsü boyunca aynı erişim kimlik bilgisi ve uç nokta için yalnızca bir İstemci örneğinin başlatılmasını sağlar.

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. Bir istek nesnesi oluşturma

Parametreleri iletmek için bir API işlemini çağırırken SDK tarafından sağlanan istek nesnesini kullanmanız gerekir. API işleminin istek nesnesini <API işlemi adı>Request biçiminde adlandırın. Örneğin SendSms API işleminin istek nesnesi SendSmsRequest'tir. Parametreler hakkında daha fazla bilgi için API referansına bakın. SendMessageToGlobe işlemi parametreleri hakkında daha fazla bilgi için bkz. SendMessageToGlobe.

Not

API işlemi istek parametrelerini desteklemiyorsa bir istek nesnesi oluşturmanız gerekmez. Örneğin DescribeCdnSubList işlemi istek parametrelerini desteklemez.

// 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. Bir API isteği başlatma

Bir API işlemini çağırmak için bir istek istemcisi kullanırken işlevi <API işlemi adı>WithOptions biçiminde adlandırmanızı öneririz. <API operation name> değerini camel case biçiminde belirtin. Bu işlev iki parametre içerir: istek nesnesi ve çalışma zamanı parametresi. İstek nesnesi önceki adımda oluşturulur. Çalışma zamanı parametresi zaman aşımı ve proxy yapılandırmaları gibi istek eylemini belirtmek için kullanılır. Daha fazla bilgi için bkz. Gelişmiş yapılandırma.

Not

API işlemi istek parametrelerini desteklemiyorsa istekte bir istek nesnesi belirtmeniz gerekmez. Örneğin DescribeCdnSubList işlemini çağırırken yalnızca çalışma zamanı parametresini belirtmeniz gerekir.

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

4. Hataları işleme

Alibaba Cloud SDK V2.0 for PHP özel durumları aşağıdaki türlere ayırır:

  • TeaUnretryableException: Bu tür özel durum çoğunlukla ağ sorunlarından kaynaklanır ve maksimum yeniden deneme sayısına ulaşıldığında bildirilir.

  • InvalidArgumentException: Bu tür hata çoğunlukla gerekli bir parametre belirtilmediğinde veya parametre türü geçersiz olduğunda tetiklenir. Hatayı bulmak için hata message değerini kontrol edebilirsiniz.

  • TeaException: Bu tür özel durum çoğunlukla iş mantığı hatalarından kaynaklanır.

SDK özel durumlarının nasıl işleneceği hakkında daha fazla bilgi için bkz. Özel durum işleme.

Önemli

Sisteminizin sağlamlığını ve kararlılığını sağlamak için özel durumları raporlama, günlük kaydı tutma ve yeniden deneme gibi uygun özel durum işleme önlemleri almanızı öneririz.

Tam örnek kodu görüntülemek için tıklayın

Example: SendMessageToGlobe işlemini çağırma

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

Özel senaryo: Advance işlemi aracılığıyla dosya yükleme

Image Search veya Visual Intelligence API (VIAPI) kullanarak yerel makinedeki görüntüleri işlerken veya görüntüleri yüklerken belgede açıklanan Image Search veya VIAPI API'si doğrudan yüklemeyi desteklemez. Görüntüleri yüklemek için dosya akışlarının iletilmesini destekleyen Advance işlemini kullanmanız gerekir. Cloud hizmeti yüklenen dosyayı geçici olarak Object Storage Service (OSS) içinde depolar ve gerektiğinde geçici dosyayı OSS'ten okur. OSS'in varsayılan bölgesi cn-shanghai olarak ayarlanmıştır. Aşağıdaki örnekte VIAPI'nin DetectBodyCount işleminin nasıl çağrılacağı gösterilmektedir:

Not

OSS'teki geçici dosyalar düzenli olarak temizlenir.

  1. Bir istek istemcisini başlatma

    Hizmetin hem regionId parametresinin hem de endpoint değerinin belirtildiğinden emin olun. regionId geçici dosyaların depolandığı OSS bölgesini belirtir. regionId parametresini yapılandırmazsanız cloud hizmeti OSS'ten farklı bir bölge kullanabilir ve bu durum API zaman aşımlarına neden olabilir.

    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. Bir istek nesnesi oluşturma

    Dosya akışlarını iletmek için <API işlemi>AdvanceRequest istek nesnesini oluşturun. İstek nesnesinde parametre adını ImageURLObject olarak ayarlayın.

    // 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. Bir istek başlatma

    <API işlemi>AdvanceRequest işlemini çağırın.

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

Tam örnek kodu görüntülemek için tıklayın

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

SSS

  • Bir API işlemi tarafından oluşan "You are not authorized to perform this operation" hatasını nasıl işlerim?

    Olası nedenler: Resource Access Management (RAM) kullanıcısının AccessKey çifti API işlemini çağırma iznine sahip değil.

    Çözümler: RAM kullanıcısına gerekli izinleri verin. Daha fazla bilgi için bkz. RAM kullanıcı izinlerini yönetme.

    Örneğin SendMessageToGlobe API işlemi "You are not authorized to perform this operation" hatası veriyorsa RAM kullanıcısına gerekli izinleri vermek için aşağıdaki özel ilkeyi oluşturun:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • Hata iletisi cURL error 3 olan "PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException" uç nokta hatasını nasıl işlerim?

    Olası nedenler: API işlemi istek istemcisini başlatırken belirttiğiniz uç noktayı desteklemiyor.

    Çözümler: Desteklenen bir uç nokta belirtin ve tekrar deneyin. Daha fazla bilgi için bkz. Uç nokta yapılandırma.

  • Bir API işlemi tarafından oluşan "PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2" AccessKey hatasını nasıl işlerim?

    Olası nedenler: AccessKey çifti isteye doğru şekilde iletilmemiş.

    Çözümler: İstek istemcisini başlatırken AccessKey çiftinin doğru şekilde iletildiğinden emin olun. getenv("XXX") içindeki XXX değeri ortam değişkeninden alınır.

  • Alibaba Cloud SDK tarafından oluşan "code: 414 URL Too Long" hatasını nasıl işlerim?

    Olası nedenler: Bu sorun istek yönteminden kaynaklanmaz. Alibaba Cloud SDK'yı kullanırken istek parametreleri URL'lerde iletilir. Bir URL aşırı sayıda parametre veya çok uzun parametre değerleri içeriyorsa URL maksimum uzunluğu aşabilir ve istek başarısız olabilir.

    Çözümler: Çok uzun URL'leri önlemek için istem sözdizimi ve imzalama yöntemi V3 kullanmanızı öneririz. Parametreleri istek gövdesinde iletmek için kendi kendine imzalı imzalar kullanın ve gövde türünü Content-Type: application/x-www-form-urlencoded olarak ayarlayın.

SDK hatalarının nasıl işleneceği hakkında daha fazla bilgi için bkz. SSS.