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.
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
SDK Center adresine gidin ve SDK'sını kullanmak istediğiniz hizmeti seçin. Bu örnekte Short Message Service (SMS) seçilmiştir.
-
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.

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:
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_IDkomutunu ç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,
cmdgirin 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%veecho %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/Mparametresi 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,
cmdgirin 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%veecho %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.
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.
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.
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
messagedeğ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.
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
Ö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:
OSS'teki geçici dosyalar düzenli olarak temizlenir.
-
Bir istek istemcisini başlatma
Hizmetin hem
regionIdparametresinin hem deendpointdeğerinin belirtildiğinden emin olun.regionIdgeçici dosyaların depolandığı OSS bölgesini belirtir.regionIdparametresini 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); } -
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ı
ImageURLObjectolarak 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 ]); -
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);
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çindekiXXXdeğ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-urlencodedolarak ayarlayın.
SDK hatalarının nasıl işleneceği hakkında daha fazla bilgi için bkz. SSS.