全部产品
Search
文档中心

Alibaba Cloud SDK:Integrasi dengan Alibaba Cloud SDK V2.0 untuk PHP

更新时间:Jul 08, 2025

Saat memanggil operasi API, kami sarankan Anda mengintegrasikan SDK ke dalam proyek Anda. SDK menyederhanakan proses pengembangan, mempercepat integrasi fitur, dan secara signifikan mengurangi biaya O&M. Untuk menggunakan Alibaba Cloud SDK, ikuti langkah-langkah berikut: instal Alibaba Cloud SDK, konfigurasikan kredensial akses, dan gunakan SDK. Topik ini menjelaskan cara menggunakan Alibaba Cloud SDK.

Prasyarat

  • PHP 5.6 atau yang lebih baru telah diinstal.

  • Composer telah diinstal.

Penting

Versi PHP yang digunakan untuk menginstal Alibaba Cloud SDK V2.0 menggunakan Composer harus sama atau lebih awal dari versi PHP yang digunakan untuk menjalankan Alibaba Cloud SDK V2.0. Sebagai contoh, folder vendor yang dihasilkan setelah Alibaba Cloud SDK V2.0 diinstal di PHP 7.2 hanya dapat digunakan di PHP 7.2 atau yang lebih baru. Jika folder vendor disalin ke PHP 5.6, dependensi tidak akan kompatibel dengan PHP 5.6. Jika Anda gagal menginstal Composer karena masalah jaringan, Anda dapat menjalankan perintah berikut untuk menggunakan gambar penuh Composer yang disediakan oleh Alibaba Cloud:

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

Impor SDK.

  1. Masuk ke SDK Center dan pilih layanan yang SDK-nya ingin Anda gunakan. Dalam contoh ini, Short Message Service (SMS) dipilih.

  2. Pada halaman Install, pilih V2.0 dari daftar drop-down SDK Generation dan klik PHP di bagian All languages. Pada tab Quick Start, dapatkan metode instalasi Short Message Service (SMS) SDK.

    image

Konfigurasikan kredensial akses

Untuk memanggil operasi API layanan Alibaba Cloud, Anda harus mengonfigurasi kredensial akses, seperti Pasangan AccessKey atau Token Layanan Keamanan (STS). Untuk mencegah kebocoran pasangan AccessKey, Anda dapat mencatat pasangan AccessKey dalam variabel lingkungan. Untuk informasi lebih lanjut tentang solusi keamanan lainnya, lihat Solusi Keamanan Kredensial. Dalam contoh ini, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET digunakan untuk mencatat pasangan AccessKey.

Konfigurasikan variabel lingkungan di Linux dan macOS

Konfigurasikan variabel lingkungan menggunakan perintah export

Penting

Variabel lingkungan sementara yang dikonfigurasi menggunakan perintah export hanya valid untuk sesi saat ini. Setelah Anda keluar dari sesi, variabel lingkungan yang dikonfigurasi menjadi tidak valid. Untuk mengonfigurasi variabel lingkungan permanen, Anda dapat menambahkan perintah export ke file konfigurasi startup sistem operasi yang sesuai.

  • Konfigurasikan ID AccessKey dan tekan Enter.

    # Ganti <ACCESS_KEY_ID> dengan ID AccessKey Anda.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Konfigurasikan Rahasia AccessKey dan tekan Enter.

    # Ganti <ACCESS_KEY_SECRET> dengan rahasia AccessKey Anda.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Periksa apakah konfigurasi berhasil.

    Jalankan perintah echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Jika ID AccessKey yang valid dikembalikan, variabel lingkungan telah dikonfigurasi.

Konfigurasikan variabel lingkungan di Windows

