当前位置: 首页 > article >正文

群控系统服务端开发模式-应用开发-短信工厂结构封装

        首先在系统根目录下extend文件夹下创建短信工厂文件夹并更名叫Sms。

一、短信发送父类

        在Sms目录下创建短信发送父类并更名为SmsSenderInterface.php,代码如下

<?php
/**
 * 短信发送父类
 * User: 龙哥 三年风水
 * Date: 2024/12/1/0001
 * Time: 15:52
 */
namespace Sms;
interface SmsSenderInterface
{
    /**
     * 单条短信发送
     * 内部json处理过
     * User: 龙哥·三年风水
     * Date: 2024/12/1/0001
     * Time: 15:52
     * @ param $mobile 要发送的对象
     * @ param $templateCode 模板编号
     * @ param $templateParam 模板对应参数
     * @ param string $signName 签名(如果需要采用不同的签名才需要传参)
     * @ return mixed
     */
    public static function send($mobile,$templateCode,$templateParam,$signName = '');
}

二、具体类实现

        在Sms目录下创建文件夹并命名为channel,然后在channel文件夹下,创建阿里云短信发送类、七牛云短信发送类、腾讯云短信发送类等,代码如下

<?php
/**
 * 阿里云短信发送类
 * User: 龙哥 三年风水
 * Date: 2024/12/1/0001
 * Time: 16:46
 */
namespace Sms\channel;
use Sms\SmsSenderInterface;
class AliyunSmsSender implements SmsSenderInterface
{
    protected static $signName = "";
    protected static $accessKeyId = "";
    protected static $accessKeySecret = "";
    
    public function __construct($param){
        self::$accessKeyId = $param['access_key_id'];
        self::$accessKeySecret = $param['access_key_secret'];
        self::$signName = $param['sign_name'];
    }

    /**
     * 单条短信发送
     * 内部json处理过
     * User: 龙哥·三年风水
     * Date: 2024/12/1/0001
     * Time: 15:52
     * @ param $mobile 要发送的对象
     * @ param $templateCode 模板编号
     * @ param $templateParam 模板对应参数
     * @ param string $signName 签名(如果需要采用不同的签名才需要传参)
     * @ return mixed
     */
    public static function send($mobile, $templateCode, $templateParam, $signName = '')
    {
        // TODO: Implement send() method.
    }
}

三、短信发送类实例

        在Sms目录下创建短信发送类实例并更名为SmsSenderFactory.php,具体代码如下:

<?php
/**
 * 创建短信发送类实例工厂
 * User: 龙哥 三年风水
 * Date: 2024/12/1/0001
 * Time: 15:59
 */
namespace Sms;
use Sms\channel\AliyunSmsSender;
use Sms\channel\QiniuyunSmsSender;
use Sms\channel\TencentSmsSender;
use Error\BaseError;
use app\model\param\Emailsms;
use app\model\param\Sms;
class SmsSenderFactory
{
    protected static $instance=null;//缓存实例
    protected static $channel = [];//通道参数
    protected static $smsType = 0;//通道类型
    public function __construct(){
        $smsId = Emailsms::dataFind(['id' => 1],'sms_id');
        var_dump($smsId);exit;
    }

    /**
     * 调用类实例
     * User: 龙哥 三年风水
     * Date: 2024/12/1/0001
     * Time: 15:59
     * @ return null|AliyunSmsSender|QiniuyunSmsSender|TencentSmsSender
     */

    public static function create(){
        switch (self::$smsType){
            case 1:
                self::$instance = new AliyunSmsSender(self::$channel);
                break;
            case 2:
                self::$instance = new QiniuyunSmsSender(self::$channel);
                break;
            case 3:
                self::$instance = new TencentSmsSender(self::$channel);
                break;
            default:
                self::$instance = null;
                throw new BaseError("未设置任何短信发送通道",50000,200);
                break;
        }
        return self::$instance;
    }
}

四、提前说明

        下个星期将完成短信工厂类封装及测试。


http://www.kler.cn/a/419046.html

相关文章:

  • DreamCamera2相机预览变形的处理
  • jdk各个版本介绍
  • 【数据结构与算法】排序算法(上)——插入排序与选择排序
  • jQuery学习建议:从入门到精通的指南
  • 【树莓派5】移动热点获取树莓派IP并初次登录SSH
  • uniapp input只输入一个字符就自动失去焦点
  • Harmony NEXT-越过相机读写权限上传图片至项目云存储中
  • Solidity基础语法
  • 纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
  • js对于json的序列化、反序列化有哪几种方法
  • 计算机网络基础篇
  • idea 自动导包,并且禁止自动导 *(java.io.*)
  • 数据结构之堆:原理与实现
  • 《Python基础》之类的定义、封装、继承
  • ubuntu 安装docker-compose
  • PHP操作redis删除指定前缀的key值
  • Apache storm安装教程(单机版)
  • 简单图论农场派对
  • 基于CentOS系统利用Kamailio搭建企业级SIP服务器
  • 青少年编程等级一级 自动打包机问题
  • learning_curve | 学习、理解以及使用学习曲线在评估型性能和诊断模型问题中的使用
  • 基于Matlab实现车牌识别系统(源码+图像)
  • WPF+MVVM案例实战与特效(二十九)- Combox绑定集合、枚举与固定值
  • matlab代码--卷积神经网络的手写数字识别
  • IOC控制反转DI依赖注入(Java EE 学习笔记06)
  • 【RISC-V CPU Debug 专栏 1 -- RISC-V debug 规范】