短信插件
本章节主要是介绍,ShopWind系统现有的短信插件说明,以及编写一个短信插件的实施要点和注意事项。本章节的内容建立在您已经熟悉《插件规范》的基础之上。如不熟悉,请先阅读上一章节内容。
一、插件路径
短信插件位于@shopwind/common/plugins/sms目录下,该目录下的每一个文件夹代表一个具体的插件实例。

alidayu/ 表示 阿里短信通(也叫:阿里大于)短信平台

smschinese/ 表示 中国网建短信平台

二、编写要点
所有短信插件,我们都应该实现以下几个主要方法:获取短信模板、发送检测、发送短信。 这些方法我们编写到插件主程序@shopwind/common/plugins/sms/插件名/插件名.plugin.php文件中:
// 获取支付表单,入参 $valid 为发送检测
public function send($valid = true) {}

// 发送检测,包含短信参数检测等
public function verify() {}

// 获取短信模板
public function getTemplate() {}
短信发送调用代码如下:
$smser = Plugin::getInstance('sms')->autoBuild();
$smser->receiver = '手机号';
$smser->templateParams = ['code' => $code]; // $code为短信模板代码,具体查看后台-插件-短信模板
			
if(!$smser->send()) {
    echo $smser->errors;
}
echo '短信发送成功';
注意autoBuild()方法相对于build($code)方法, 不需要传入具体的插件名,由系统自动选择可用的插件 ,这个方法对于在多插件的情况下非常有用,当我们在后台配置了两种(或一种)短信插件,由系统来选择哪个短信插件可用,就返回那个插件的实例。
目前,几乎大多数第三方短信平台,其发送的短信内容都要求使用短信模板备案的机制,即:不允许发送自定义内容的短信。短信模板里面可以插入预定好的变量, 然后经过第三方平台审核之后才能使用,再获取发送内容的时候进行变量替换。如果需要增加一种短信发送模板,可以修改@shopwind/common/plugin/BaseSms.php文件的getFunctions() 方法,然后在后台和第三方短信平台提交相同的短信模板内容。
为了防止短信滥发,可以控制短信发送的频率,具体为修改短信插件基类@shopwind/common/plugins/BaseSms.php的静态参数来实现,但要注意, 发送频率的设置不应高于第三方短信平台的发送频率,如某短信平台规定60秒发送一次短信,您不能设置短信发送间隔为30秒。
// 一天内允许某个手机号发送的短信数量
private $dayTimes = 10;

// 半小时内允许某个手机号发送多少条短信
private $semihourTimes = 5;

// 某个手机号每次发送短信间隔多少秒
private $interval = 120;
目前系统对部分类型的短信(如下单通知短信)采用了对商家授权开放的机制,即只有平台给商家分配了短信数量,商家才能正常发送短信,这也确保了短信的滥用, 同时,平台也可以将此作为收入的一部分。
通过本节的学习,大家应该能掌握了短信插件的编写要点,如果对此还有疑问,可以进入我们官方的 开发者社区反馈,我们会有官方技术人员在线解答。