萬商超信
短信發(fā)送模塊(短信接口插件)
2021-12-10 03:44
- 支持目前市面多家服務(wù)商
- 一套寫法兼容所有平臺(tái)
- 簡(jiǎn)單配置即可靈活增減服務(wù)商
- 內(nèi)置多種服務(wù)商輪詢策略、支持自定義輪詢策略
- 統(tǒng)一的返回值格式,便于日志與監(jiān)控
- 自動(dòng)輪詢選擇可用的服務(wù)商
- 更多等你去發(fā)現(xiàn)與改進(jìn)...
平臺(tái)支持
- 阿里云
- 云
- Submail
- 螺絲帽
- 阿里大于
- 容聯(lián)云通訊
- 互億無線
- 聚合數(shù)據(jù)
- SendCloud
- 百度云
環(huán)境需求
- PHP >= 5.6
安裝
$ composer require "overtrue/easy-sms"
使用
use OvertrueEasySmsEasySms;
$config = [
// HTTP 請(qǐng)求的超時(shí)時(shí)間(秒)
'timeout' => 5.0,
// 默認(rèn)發(fā)送配置
'default' => [
// 網(wǎng)關(guān)調(diào)用策略,默認(rèn):順序調(diào)用
'strategy' => OvertrueEasySmsStrategiesOrderStrategy::class,
// 默認(rèn)可用的發(fā)送網(wǎng)關(guān)
'gateways' => [
'yunpian', 'aliyun', 'alidayu',
],
],
// 可用的網(wǎng)關(guān)配置
'gateways' => [
'errorlog' => [
'file' => '/tmp/easy-sms.log',
],
'yunpian' => [
'api_key' => '824f0ff2f71cab52936axxxxxxxxxx',
],
'aliyun' => [
'access_key_id' => '',
'access_key_secret' => '',
'sign_name' => '',
],
'alidayu' => [
//...
],
],
];
$easySms = new EasySms($config);
$easySms->send(13188888888, [
'content' => '您的驗(yàn)證碼為: 6379',
'template' => 'SMS_001',
'data' => [
'code' => 6379
],
]);
短信內(nèi)容
由于使用多網(wǎng)關(guān)發(fā)送,所以一條短信要支持多平臺(tái)發(fā)送,每家的發(fā)送方式不一樣,但是我們抽象定義了以下公用屬性:
- content 文字內(nèi)容,使用在像云片類似的以文字內(nèi)容發(fā)送的平臺(tái)
- template 模板 ID,使用在以模板ID來發(fā)送短信的平臺(tái)
- data 模板變量,使用在以模板ID來發(fā)送短信的平臺(tái)
所以,在使用過程中你可以根據(jù)所要使用的平臺(tái)定義發(fā)送的內(nèi)容。[短信發(fā)送模塊(短信接口插件)]。
發(fā)送網(wǎng)關(guān)
默認(rèn)使用 default 中的設(shè)置來發(fā)送,如果某一條短信你想要覆蓋默認(rèn)的設(shè)置。在 send 方法中使用第三個(gè)參數(shù)即可:
$easySms->send(13188888888, [
'content' => '您的驗(yàn)證碼為: 6379',
'template' => 'SMS_001',
'data' => [
'code' => 6379
],
], ['yunpian', 'juhe']); // 這里的網(wǎng)關(guān)配置將會(huì)覆蓋全局默認(rèn)值
返回值
由于使用多網(wǎng)關(guān)發(fā)送,所以返回值為一個(gè)數(shù)組,結(jié)構(gòu)如下:
[
'yunpian' => [
'status' => 'success',
'result' => [...] // 平臺(tái)返回值
],
'juhe' => [
'status' => 'erred',
'exception' => OvertrueEasySmsExceptionsGatewayErrorException 對(duì)象
],
//...
]
如果所選網(wǎng)關(guān)列表均發(fā)送失敗時(shí),將會(huì)拋出 OvertrueEasySmsExceptionsNoGatewayAvailableException 異常,你可以使用 $e->results 獲取發(fā)送結(jié)果。
自定義網(wǎng)關(guān)
本拓展已經(jīng)支持用戶自定義網(wǎng)關(guān),你可以很方便的配置即可當(dāng)成與其它拓展一樣的使用:
$config = [
...
'default' => [
'gateways' => [
'mygateway', // 配置你的網(wǎng)站到可用的網(wǎng)關(guān)列表
],
],
'gateways' => [
'mygateway' => [...], // 你網(wǎng)關(guān)所需要的參數(shù),如果沒有可以不配置
],
];
$easySms = new EasySms($config);
// 注冊(cè)
$easySms->extend('mygateway', function($gatewayConfig){
// $gatewayConfig 來自配置文件里的 `gateways.mygateway`
return new MyGateway($gatewayConfig);
});
$easySms->send(13188888888, [
'content' => '您的驗(yàn)證碼為: 6379',
'template' => 'SMS_001',
'data' => [
'code' => 6379
],
]);
定義短信
你可以根本發(fā)送場(chǎng)景的不同,定義不同的短信類,從而實(shí)現(xiàn)一處定義多處調(diào)用,你可以繼承 OvertrueEasySmsMessage 來定義短信模型:
<?php
use OvertrueEasySmsMessage;
use OvertrueEasySmsContractsGatewayInterface;
use OvertrueEasySmsStrategiesOrderStrategy;
class OrderPaidMessage extends Message
{
protected $order;
protected $strategy = OrderStrategy::class; // 定義本短信的網(wǎng)關(guān)使用策略,覆蓋全局配置中的 `default.strategy`
protected $gateways = ['alidayu', 'yunpian', 'juhe']; // 定義本短信的適用平臺(tái),覆蓋全局配置中的 `default.gateways`
public function __construct($order)
{
$this->order = $order;
}
// 定義直接使用內(nèi)容發(fā)送平臺(tái)的內(nèi)容
public function getContent(GatewayInterface $gateway = null)
{
return sprintf('您的訂單:%s, 已經(jīng)完成付款', $this->order->no);
}
// 定義使用模板發(fā)送方式平臺(tái)所需要的模板 ID
public function getTemplate(GatewayInterface $gateway = null)
{
return 'SMS_003';
}
// 模板參數(shù)
public function getData(GatewayInterface $gateway = null)
{
return [
'order_no' => $this->order->no
];
}
}
更多自定義方式請(qǐng)參考:OvertrueEasySmsMessage
發(fā)送自定義短信:
$order = ...;
$message = new OrderPaidMessage($order);
$easySms->send(13188888888, $message);
各平臺(tái)配置說明
阿里云
短信內(nèi)容使用 template + data
'aliyun' => [
'access_key_id' => '',
'access_key_secret' => '',
'sign_name' => '',
],
阿里大于
短信內(nèi)容使用 template + data
'alidayu' => [
'app_key' => '',
'app_secret' => '',
'sign_name' => '',
],
云片
短信內(nèi)容使用 content
'yunpian' => [
'api_key' => '',
],
Submail
短信內(nèi)容使用 data
'submail' => [
'app_id' => '',
'app_key' => '',
'project' => '',
],
螺絲帽
短信內(nèi)容使用 content
'luosimao' => [
'api_key' => '',
],
容聯(lián)云通訊
短信內(nèi)容使用 template + data
'yuntongxun' => [
'app_id' => '',
'account_sid' => '',
'account_token' => '',
'is_sub_account' => false,
],
互億無線
短信內(nèi)容使用 content
'huyi' => [
'api_id' => '',
'api_key' => '',
],
聚合數(shù)據(jù)
短信內(nèi)容使用 template + data
'juhe' => [
'app_key' => '',
],
SendCloud
短信內(nèi)容使用 template + data
'sendcloud' => [
'sms_user' => '',
'sms_key' => '',
],
百度云
短信內(nèi)容使用 template + data
'baidu' => [
'ak' => '',
'sk' => '',
'invoke_id' => '',
'domain' => '',
],