前沿:新项目,是thinkphp6中开发的,然后需要对接一个短信业务,选择了阿里云短信sdk,新版的sdk使用的是composer 直接安装的,但是阿里云提供的文档,应该是zip包,所以文档不对应,composer下载的sdk和官方提供的sdk的文档不对应,所以备受踩坑,以前是将这个zip包放到,extend目录中,这次是直接使用composer进行安装,更方便和快速,但是没有文档还是很不爽的,所以暂做一次记录。
1. 使用composer下载阿里云sdk
composer require alibabacloud/sdk
2. 新建一个控制器,比如写在common中的Alisms.php
<?php
namespace app\common\controller;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class Alisms
{
public static function send(string $phone = null, int $code = null)
{
if (empty($phone) || empty($code)) {
return false;
}
try {
$templateParam = json_encode(['code' => $code]);
AlibabaCloud::accessKeyClient(
config('alisms.accessKeyId'),
config('alisms.accessKeySecret')
)
->regionId(config('alisms.regionId'))
->asDefaultClient();
$result = AlibabaCloud::rpc()
->product(config('alisms.product'))
->version('2017-05-25')
->action('SendSms')
->method('POST')
->host(config('alisms.host'))
->options([
'query' => [
'RegionId' => config('alisms.regionId'),
'PhoneNumbers' => $phone,
'SignName' => config('alisms.SignName'),
'TemplateCode' => config('alisms.TemplateCode'),
'TemplateParam' => $templateParam,
],
])
->request();
return $result->toArray();
} catch (ServerException $e) {
return $e->getErrorMessage();
} catch (ClientException $e) {
return $e->getErrorMessage();
}
}
}
3. 在控制器中调用这个方法
public function btnmsg()
{
$mobile = $this->request->param('mobile');
if(!preg_match("/^1[34578]\d{9}$/", $mobile)){
return json(['code' => 100,'msg' => '请输入正确的手机号']);
}
$code = rand(0000,9999);
$data = Alisms::send($mobile,$code);
dump($data);
}
总结一下,使用composer是很方便的,但是一定要看文档,文档中啥都有,有点好奇的是,为什么阿里写的要有那么多英文呢?