您所在的位置:主页 > 短信动态 >

短信发送模块(短信接口插件)

2021-12-10 03:44

 

  1. 支持目前市面多家服务商
  2. 一套写法兼容所有平台
  3. 简单配置即可灵活增减服务商
  4. 内置多种服务商轮询策略、支持自定义轮询策略
  5. 统一的返回值格式,便于日志与监控
  6. 自动轮询选择可用的服务商
  7. 更多等你去发现与改进...

平台支持

  • 阿里云
  • Submail
  • 螺丝帽
  • 阿里大于
  • 容联云通讯
  • 互亿无线
  • 聚合数据
  • SendCloud
  • 百度云

环境需求

  • PHP >= 5.6

安装

$ composer require "overtrue/easy-sms"

使用

use OvertrueEasySmsEasySms;

$config = [
    // HTTP 请求的超时时间(秒)
    'timeout' => 5.0,
    
    // 默认发送配置
    'default' => [
        // 网关调用策略,默认:顺序调用
        'strategy' => OvertrueEasySmsStrategiesOrderStrategy::class,
        
        // 默认可用的发送网关
        'gateways' => [
            'yunpian', 'aliyun', 'alidayu',
        ],
    ],
    // 可用的网关配置
    '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'  => '您的验证码为: 6379', 
    'template' => 'SMS_001', 
    'data' => [ 
        'code' => 6379
    ],
]);

短信内容

由于使用多网关发送,所以一条短信要支持多平台发送,每家的发送方式不一样,但是我们抽象定义了以下公用属性:

  • content 文字内容,使用在像云片类似的以文字内容发送的平台
  • template 模板 ID,使用在以模板ID来发送短信的平台
  • data 模板变量,使用在以模板ID来发送短信的平台

所以,在使用过程中你可以根据所要使用的平台定义发送的内容。[短信发送模块(短信接口插件)]。

发送网关

默认使用 default 中的设置来发送,如果某一条短信你想要覆盖默认的设置。在 send 方法中使用第三个参数即可:

$easySms->send(13188888888, [
    'content'  => '您的验证码为: 6379', 
    'template' => 'SMS_001', 
    'data' => [ 
        'code' => 6379
    ],
 ], ['yunpian', 'juhe']); // 这里的网关配置将会覆盖全局默认值

返回值

由于使用多网关发送,所以返回值为一个数组,结构如下:

[
    'yunpian' => [
        'status' => 'success',
        'result' => [...] // 平台返回值
    ],
    'juhe' => [
        'status' => 'erred',
        'exception' => OvertrueEasySmsExceptionsGatewayErrorException 对象
    ],
    //...
]

如果所选网关列表均发送失败时,将会抛出 OvertrueEasySmsExceptionsNoGatewayAvailableException 异常,你可以使用 $e->results 获取发送结果。

自定义网关

本拓展已经支持用户自定义网关,你可以很方便的配置即可当成与其它拓展一样的使用:

$config = [
    ...
    'default' => [
        'gateways' => [
            'mygateway', // 配置你的网站到可用的网关列表
        ],
    ],
    'gateways' => [
        'mygateway' => [...], // 你网关所需要的参数,如果没有可以不配置
    ],
];

$easySms = new EasySms($config);

// 注册
$easySms->extend('mygateway', function($gatewayConfig){
    // $gatewayConfig 来自配置文件里的 `gateways.mygateway`
    return new MyGateway($gatewayConfig);
});

$easySms->send(13188888888, [
    'content'  => '您的验证码为: 6379', 
    'template' => 'SMS_001', 
    'data' => [ 
        'code' => 6379
    ],
]);

定义短信

你可以根本发送场景的不同,定义不同的短信类,从而实现一处定义多处调用,你可以继承 OvertrueEasySmsMessage 来定义短信模型:

<?php

use OvertrueEasySmsMessage;
use OvertrueEasySmsContractsGatewayInterface;
use OvertrueEasySmsStrategiesOrderStrategy;

class OrderPaidMessage extends Message
{
    protected $order;
    protected $strategy = OrderStrategy::class;           // 定义本短信的网关使用策略,覆盖全局配置中的 `default.strategy`
    protected $gateways = ['alidayu', 'yunpian', 'juhe']; // 定义本短信的适用平台,覆盖全局配置中的 `default.gateways`

    public function __construct($order)
    {
        $this->order = $order;
    }
        
    // 定义直接使用内容发送平台的内容
    public function getContent(GatewayInterface $gateway = null)
    {
        return sprintf('您的订单:%s, 已经完成付款', $this->order->no);    
    }
    
    // 定义使用模板发送方式平台所需要的模板 ID
    public function getTemplate(GatewayInterface $gateway = null)
    {
        return 'SMS_003'; 
    }
        
    // 模板参数
    public function getData(GatewayInterface $gateway = null)
    {
        return [
            'order_no' => $this->order->no    
        ];    
    }
}

更多自定义方式请参考:OvertrueEasySmsMessage

发送自定义短信:

$order = ...;
$message = new OrderPaidMessage($order);

$easySms->send(13188888888, $message);

各平台配置说明

阿里云

短信内容使用 template + data

    'aliyun' => [
        'access_key_id' => '',
        'access_key_secret' => '',
        'sign_name' => '',
    ],

阿里大于

短信内容使用 template + data

    'alidayu' => [
        'app_key' => '',
        'app_secret' => '',
        'sign_name' => '',
    ],

云片

短信内容使用 content

    'yunpian' => [
        'api_key' => '',
    ],

Submail

短信内容使用 data

    'submail' => [
        'app_id' => '',
        'app_key' => '',
        'project' => '',
    ],

螺丝帽

短信内容使用 content

    'luosimao' => [
        'api_key' => '',
    ],

容联云通讯

短信内容使用 template + data

    'yuntongxun' => [
        'app_id' => '',
        'account_sid' => '',
        'account_token' => '',
        'is_sub_account' => false,
    ],

互亿无线

短信内容使用 content

    'huyi' => [
        'api_id' => '',
        'api_key' => '',
    ],

聚合数据

短信内容使用 template + data

    'juhe' => [
        'app_key' => '',
    ],

SendCloud

短信内容使用 template + data

    'sendcloud' => [
        'sms_user' => '',
        'sms_key' => '',
    ],

百度云

短信内容使用 template + data

    'baidu' => [
        'ak' => '',
        'sk' => '',
        'invoke_id' => '',
        'domain' => '',
    ],



图片展示

Copyright © 2007-2020 万商超信短信群发平台  版权所有 Power by 备案号:粤ICP备20066710号-9

网站地图 导航地图