1、下载sdk,注意切换到你的项目目录下去,我的第一个坑我的composer版本太老了,下载的时候一直被终止,然后我更新了composer,参考官方给的安装方法:
a、安装依赖
composer require alibabacloud/darabonba-openapi
b、切换阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
c、安装最新版的sdk
//这个版本我第一次安装的时候文件不全,我也不知道啥情况
composer require alibabacloud/dysmsapi-20170525 2.0.22
//后面我用的这个版本
composer require alibabacloud/dysmsapi-20170525 2.0.9
2、封装短信发送类文件,我这里我放到 app\index\controller 下的
<?php
namespace app\index\controller;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class AliSms {
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @return Dysmsapi Client
*/
public static function createClient($accessKeyId, $accessKeySecret){
$config = new Config([
// 您的 AccessKey ID
"accessKeyId" => "L**********************t",
// 您的 AccessKey Secret
"accessKeySecret" => "n****************************6"
]);
// 访问的域名
$config->endpoint = "dysmsapi.aliyuncs.com";
return new Dysmsapi($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
$client = self::createClient("accessKeyId", "accessKeySecret");
$sendSmsRequest = new SendSmsRequest([
"phoneNumbers" => $args['phone'], //发送的手机号码
"signName" => "我的真实签名", //签名
"templateCode" => $args['template'], //模板CODE
"templateParam" => json_encode($args['info']) //这个根据你的模板信息来
]);
$result = $client->sendSms($sendSmsRequest);
if ($result->body->message == 'OK' && $result->body->code == 'OK') {
return ['code' => 200,'msg'=>'success'];
}
if ($result->body->code == 'isv.MOBILE_NUMBER_ILLEGAL') {
return ['code' => 0, 'msg' => '手机号码格式不正确'];
}
return ['code' => 0, 'msg' => '短信发送失败,网络繁忙'];
}
}
?>
这里注意一下流程:买完短信服务包后,需要把短信签名,AccessKey,短信模板(一般验证码这种模板是默认赠送的,可以直接使用)先申请,签名和模板是需要审核时间的,具体的操作请在控制台根据提示进行。
3、调用方法发送短信
<?php
namespace app\index\controller;
use think\Controller;
use think\facade\Request;
use think\facade\View;
class Index extends Base
{
//首页详情
public function index()
{
$data = [
'phone'=> '13******',
'template' => 'SMS_********',
'info' => ['name'=>'测试','time'=>'2022-10-30'] //根据模板里面的变量来填写
];
//调用阿里云短信发送方法
$send = new AliSms;
$result = $send::main($data);
var_dump($result);
die;
}
}
?>
以为这样就能顺利发送吗(线上我到这里就可以发送成功,是没有问题的),no,我在本地测试的时候遇到我的第二个坑,报错了 cURL error 60: SSL certificate problem: unable to get local issuer certifica 一堆长长的代码,看到ssl应该能判断出是什么协议有问题,百度了一下,是CA证书,调用HTTPS资源的时候验证对方网站是否是CA颁布的证书,这个需要下载CA证书:
下载地址是 http://curl.haxx.se/ca/cacert.pem 这里万一失效的话可以进我的云盘
链接:https://pan.baidu.com/s/1wtgmmuPMiqB2XTtyE8qm3A 提取码:hxt4
下载完之后随便你放哪里,但是要在你当前使用版本的php.ini 中的配置一下正确的引用路径,在 curl.cainfo 后添加路径 : curl.cainfo = "D:\phpcacert\cacert.pem"
配置完之后记得重启环境,然后我就看到了发送成功。