通过短信插件,你可以将您所需要的短信通道集成到QStack系统当中,该插件类型属于钩子类型的插件。
QStack短信钩子接口说明
<?php
declare(strict_types=1);
namespace app\common\contracts\addon;
interface SMSChannelHook
{
public function hookSMSChannel(): SMSChannelConfig;
}
返回值说明
<?php
declare(strict_types=1);
namespace app\common\contracts\addon;
class SMSChannelConfig
{
private $uuid;
private $name;
private $handler;
private $mapper;
public function __construct(string $uuid, string $name, string $handler, array $mapper)
{
$this->uuid = $uuid;
$this->name = $name;
$this->handler = $handler;
$this->mapper = $mapper;
}
public function getUUID(): string
{
return $this->uuid;
}
public function getName(): string
{
return $this->name;
}
public function getHandler(): string
{
return $this->handler;
}
public function getMapper(): array
{
return $this->mapper;
}
}
注意:uuid 需要全局唯一,否则插件就不会被加载,handler 需要实现 SMSSender,mapper 映射将在文末详细说明
示例
protected $errorMsg = ''
public function hookSMSChannel():SMSChannelConfig
{
return new SMSChannelConfig(
'demo_sms', // 插件标识
'测试短信通道', // 插件名称
self::class,
[
// 注册的短信模板
'register' => [
'template' =>'demo_sms_template', // 短信模板
'content' => [
'code' => 'demo_sms_code', //短信参数code
// 其它参数映射自行编写
],
// 其它类型的短信模板请自行编写
]
]
);
}
public function send(string $model,$content,string $template_key,string $rendered_template):bool
{
// 调用短信通道API实现短信发送
// if($send_failed){
$this->errorMsg = $error_msg;
return false;
}
return true;
}
public function getErrorMsg():string
{
return $this->errorMsg();
}
如果您对接的短信平台不需要短信模板,mapper 可以返回空值,反之则需要将 qstack 平台定义的通用模板标识和模板参数名称映射为您所对接的短信平台的专用标识和参数名称。如果找不到相应的映射,则会传入 qstack 平台定义的通用模板标识和模板参数名称。