在实际应用场景中,短信发送是基本的业务需求,本篇文章将简化了繁琐的封装,让短信发送更简单简洁,短信接口用的是短信宝的,申请地址:http://www.smsbao.com本文的demo是用的tp6框架,自己稍微修改一下 基本是通用的,代码带了详细的注释,通俗一档,这里的模板我是放在数据库里面的,小伙伴可以根据自己的业务,去修改,类库用到了单例模式。
使用方法,直接调用
<?php
SmsBao::getInstance()->setTemplate('sms_register_template')->send('1888888888', true);
类库代码
<?php
namespace app\common\lib;
use app\common\model\Config;
/**
* 短信相关 短信宝申请地址:http://smsbao.com
*/
class SmsBao{
//短信宝签名
private $sms_sign = '';
//短信宝账号
private $sms_user = '';
//短信宝密码
private $sms_pass = '';
//当前使用的短信模板
private $sms_template = '';
//单例变量
private static $_instance = null;
//获取配置信息
private function __construct(){
$this->sms_sign = Config::getValueInfo('sms_sign');
$this->sms_user = Config::getValueInfo('sms_user');
$this->sms_pass = Config::getValueInfo('sms_pass');
}
/**
* 获取单例对象
* @return object
*/
public static function getInstance(){
if(empty(self::$_instance)){
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 获取短信模板
* @param key 键
* @return string
*/
public function setTemplate($key){
$this->sms_template = Config::getValueInfo($key);
return $this;
}
/**
* 发送短信
* @param $mobile string 要发送的手机号
* @param $flag bool 是否是验证码短信
* @return bool
*/
public function send($mobile, $flag = false){
if($flag){
//生成验证码
$code = IAuth::setVerificationCode($mobile);
//将验证码替换到 字符串中
$this->sms_template = str_replace('{code}', $code, $this->sms_template);
}
return $this->smsBaoSend($mobile, $this->sms_template);
}
/**
* 实际的发送短信工作
* @param $mobile string 要发送的手机号
* @param $content string 要发送的内容
* @return bool
*/
private function smsBaoSend($mobile, $content){
$statusStr = [
"0" => "短信发送成功",
"-1" => "参数不全",
"-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
"30" => "密码错误",
"40" => "账号不存在",
"41" => "余额不足",
"42" => "帐户已过期",
"43" => "IP地址限制",
"50" => "内容含有敏感词"
];
$smsapi = "http://api.smsbao.com/";
$user = $this->sms_user; //短信平台帐号
$pass = md5($this->sms_pass); //短信平台密码
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$mobile."&c=".urlencode($this->sms_sign . $content);
$result =file_get_contents($sendurl);
return $result == 0;
}
}