thinkPHP6如何接通阿里云短信服务?

概述

短信发送是我们开发中都会用到的,发送验证码、通知类消息之类的都需要短信服务。市场上的短信服务有很多,像容联云、乐讯通、创蓝、未来无限等。由于公司大部分业务都使用的阿里云资源,所以我这里就以阿里云短信服务来说。

短信服务

  • 进入阿里云控制台,开通短信服务,按照流程添加签名、模板即可;这个根据自己的需求来定,如有不懂的可以咨询阿里的客服。
  • 开通完成后,我们要拿到的有以下三个参数:
  1. AccessKey ID
  2. AccessKey Secret
  3. templateCode

其中AccessKey IDAccessKey Secret 是您访问阿里云 API 的密钥,具有该账户完全的权限,在阿里云账号开通就应该有了,自己可以拿到的;至于templateCode,是我们上面添加签名、添加自己的短信模版时生成的模版CODE

  • 拿到上面的那些参数后,我们就可以开启编辑代码之旅了。

发送短信的实现

  1. 安装阿里云提供的SDK,我们直接在thinkphp中的composer.json中的require中添加"alibabacloud/dysmsapi-20170525": "2.0.15",这个,然后执行composer update就可以成功安装了。如果项目根目录有composer.lock文件,先删掉在执行更新,否则不会更新成功。当然也可以直接用composer require进行安装。
  2. 在扩展类目录(extend目录)中定义一个AlibabaCloud类,里面用到的AccessKey IDAccessKey Secret你可以定义在env配置中。类的具体代码如下(仅供参考,可以自己完善下):
php 复制代码
<?php
declare(strict_types=1);
// This file is auto-generated, don't edit it. Thanks.
namespace AlibabaCloud;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use think\facade\Env;
class AlibabaCloud {

    /**
     * 使用AK&SK初始化账号Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Dysmsapi Client
     */
    public static function createClient($accessKeyId, $accessKeySecret){
        $config = new Config([
            // 您的 AccessKey ID
            "accessKeyId" => $accessKeyId,
            // 您的 AccessKey Secret
            "accessKeySecret" => $accessKeySecret
        ]);
        // 访问的域名
        $config->endpoint = "dysmsapi.aliyuncs.com";
        return new Dysmsapi($config);
    }

    /**
     * @param array $params
     * @return void
     */
    public static function sendSms($params){
        $accessKeyId=Env::get('map.accessKeyId','你的AccessKey ID');
        $accessKeySecret=Env::get('map.accessKeySecret','你的AccessKey Secret');
        $client = self::createClient( $accessKeyId, $accessKeySecret);
        $sendSmsRequest = new SendSmsRequest($params);
        $runtime = new RuntimeOptions([]);
        $res=$client->sendSmsWithOptions($sendSmsRequest, $runtime);
        return $res;
    }
}
  1. 我们要在app\common.php公共函数文件中定义一个公共函数,以便于项目中多处调用:
php 复制代码
/**
  *发送阿里云短信
 */
function sendAliyunSms($phone, $code)
{
    $params = [
        "signName" => "你的短信签名-即短信内容开头部分",
        "templateCode" => "你的短信模版CODE",
        "phoneNumbers" => $phone,
        "templateParam" => json_encode(['code' => $code])
    ];

    $res = \alibabaCloud\AlibabaCloud::sendSms($params);
    $reponse = get_object_vars($res->body);
    return $reponse;
}

这样我们的发送短信基本完成了,剩下的就是调用该公共函数,下面是使用示例:

ini 复制代码
$code = rand(1000, 9999);
$data = array(
            'phone' => 1xxxxxxxxxx,#手机号
            'code' => $code #短信内容
        );
sendAliyunSms($phone, $code);//执行发送

这样我们的短信发送基本功能就能实现了,记得在业务代码中记录下发送日志、接口返回日志哦,养成记录日志的好习惯有助于后面的问题排查。

总结

短信服务应用非常广泛,不同服务商用法可能不一样,但基本上都是大同小异,我们在选择时首先考虑的就是费用问题,技术开发之类的都不是很难,因此需要从成本方面考虑,根据自己公司的情况决定吧,希望能够帮到你。

相关推荐
hummhumm44 分钟前
第 10 章 - Go语言字符串操作
java·后端·python·sql·算法·golang·database
man20173 小时前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
hlsd#3 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
路在脚下@3 小时前
Spring Boot 的核心原理和工作机制
java·spring boot·后端
幸运小圣3 小时前
Vue3 -- 项目配置之stylelint【企业级项目配置保姆级教程3】
开发语言·后端·rust
前端SkyRain4 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
提笔惊蚂蚁4 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
老猿讲编程4 小时前
Rust编写的贪吃蛇小游戏源代码解读
开发语言·后端·rust
黄小耶@4 小时前
python如何使用Rabbitmq
分布式·后端·python·rabbitmq
宅小海6 小时前
Scala-List列表
开发语言·后端·scala