Gunakan GUI

  • Prosedur

    Jika Anda ingin menggunakan GUI untuk mengonfigurasi variabel lingkungan di Windows 10, lakukan langkah-langkah berikut:

    Di desktop Windows, klik kanan This PC dan pilih Properties. Di halaman yang muncul, klik Advanced system settings. Di kotak dialog System Properties, klik Environment Variables pada tab Advanced. Di kotak dialog Environment Variables, klik New di bagian User variables atau System variables. Kemudian, konfigurasikan variabel yang dijelaskan dalam tabel berikut.

    Variabel

    Contoh

    ID AccessKey

    • Nama Variabel: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Nilai Variabel: LTAI****************

    Rahasia AccessKey

    • Nama Variabel: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Nilai Variabel: yourAccessKeySecret

  • Periksa apakah konfigurasi berhasil.

    Di desktop Windows, klik Start atau tekan Win + R. Di kotak dialog Run, masukkan cmd. Lalu, klik OK atau tekan Enter. Di halaman yang muncul, jalankan perintah echo %ALIBABA_CLOUD_ACCESS_KEY_ID% dan echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika pasangan AccessKey yang valid dikembalikan, konfigurasi berhasil.

Gunakan CMD

  • Prosedur

    Buka jendela Command Prompt sebagai administrator dan jalankan perintah berikut untuk menambahkan variabel lingkungan di sistem operasi:

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    /M menunjukkan bahwa variabel lingkungan bersifat tingkat sistem. Anda dapat memilih untuk tidak menggunakan parameter ini saat mengonfigurasi variabel lingkungan tingkat pengguna.

  • Periksa apakah konfigurasi berhasil.

    Di desktop Windows, klik Start atau tekan Win + R. Di kotak dialog Run, masukkan cmd. Lalu, klik OK atau tekan Enter. Di halaman yang muncul, jalankan perintah echo %ALIBABA_CLOUD_ACCESS_KEY_ID% dan echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika pasangan AccessKey yang valid dikembalikan, konfigurasi berhasil.

Gunakan Windows PowerShell

Di PowerShell, konfigurasikan variabel lingkungan baru. Variabel lingkungan berlaku untuk semua sesi baru.

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

Konfigurasikan variabel lingkungan untuk semua pengguna. Anda harus menjalankan perintah berikut sebagai administrator.

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

Konfigurasikan variabel lingkungan sementara. Variabel lingkungan hanya berlaku untuk sesi saat ini.

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

Di PowerShell, jalankan perintah Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID dan Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Jika pasangan AccessKey yang valid dikembalikan, konfigurasi berhasil.

Gunakan SDK

Dalam contoh ini, operasi API SendMessageToGlobe dari Short Message Service (SMS) dipanggil. Untuk informasi lebih lanjut tentang SendMessageToGlobe, lihat SendMessageToGlobe.

1. Inisialisasi klien permintaan

Di SDK, semua permintaan ke operasi API dikirim dari klien. Sebelum Anda dapat memanggil operasi API, Anda harus menginisialisasi klien permintaan. Anda dapat menggunakan beberapa metode untuk menginisialisasi klien permintaan. Dalam contoh ini, pasangan AccessKey digunakan untuk menginisialisasi klien permintaan. Untuk informasi lebih lanjut, lihat Kelola Kredensial Akses.

Penting
  • Objek klien, seperti instance Dysmsapi, aman thread, dan dapat digunakan di lingkungan multithread tanpa risiko keamanan. Anda tidak perlu membuat instance untuk setiap thread.

  • Dalam proyek pengembangan, kami sarankan Anda tidak menggunakan kata kunci new untuk sering membuat objek klien. Jika tidak, pemborosan sumber daya mungkin meningkat dan performa layanan mungkin menurun. Kami sarankan Anda mengenkapsulasi klien dalam mode singleton. Ini memastikan bahwa hanya satu instance Client yang diinisialisasi untuk kredensial akses dan titik akhir yang sama selama siklus hidup aplikasi.

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. Buat objek permintaan

Saat Anda memanggil operasi API untuk melewati parameter, Anda harus menggunakan objek permintaan yang disediakan oleh SDK. Beri nama objek permintaan operasi API dalam format berikut: <Nama Operasi API>Request. Sebagai contoh, objek permintaan operasi API SendSms adalah SendSmsRequest. Untuk informasi lebih lanjut tentang parameter, lihat referensi API. Untuk informasi lebih lanjut tentang parameter operasi SendMessageToGlobe, lihat SendMessageToGlobe.

Catatan

Jika operasi API tidak mendukung parameter permintaan, Anda tidak perlu membuat objek permintaan. Sebagai contoh, operasi DescribeCdnSubList tidak mendukung parameter permintaan.

// 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. Mulai permintaan API

