HELLO小伙伴,好久不见,好几天没有写文章了。今天来讲一讲PHP如何使用阿里云的语音通知。
有的小伙伴根据阿里云提供的文档在阿里云控制台创建并认证好企业认证,所有的通知模板都已经创建好。
但是在下载SDK的时候就遇到了困难,用git下载的时候缺少很多的类。
用composer下载,在自动加载文件的时候出现了用不了,有的时候可以用但是会出现报错,哪个哪个类找不到,或者是哪个方法找不到。
今天就来分享一下我是如何做的。
在阿里云官方文档上面使用composer下载。
https://next.api.aliyun.com/api-tools/sdk/Dyvmsapi?spm=a2c4g.11186623.0.0.7fb25468pZJRsh&version=2017-05-25&language=php-tea&tab=primer-doc
在这个链接里面我们能看到有一个安装方式,
composer require alibabacloud/dyvmsapi-20170525 2.1.4
我们在composer安装完成之后,官方文档上面提示的是会有一个自动生成PHP文件。
其实这个文件是需要我们自己去新建的。
我们在app\common\library下面创建一个Sample.php的这个文件,并且更改一下命名空间
下面是我根据我的需求来写的方法:
<?php
namespace app\common\library;
use AlibabaCloud\SDK\Dyvmsapi\V20170525\Dyvmsapi;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dyvmsapi\V20170525\Models\SingleCallByVoiceRequest;
use AlibabaCloud\SDK\Dyvmsapi\V20170525\Models\SingleCallByTtsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @return Dyvmsapi Client
*/
public static function createClient($accessKeyId, $accessKeySecret){
$config = new Config([
// 必填,您的 AccessKey ID
"accessKeyId" => $accessKeyId,
// 必填,您的 AccessKey Secret
"accessKeySecret" => $accessKeySecret
]);
// 访问的域名
$config->endpoint = "dyvmsapi.aliyuncs.com";
return new Dyvmsapi($config);
}
/**
* @param string[] $args
* @return void
*/
public static function voi_main($accessKeyId, $accessKeySecret, array $args){
// 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html
$client = self::createClient($accessKeyId, $accessKeySecret);
$singleCallByVoiceRequest = new SingleCallByVoiceRequest($args);
$runtime = new RuntimeOptions([]);
try {
// 复制代码运行请自行打印 API 的返回值
$client->singleCallByVoiceWithOptions($singleCallByVoiceRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
dump($error);
// 如有需要,请打印 error
Utils::assertAsString($error->message);
}
}
/**
* @param string[] $args
* @return void
*/
public static function tts_main($accessKeyId, $accessKeySecret, array $args){
// 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html
$client = self::createClient($accessKeyId, $accessKeySecret);
$singleCallByTtsRequest = new SingleCallByTtsRequest($args);
$runtime = new RuntimeOptions([]);
try {
// 复制代码运行请自行打印 API 的返回值
$client->singleCallByTtsWithOptions($singleCallByTtsRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 如有需要,请打印 error
Utils::assertAsString($error->message);
}
}
}
这里面的voi_main的这个方法是需要你在阿里云语音通知那里有mp3文件的方法。
而tts_main的这个方法是文本转语音的方法。
这里的$args是一个数组,这个数组是根据你对应需求的方法里面需要的参数。
这个数组的参数可以在阿里云里面调试的时候会获取到相应的方法。
剩下的就是在你控制器里面进行调用这个方法就可以了。
如有疑问,关注并私信我。我来给你解答。