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" 

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我会尽力回答你的问题。接入腾讯云短信API需要以下几个步骤: 1. 注册腾讯云账号,并开通短信服务。 2. 创建应用,获取 AppID 和 AppKey。 3. 安装腾讯云 SDK。 4. 在 ThinkPHP5 中集成腾讯云 SDK。 5. 编写发送短信的代码。 以下是详细步骤: 1. 注册腾讯云账号,并开通短信服务。 首先,你需要注册一个腾讯云账号,然后在控制台中开通短信服务。在开通短信服务时,你需要填写企业信息并进行实名认证。 2. 创建应用,获取 AppID 和 AppKey。 在腾讯云控制台中创建应用,并获取 AppID 和 AppKey。这些信息将在后面的代码中使用。 3. 安装腾讯云 SDK。 在你的项目中安装腾讯云 SDK。可以通过 Composer 安装,也可以手动下载安装。 4. 在 ThinkPHP5 中集成腾讯云 SDK。 在 ThinkPHP5 中集成腾讯云 SDK,可以在 config.php 配置文件中添加以下配置: ```php // config.php return [ 'qcloud' => [ 'sms' => [ 'app_id' => 'your-app-id', 'app_key' => 'your-app-key', 'template_id' => 'your-template-id', 'sms_sign' => 'your-sms-sign', ], ], ]; ``` 上面的配置中,app_id 和 app_key 是在第二步中获取的,template_id 是短信模板的 ID,sms_sign 是短信签名。 5. 编写发送短信的代码。 在 ThinkPHP5 中发送短信可以通过继承 Qcloud\Sms\SmsSingleSender 类来实现。以下是发送短信的示例代码: ```php use Qcloud\Sms\SmsSingleSender; $appId = config('qcloud.sms.app_id'); $appKey = config('qcloud.sms.app_key'); $templateId = config('qcloud.sms.template_id'); $smsSign = config('qcloud.sms.sms_sign'); $sender = new SmsSingleSender($appId, $appKey); $result = $sender->sendWithParam('86', $mobile, $templateId, $params, $smsSign); if ($result === false) { return '发送短信失败'; } $response = json_decode($result, true); if ($response['result'] !== 0) { return '发送短信失败:' . $response['errmsg']; } return '发送短信成功'; ``` 上面的代码中,$mobile 是接收短信的手机号码,$params 是短信模板中的参数,$result 是发送短信的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值