这个阿里云OpenAPI 问题怎么解决?错误信息;以及代码;
<?php
//安装依赖包
//composer require alibabacloud/videoenhan-20200320
use AlibabaCloud\SDK\Videoenhan\V20200320\Videoenhan;
use AlibabaCloud\Tea\Utils\Utils;
use \Exception;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Videoenhan\V20200320\Models\GenerateVideoAdvanceRequest\fileList;
use AlibabaCloud\SDK\Videoenhan\V20200320\Models\GenerateVideoAdvanceRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use GuzzleHttp\Psr7\Stream;
class GenerateVideoAdvance {
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @return Videoenhan Client
*/
public static function createClient($accessKeyId, $accessKeySecret){
//初始化配置对象Darabonba\OpenApi\Models\Config。
//Config对象存放accessKeyId、accessKeySecret、endpoint等配置
$config = new Config([
"accessKeyId" => $accessKeyId,
"accessKeySecret" => $accessKeySecret
]);
// 访问的域名
$config->endpoint = "videoenhan.cn-shanghai.aliyuncs.com";
return new Videoenhan($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
// 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html
// 如果您是用的子账号AccessKey,还需要为子账号授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
// 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。
//$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
//$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$client = self::createClient("LTAI5tN******sEctcPVE", "ZPu27tZv*****A2boiBG");
// 场景一,使用本地文件
//$file0 = fopen('/tmp/1-video1.mp4', 'rb');
//$stream0 = new Stream($file0);
// 场景二,使用任意可访问的url
$file1 = fopen('https://we*****/test.mp4', 'rb');
$stream1 = new Stream($file1);
$fileList0 = new fileList([
"type" => "video",
"fileUrlObject" => $stream0,
"fileName" => "1-video1.mp4"
]);
$fileList1 = new fileList([
"type" => "video",
"fileUrlObject" => $stream1,
"fileName" => "1-video2.mp4"
]);
$generateVideoAdvanceRequest = new GenerateVideoAdvanceRequest([
"scene" => "costume",
"width" => 640,
"height" => 640,
"style" => "fast",
"duration" => 10,
"transitionStyle" => "brush",
"fileList" => [
$fileList0,
$fileList1
]
]);
$runtime = new RuntimeOptions([]);
try {
$resp = $client->generateVideoAdvance($generateVideoAdvanceRequest, $runtime);
# 获取整体结果
echo Utils::toJSONString($resp->body);
} catch (Exception $exception) {
# 获取整体报错信息
echo Utils::toJSONString($exception);
# 获取单个字段
echo $exception->getCode();
}
}
}
$path = DIR . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
//$argv是预留的数组入参参数,无实际意义,无需进行修改
GenerateVideoAdvance::main(array_slice($argv, 1));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
可以看出是在使用 PHP SDK 调用阿里云 OpenAPI 时出现了问题,具体是在调用 fopen() 函数时出现了错误。可能的原因是因为 fopen() 函数在打开 HTTPS URL 时需要启用 OpenSSL 扩展,而你的 PHP 环境没有启用或者配置正确的 OpenSSL 扩展导致该错误发生。
可以尝试以下几个方面:
检查 PHP 环境是否安装了正确的 OpenSSL 扩展:请检查你的 PHP 环境是否已经安装了正确的 OpenSSL 扩展,并且已经启用了该扩展。可以通过 phpinfo() 函数查看 PHP 环境的配置信息,确认 OpenSSL 扩展是否已经正确安装和启用。
检查 SSL/TLS 证书是否正确:请检查你的 SSL/TLS 证书是否正确,包括证书链、证书格式、证书路径等。如果证书有误,可能会导致 fopen() 函数无法打开 HTTPS URL。可以尝试使用 cURL 等其他工具测试您的证书是否正确。
检查网络环境是否正常:请检查你的网络环境是否正常,包括网络连接、DNS 解析等。
遇到 SSL operation failed 错误通常是由于与 SSL(Secure Sockets Layer)连接相关的问题引起的。这个错误可能会出现在使用阿里云OpenAPI时,主要有以下几种可能的原因和解决方法:
证书问题:验证服务器证书时可能会出错。你可以尝试更新本地的CA证书库,或者确保你的系统时间与TLS证书的有效期相符。
安全协议问题:某些旧版本的SSL/TLS协议可能不再受支持。请确保你的客户端和服务端都使用了支持的安全协议版本,例如TLS 1.2 或更高版本。
网络问题:如果你的网络连接存在问题,如防火墙阻塞、代理配置错误等,也可能导致 SSL 连接失败。请确认你的网络连接正常,并检查相关网络设备和配置。
证书链不完整:如果服务器证书的颁发机构(CA)证书链不完整,可能会导致 SSL 连接失败。确保服务器证书链完整且正确配置。
客户端配置问题:在使用阿里云OpenAPI时,确保你的客户端代码中正确配置了请求的 SSL 连接参数,包括合适的协议版本、证书验证等。
这句话是说 new Stream读的需要是资源https://help.aliyun.com/document_detail/311675.html?spm=a2c4g.311672.0.0.1af06189qJrd12
上面有警告 客户要读的是https链接 但环境没有SSL证书。
解决办法1: 用http
解决办法2:补齐代码运行环境HTTPS请求能力。此回答整理自钉群“OpenAPI 开发者门户 - 值班服务群2群”