安裝PHP SDK
本文將詳細(xì)介紹云工作流的PHP SDK安裝步驟及調(diào)用示例。以PHP
語言為例,本文將講解如何調(diào)用云工作流以創(chuàng)建流程接口、獲取流程相關(guān)信息接口,以及異步啟動流程執(zhí)行的接口為例,并提供完整的集成步驟。
前提條件
調(diào)用阿里云OpenAPI通常需要設(shè)置訪問密鑰(AccessKey)。請確保已創(chuàng)建AccessKey。具體操作,請參見創(chuàng)建AccessKey。為了避免憑據(jù)泄露,常見的方案是將其寫入到環(huán)境變量中,更多安全方案請參見使用訪問憑據(jù)訪問阿里云OpenAPI最佳實(shí)踐。
環(huán)境要求
PHP版本 >= 5.6。
必須在系統(tǒng)上全局安裝 Composer。
執(zhí)行 composer 安裝 SDK 的 PHP 版本要小于或等于實(shí)際運(yùn)行時的 PHP 版本。 例如,在 PHP7.2 環(huán)境下安裝 SDK 后生成 vendor 目錄,只能在 PHP7.2 以上版本使用,如果拷貝到 PHP5.6 環(huán)境下使用,會出現(xiàn)依賴版本不兼容問題。一些用戶可能由于網(wǎng)絡(luò)問題無法安裝,可以通過以下命令使用阿里云 Composer 全量鏡像。
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
步驟一:引入SDK
阿里云SDK支持泛化與特化兩種方式調(diào)用OpenAPI,詳情參見泛化調(diào)用與特化調(diào)用,不同的調(diào)用方式需要引入的SDK也不同。
特化調(diào)用
您可以訪問OpenAPI門戶網(wǎng)站,搜索您需要的產(chǎn)品,查看產(chǎn)品支持的SDK語言及安裝方法,然后在您的項(xiàng)目中引入SDK。本案例的SDK獲取步驟如下:
訪問云工作流 SDK。
在所有語言欄目中選擇您需要的SDK語言。
選擇您需要的安裝方式,將代碼復(fù)制到您的項(xiàng)目中。
在您的項(xiàng)目中載入該依賴包。
其PHP語言安裝產(chǎn)品如下:
composer require alibabacloud/fnf-20190315 1.1.3
泛化調(diào)用
泛化調(diào)用方式不依賴任何一個產(chǎn)品的SDK,只依賴如下核心包com.aliyun.tea-openapi
。其PHP語言安裝配置文件如下,最新版本請參見tea-openapi。
composer require alibabacloud/darabonba-openapi
步驟二:初始化Client
請根據(jù)云工作流(FNF)所屬地域正確填寫服務(wù)接入地址(又稱“訪問端點(diǎn)”或“Endpoint”),關(guān)于服務(wù)接入地址的更多信息,請參見支持的地域。
以下將以特化調(diào)用代碼為例,詳細(xì)說明調(diào)用過程。如您選擇泛化調(diào)用方案,更多信息請參見泛化調(diào)用與特化調(diào)用。
使用AK初始化
阿里云賬號AccessKey擁有所有OpenAPI的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運(yùn)維。強(qiáng)烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
本示例以將AccessKey配置在環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET的方式來實(shí)現(xiàn)身份驗(yàn)證為例。
更多認(rèn)證信息配置方式,請參見管理訪問憑據(jù)。
不同操作系統(tǒng)的環(huán)境變量配置方法不同,具體操作,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量。
<?php
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Fnf\V20190315\Fnf;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Fnf\V20190315\Models\DescribeFlowRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化賬號Client
* @return Fnf Client
*/
public static function createClient() {
$config = new Config([
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
]);
$config->endpoint = "cn-hangzhou.fnf.aliyuncs.com";
return new Fnf($config);
}
}
步驟三:使用已初始化的Client調(diào)用云工作流(FNF) API
初始化Client后,您可以通過Client調(diào)用云工作流API。
接口名稱:CreateFlow
此接口用于創(chuàng)建一個流程。在調(diào)用過程中,您需要根據(jù)實(shí)際業(yè)務(wù)需求創(chuàng)建請求對象,并設(shè)置相應(yīng)的參數(shù)及運(yùn)行時配置。同時,您也可以自定義運(yùn)行時配置以滿足特定需求。
// 創(chuàng)建請求對象
$createFlowRequest = new CreateFlowRequest([
// 您的流程名稱
"name" => "my_flow_name",
// 流程定義,遵循 Flow Definition Language (FDL)語法標(biāo)準(zhǔn)。考慮到向前兼容,當(dāng)系統(tǒng)支持兩種規(guī)范的流程定義規(guī)范。
"definition" => "舊版:
\"
type: flow
version: v1
name: my_flow_name
steps:
- type: pass
name: mypass
\"
新版:
\"
Type: StateMachine
SpecVersion: v1
Name: my_flow_name
StartAt: my_state
States:
- Type: Pass
Name: my_state
End: true
\"",
// 流程描述
"description" => "your test flow",
// 流程類型
"type" => "FDL"
]);
// 運(yùn)行時配置
$runtime = new RuntimeOptions([]);
以下是使用AK創(chuàng)建一個流程的完整示例代碼:
<?php
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Fnf\V20190315\Fnf;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Fnf\V20190315\Models\CreateFlowRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化賬號Client
* @return Fnf Client
*/
public static function createClient(){
$config = new Config([
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
]);
$config->endpoint = "cn-hangzhou.fnf.aliyuncs.com";
return new Fnf($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
$client = self::createClient();
// 創(chuàng)建請求對象
$createFlowRequest = new CreateFlowRequest([
// 您的流程名稱
"name" => "my_flow_name",
// 流程定義,遵循 Flow Definition Language (FDL)語法標(biāo)準(zhǔn)。考慮到向前兼容,當(dāng)系統(tǒng)支持兩種規(guī)范的流程定義規(guī)范。
"definition" => "舊版:
\"
type: flow
version: v1
name: my_flow_name
steps:
- type: pass
name: mypass
\"
新版:
\"
Type: StateMachine
SpecVersion: v1
Name: my_flow_name
StartAt: my_state
States:
- Type: Pass
Name: my_state
End: true
\"",
// 流程描述
"description" => "your test flow",
// 流程類型
"type" => "FDL"
]);
// 運(yùn)行時配置
$runtime = new RuntimeOptions([]);
try {
// 復(fù)制代碼運(yùn)行請自行打印 API 的返回值
$client->createFlowWithOptions($createFlowRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 此處僅做打印展示,請謹(jǐn)慎對待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
// 錯誤 message
var_dump($error->message);
// 診斷地址
var_dump($error->data["Recommend"]);
Utils::assertAsString($error->message);
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
接口名稱:DescribeFlow
此接口用于獲取特定流程的相關(guān)信息。在調(diào)用過程中,您需要根據(jù)實(shí)際業(yè)務(wù)需求創(chuàng)建請求對象,并設(shè)置相應(yīng)的參數(shù)及運(yùn)行時配置。同時,您也可以自定義運(yùn)行時配置以滿足特定需求。
// 創(chuàng)建請求對象并設(shè)置入?yún)? $describeFlowRequest = new DescribeFlowRequest([
// 您的流程名稱
"name" => "my_flow_name"
]);
// 創(chuàng)建運(yùn)行時配置對象
$runtime = new RuntimeOptions([]);
以下是使用AK獲取流程相關(guān)信息的完整示例代碼:
<?php
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Fnf\V20190315\Fnf;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Fnf\V20190315\Models\DescribeFlowRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化賬號Client
* @return Fnf Client
*/
public static function createClient(){
$config = new Config([
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
]);
$config->endpoint = "cn-hangzhou.fnf.aliyuncs.com";
return new Fnf($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
$client = self::createClient();
// 創(chuàng)建請求對象并設(shè)置入?yún)? $describeFlowRequest = new DescribeFlowRequest([
// 您的流程名稱
"name" => "my_flow_name"
]);
// 創(chuàng)建運(yùn)行時配置對象
$runtime = new RuntimeOptions([]);
try {
// 復(fù)制代碼運(yùn)行請自行打印 API 的返回值
$client->describeFlowWithOptions($describeFlowRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 此處僅做打印展示,請謹(jǐn)慎對待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
// 錯誤 message
var_dump($error->message);
// 診斷地址
var_dump($error->data["Recommend"]);
Utils::assertAsString($error->message);
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
接口名稱:StartExecution
此接口用于獲取特定流程的相關(guān)信息。在調(diào)用過程中,您需要根據(jù)實(shí)際業(yè)務(wù)需求創(chuàng)建請求對象,并設(shè)置相應(yīng)的參數(shù)及運(yùn)行時配置。同時,您也可以自定義運(yùn)行時配置以滿足特定需求。
// 創(chuàng)建請求對象
$startExecutionRequest = new StartExecutionRequest([
// 您的開始執(zhí)行流程名稱
"flowName" => "your_flow_name",
// 執(zhí)行名稱
"executionName" => "your_exec_name",
// 執(zhí)行輸入
"input" => "{\"key\":\"value\"}",
// 流程執(zhí)行結(jié)束后回調(diào)TaskToken相關(guān)任務(wù) 示例值:12
"callbackFnFTaskToken" => "12"
]);
// 運(yùn)行時配置
$runtime = new RuntimeOptions([]);
以下是使用AK獲取流程相關(guān)信息的完整示例代碼:
<?php
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Fnf\V20190315\Fnf;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Fnf\V20190315\Models\StartExecutionRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化賬號Client
* @return Fnf Client
*/
public static function createClient(){
$config = new Config([
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
]);
// Endpoint 請參考 https://api.aliyun.com/product/fnf
$config->endpoint = "cn-hangzhou.fnf.aliyuncs.com";
return new Fnf($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
$client = self::createClient();
// 創(chuàng)建請求對象
$startExecutionRequest = new StartExecutionRequest([
// 您的開始執(zhí)行流程名稱
"flowName" => "your_flow_name",
// 執(zhí)行名稱
"executionName" => "your_exec_name",
// 執(zhí)行輸入
"input" => "{\"key\":\"value\"}",
// 流程執(zhí)行結(jié)束后回調(diào)TaskToken相關(guān)任務(wù) 示例值:12
"callbackFnFTaskToken" => "12"
]);
// 運(yùn)行時配置
$runtime = new RuntimeOptions([]);
try {
// 復(fù)制代碼運(yùn)行請自行打印 API 的返回值
$client->startExecutionWithOptions($startExecutionRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 此處僅做打印展示,請謹(jǐn)慎對待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
// 錯誤 message
var_dump($error->message);
// 診斷地址
var_dump($error->data["Recommend"]);
Utils::assertAsString($error->message);
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
SDK調(diào)用示例
您可以使用API級別的多語言SDK Demo進(jìn)行調(diào)試。示例代碼,請參見開發(fā)者門戶OpenAPI Explorer。