群控系统服务端开发模式-应用开发-短信工厂结构封装
首先在系统根目录下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;
}
}
四、提前说明
下个星期将完成短信工厂类封装及测试。