PHP SDK使用指导
本章节介绍了PHP SDK的使用说明,您可以参考本章节进行快速集成开发。
开发前准备
- 已注册华为账号并开通华为云,完成实名认证。
国际站和欧洲站用户在以下情况下需要进行账号实名认证。
- 根据中国大陆相关法规要求,购买和使用中国大陆节点云产品服务的用户需要实名认证。
- 购买视频直播服务时,如果您选择的区域包含中国大陆,则需要实名认证。
- 具备已备案的域名用于直播推流和播放,并在视频直播控制台添加推流和播放域名,且已完成域名关联。
- 已具备开发环境 ,支持 PHP 5.6及以上版本。
- 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台访问密钥。 页面上创建和查看您的AK/SK。具体请参见
- 已获取直播服务对应区域的项目ID,请在华为云控制台API凭证。 页面上查看项目ID。具体请参见
安装SDK
视频直播服务端SDK支持PHP 5.6及以上版本。执行“ php --version”,检查当前PHP的版本信息。
推荐使用Composer安装SDK。
1 2 3 4 |
# 安装 Composer curl -sS https://getcomposer.org/installer | php # 安装 PHP SDK composer require huaweicloud/huaweicloud-sdk-php |
1
|
require 'path/to/vendor/autoload.php'; |
开始使用
- 导入依赖模块。
1 2 3 4 5 6 7 8 9
namespace HuaweiCloud\SDK\Live\V1\Model; require_once "vendor/autoload.php"; use HuaweiCloud\SDK\Core\Auth\BasicCredentials; use HuaweiCloud\SDK\Core\Http\HttpConfig; use HuaweiCloud\SDK\Core\Exceptions\ConnectionException; use HuaweiCloud\SDK\Core\Exceptions\RequestTimeoutException; use HuaweiCloud\SDK\Core\Exceptions\ServiceResponseException; // 导入指定Live的库 use HuaweiCloud\SDK\Live\V1\LiveClient;
- 配置客户端属性。
- 默认配置。
1 2
// 使用默认配置 $config = HttpConfig::getDefaultConfig();
- (可选操作)配置代理。
1 2 3 4 5 6 7 8
// 使用代理服务器(可选) // 代理服务器的password直接写入代码,会有很大安全风险。建议密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。 // 代理配置设置前,请先在本地环境中设置环境变量PROXY_PASSWORD $config->setProxyProtocol('http'); $config->setProxyHost('proxy.huawei.com'); $config->setProxyPort(8080); $config->setProxyUser('username'); $config->setProxyPassword(getenv('PROXY_PASSWORD'));
- (可选操作)配置连接。
1 2
// 配置连接超时(可选),支持统一指定超时时长timeout=timeout,或分别指定超时时长timeout=(connect timeout, read timeout) $config->setConnectionTimeout(3);
- (可选操作)配置SSL。
1 2 3 4
# (可选)配置跳过服务端证书校验 $config->setIgnoreSslVerification(true); # 配置服务器端CA证书,用于SDK验证服务端证书合法性 $config->setCertFile("{yourCertFile}");
- 默认配置。
- 初始化认证信息。
支持两种方式认证,您可以根据实际情况进行选择。
- 使用永久AK/SK
首先需要获取永久AK和SK,以及projectId,您可以参考开发前准备获取。
1
$basicCredentials = new BasicCredentials($ak,$sk,$projectId);
- 使用临时AK/SK
首先需要获得临时AK、SK和SecurityToken,您可以通过token获取或者通过委托授权获取。
1
$basicCredentials = BasicCredentials(ak, sk, projectId).withSecurityToken(securityToken);
相关参数说明如下所示:- ak:华为云账号Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
- sk:华为云账号Secret Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
- project_id:云服务所在项目ID ,根据您需要操作的项目所属区域选择对应的项目ID 。
- securitytoken:采用临时AK/SK认证场景下的安全票据。
- 使用永久AK/SK
- 初始化客户端。
1 2 3 4 5 6 7
// 初始化直播服务的客户端 $client = LiveClient::newBuilder(new LiveClient) ->withHttpConfig($config) ->withEndpoint($endpoint) ->withCredentials($credentials) ->build(); $request = new CreateDomainRequest();
endpoint:直播服务应用区域和各服务的终端节点,具体请参见地区和终端节点。
- 发送请求并查看响应。
1 2 3 4
// 初始化请求,以调用查询转码模板接口为例 $request = new ShowTranscodingsTemplateRequest("play.example.huaweicloud.com"); $response = $client->ShowTranscodingsTemplate($request); echo $response;
- 异常处理。
表1 异常处理 一级分类
一级分类说明
二级分类
二级分类说明
ConnectionException
连接类异常
HostUnreachableException
网络不可达、被拒绝
SslHandShakeException
SSL认证异常
RequestTimeoutException
响应超时异常
CallTimeoutException
单次请求,服务器处理超时未返回
RetryOutageException
在重试策略消耗完成以后,仍无有效的响应
ServiceResponseException
服务器响应异常
ServerResponseException
服务端内部错误,Http响应码:[500,]
ClientRequestException
请求参数不合法,Http响应码:[400, 500)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 异常处理 try { $response = $client->ShowTranscodingsTemplate($request); } catch (ConnectionException $e) { $msg = $e->getMessage(); echo "\n". $msg ."\n"; } catch (RequestTimeoutException $e) { $msg = $e->getMessage(); echo "\n". $msg ."\n"; } catch (ServiceResponseException $e) { echo "\n"; echo $e->getHttpStatusCode(). "\n"; echo $e->getErrorCode() . "\n"; echo $e->getErrorMsg() . "\n"; }
- 原始Http侦听器。
在某些场景下可能对业务发出的Http请求进行Debug,需要看到原始的Http请求和返回信息,SDK提供侦听器功能来获取原始的和加密的Http请求和返回信息。
原始信息打印仅在debug阶段使用,请不要在生产系统中将原始的Http头和Body信息打印到日志,这些信息并未加密且其中包含敏感数据;当Body体为二进制内容,即Content-Type标识为二进制时body为"***",详细内容不输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
$requestHandler = function ($argsMap) { if (isset($argsMap['request'])) { $sdkRequest = $argsMap['request']; $requestHeaders = $sdkRequest->headerParams; $requestBase = "> Request " . $sdkRequest->method . ' ' . $sdkRequest->url . "\n"; if (count($requestHeaders) > 0) { $requestBase = $requestBase . '> Headers:' . "\n"; foreach ($requestHeaders as $key => $value) { $requestBase = $requestBase . ' ' . $key . ' : ' . $value . "\n"; } $requestBase = $requestBase . '> Body: ' . $sdkRequest->body . "\n\n"; } if (isset($argsMap['logger'])) { $logger = $argsMap['logger']; $logger->addDebug($requestBase); } } }; $responseHandler = function ($argsMap) { if (isset($argsMap['response'])) { $response = $argsMap['response']; $responseBase = "> Response HTTP/1.1 " . $response->getStatusCode() . "\n"; $responseHeaders = $response->getHeaders(); if (count($responseHeaders) > 0) { $responseBase = $responseBase . '> Headers:' . "\n"; foreach ($responseHeaders as $key => $value) { $valueToString = ''; if (is_array($value)) { $valueToString = ''.join($value); } $responseBase = $responseBase . ' ' . $key . ' : ' . $valueToString . "\n"; } $responseBody = $response->getBody(); $responseBase = $responseBase . '> Body: ' . (string) $responseBody . "\n\n"; } if (isset($argsMap['logger'])) { $logger = $argsMap['logger']; $logger->addDebug($responseBase); } } }; $httpHandler = new HttpHandler(); $httpHandler->addRequestHandlers($requestHandler); $httpHandler->addResponseHandlers($responseHandler); $iamClient = LiveClient::newBuilder() ->withHttpConfig($config) ->withEndpoint($endpoint) ->withCredentials(null) ->withStreamLogger($stream = 'php://stdout',$logLevel =Logger::INFO) // 日志打印至控制台 ->withFileLogger($logPath='./test_log.txt', $logLevel = Logger::INFO) // 日志打印至文件 ->withHttpHandler($httpHandler) ->build();
代码示例
调用前请根据实际情况替换如下变量:{your endpoint string} 以及 {your project id}。
认证用的AK、SK直接写入代码,会有很大安全风险,建议密文形式存放在配置文件或者环境变量中,待使用时再解密,以确保安全。
本示例以AK、SK保存在环境变量中为例。运行本示例前,请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php namespace HuaweiCloud\SDK\Live\V1\Model; require_once "vendor/autoload.php"; use HuaweiCloud\SDK\Core\Auth\BasicCredentials; use HuaweiCloud\SDK\Core\Http\HttpConfig; use HuaweiCloud\SDK\Core\Exceptions\ConnectionException; use HuaweiCloud\SDK\Core\Exceptions\RequestTimeoutException; use HuaweiCloud\SDK\Core\Exceptions\ServiceResponseException; use HuaweiCloud\SDK\Live\V1\LiveClient; $ak = getenv('HUAWEICLOUD_SDK_AK'); $sk = getenv('HUAWEICLOUD_SDK_SK'); $endpoint = "https://live.cn-north-4.myhuaweicloud.com"; $projectId = ""; $credentials = new BasicCredentials($ak,$sk,$projectId); $config = HttpConfig::getDefaultConfig(); $config->setIgnoreSslVerification(true); $client = LiveClient::newBuilder(new LiveClient) ->withHttpConfig($config) ->withEndpoint($endpoint) ->withCredentials($credentials) ->build(); $request = new ShowTranscodingsTemplateRequest(); try { $response = $client->ShowTranscodingsTemplate($request); } catch (ConnectionException $e) { $msg = $e->getMessage(); echo "\n". $msg ."\n"; } catch (RequestTimeoutException $e) { $msg = $e->getMessage(); echo "\n". $msg ."\n"; } catch (ServiceResponseException $e) { echo "\n"; echo $e->getHttpStatusCode(). "\n"; echo $e->getErrorCode() . "\n"; echo $e->getErrorMsg() . "\n"; } echo "\n"; echo $response; |