Saat Anda menggunakan klien permintaan untuk memanggil operasi API, kami sarankan Anda menamai fungsi dalam format berikut: <Nama Operasi API>WithOptions. Tentukan <Nama Operasi API> dalam huruf unta. Fungsi ini berisi dua parameter: objek permintaan dan parameter runtime. Objek permintaan dibuat pada langkah sebelumnya. Parameter runtime digunakan untuk menentukan tindakan permintaan, seperti timeout dan konfigurasi proxy. Untuk informasi lebih lanjut, lihat Konfigurasi Lanjutan.

Catatan

Jika operasi API tidak mendukung parameter permintaan, Anda tidak perlu menentukan objek permintaan dalam permintaan. Sebagai contoh, Anda hanya perlu menentukan parameter runtime saat memanggil operasi DescribeCdnSubList.

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

4. Tangani kesalahan

Alibaba Cloud SDK V2.0 untuk PHP mengklasifikasikan pengecualian ke dalam jenis-jenis berikut:

  • TeaUnretryableException: Dalam banyak kasus, jenis pengecualian ini disebabkan oleh masalah jaringan dan dilaporkan ketika jumlah maksimum percobaan ulang tercapai.

  • InvalidArgumentException: Dalam banyak kasus, jenis kesalahan ini dipicu ketika parameter yang diperlukan tidak ditentukan atau tipe parameter tidak valid. Anda dapat memeriksa pesan kesalahan untuk menemukan kesalahan.

  • TeaException: Dalam banyak kasus, jenis pengecualian ini disebabkan oleh kesalahan bisnis.

Untuk informasi lebih lanjut tentang cara menangani pengecualian SDK, lihat Penanganan Pengecualian.

Penting

Kami sarankan Anda mengambil langkah-langkah penanganan pengecualian yang tepat, seperti melaporkan pengecualian, mencatat pengecualian, dan melakukan percobaan ulang, untuk memastikan kekokohan dan stabilitas sistem Anda.

Klik untuk melihat kode sampel lengkap

Contoh: Panggil operasi 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));

Skenario khusus: Unggah file melalui operasi Advance

Saat Anda menggunakan Image Search atau Visual Intelligence API (VIAPI) untuk memproses gambar di mesin lokal atau mengunggah gambar, API dari Image Search atau VIAPI yang dijelaskan dalam dokumentasi tidak mendukung pengunggahan langsung. Untuk mengunggah gambar, Anda perlu menggunakan operasi Advance, yang mendukung transmisi aliran file. Layanan cloud menyimpan file yang diunggah sementara di Object Storage Service (OSS), dan membaca file sementara dari OSS jika diperlukan. Wilayah OSS default adalah cn-shanghai. Contoh berikut menunjukkan cara memanggil operasi DetectBodyCount dari VIAPI:

Catatan

