thinkphp6接入阿里云短信实战和踩坑

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" 

配置完之后记得重启环境,然后我就看到了发送成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值