File sementara di OSS secara berkala dibersihkan.

  1. Inisialisasi Klien Permintaan

    Pastikan bahwa parameter regionId dan endpoint layanan cloud ditentukan. regionId menunjukkan wilayah OSS tempat file sementara disimpan. Jika Anda tidak mengonfigurasi parameter regionId, layanan cloud mungkin menggunakan wilayah yang berbeda dari OSS, yang mengakibatkan timeout API.

    function createClient()
    {
        $config = new Config([
            // getenv menentukan bahwa kredensial akses diperoleh dari variabel lingkungan.
            // Diperlukan. Pastikan variabel lingkungan berikut diatur dalam lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_ID. 
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // Diperlukan. Pastikan variabel lingkungan berikut diatur dalam lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Tentukan wilayah yang sama untuk parameter endpoint dan regionId.
        $config->endpoint = "facebody.cn-shanghai.aliyuncs.com";
        $config->regionId = "cn-shanghai";
        return new Facebody($config);
    }
  2. Buat Objek Permintaan

    Buat objek permintaan <Operasi API>AdvanceRequest untuk melewati aliran file. Di objek permintaan, atur nama parameter ke ImageURLObject.

    // Baca file dan ubah menjadi objek Stream.
            $imagePath = "<FILE_PATH>";   // Ganti <FILE_PATH> dengan jalur file sebenarnya.
            try {
                $fileStream = new Stream(fopen($imagePath, "r"));
            } catch (\Exception $e) {
                die("Gagal membaca file: " . $e->getMessage());
            }
            // Buat objek permintaan dan konfigurasikan parameter permintaan.
            $detectBodyCountAdvanceRequest = new DetectBodyCountAdvanceRequest([
                "imageURLObject" =>  $fileStream
            ]);   
  3. Mulai Permintaan

    Panggil operasi <Operasi API>AdvanceRequest.

    // Konfigurasikan parameter runtime.
     $runtime = new RuntimeOptions([]);
     $client = self::createClient();
     // Kirim permintaan.      
     $client->detectBodyCountAdvance($detectBodyCountAdvanceRequest, $runtime);

Klik untuk Melihat Kode Sampel Lengkap

<?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([
            // Diperlukan. Pastikan variabel lingkungan berikut diatur dalam lingkungan runtime kode: ALIBABA_CLOUD_ACCESS_KEY_ID. 
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // Diperlukan. Pastikan variabel lingkungan berikut diatur dalam lingkungan runtime kode: 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();

        // Baca file dan ubah menjadi objek Stream.  
        $imagePath = "<FILE_PATH>";   // Ganti nilai dengan jalur file sebenarnya.
        if (!file_exists($imagePath)) {
            die("File tidak ada: $imagePath");
        }
        try {
            $fileStream = new Stream(fopen($imagePath, "r"));
        } catch (Exception $e) {
            die("Gagal membaca file: " . $e->getMessage());
        }
        // Buat objek permintaan.
        $detectBodyCountAdvanceRequest = new DetectBodyCountAdvanceRequest([
            "imageURLObject" => $fileStream
        ]);
        // Konfigurasikan pengaturan runtime.
        $runtime = new RuntimeOptions([]);
        try {
            // Kirim permintaan.
            $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

  • Bagaimana cara menangani kesalahan "Anda tidak memiliki izin untuk melakukan operasi ini" yang dilemparkan oleh operasi API?

    Penyebab yang Mungkin: Pasangan AccessKey dari pengguna Resource Access Management (RAM) tidak memiliki izin untuk memanggil operasi API.

    Solusi: Berikan izin yang diperlukan kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Berikan Izin kepada Pengguna RAM.

    Sebagai contoh, jika kesalahan "Anda tidak memiliki izin untuk melakukan operasi ini" dilemparkan oleh operasi API SendMessageToGlobe, buat kebijakan kustom berikut untuk memberikan izin yang diperlukan kepada pengguna RAM:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • Bagaimana cara menangani kesalahan "PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException" dengan pesan kesalahan endpoint yang menyebutkan cURL error 3?

    Penyebab yang Mungkin: Operasi API tidak mendukung endpoint yang Anda tentukan saat menginisialisasi klien permintaan.

    Solusi: Tentukan endpoint yang didukung dan coba lagi. Untuk informasi lebih lanjut, lihat Konfigurasikan Endpoint.

  • Bagaimana cara menangani kesalahan "PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2" yang dilemparkan oleh operasi API?

    Penyebab yang Mungkin: Pasangan AccessKey tidak diteruskan dengan benar ke permintaan.

    Solusi: Pastikan pasangan AccessKey diteruskan dengan benar saat Anda menginisialisasi klien permintaan. Nilai XXX dari getenv("XXX") diperoleh dari variabel lingkungan.

  • Bagaimana cara menangani kesalahan "code: 414 URL Too Long" yang dilemparkan oleh Alibaba Cloud SDK?

    Penyebab yang Mungkin: Masalah ini tidak disebabkan oleh metode permintaan. Saat menggunakan Alibaba Cloud SDK, parameter permintaan dilewatkan dalam URL. Jika URL berisi jumlah parameter yang berlebihan atau nilai parameter yang terlalu panjang, URL mungkin melebihi panjang maksimum dan menyebabkan kegagalan permintaan.

    Solusi: Untuk mencegah URL yang terlalu panjang, kami sarankan Anda menggunakan sintaks permintaan dan metode tanda tangan V3. Gunakan tanda tangan mandiri untuk melewati parameter dalam badan permintaan dan atur jenis badan ke Content-Type: application/x-www-form-urlencoded.

Untuk informasi lebih lanjut tentang cara menangani kesalahan SDK, lihat FAQ.