cri2net/sms-client

PHP短信客户端库

1.4.6 2021-09-12 12:41 UTC

This package is auto-updated.

Last update: 2024-09-12 20:01:25 UTC


README

这个库旨在作为其他库的基础,这些库通过第三方短信网关发送短信。

目前支持以下短信网关

安装

安装库

在基本情况下,在安装特定网关的库时,库会自动安装。但也可以通过以下命令进行安装:

composer require cri2net/sms-client

数据库中的表

为了更好的集成,建议在数据库中创建一个表。但这不是必需的。

更新版本时,别忘了查看 install.sql 文件。

此外,还支持基于 placebook/framework-selfupdate 包的自动 SQL 迁移。

当前内容

-- version 1.0.0
CREATE TABLE IF NOT EXISTS `sms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` enum('new','sending','complete','cancel','fail') NOT NULL DEFAULT 'new',
  `to` varchar(100) NOT NULL,
  `created_at` double NOT NULL,
  `updated_at` double NOT NULL,
  `send_at` double DEFAULT NULL,
  `min_sending_time` double NOT NULL,
  `replace_data` text,
  `raw_text` text,
  `processing` varchar(50) DEFAULT NULL,
  `processing_data` mediumtext,
  `processing_status` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `status` (`status`,`min_sending_time`),
  KEY `processing` (`processing`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- version 1.0.1
ALTER TABLE `sms`
  ADD COLUMN `additional` MEDIUMTEXT NULL AFTER `processing_status`;

-- version 1.1.1
ALTER TABLE `sms`
  ADD COLUMN alfaname VARCHAR(50) NULL AFTER additional;

字段说明

  • id: 记录标识符
  • status: 发送状态
  • to: 国际格式下的接收者号码
  • created_at: 记录创建的unix时间
  • updated_at: 记录最后修改的unix时间
  • send_at: 实际发送短信的unix时间
  • min_sending_time: 可以发送短信的最小时间点的unix时间 - 用于延迟发送
  • replace_data: 包含替换规则的JSON字符串
  • raw_text: 消息文本,支持"宏"功能
  • processing: 发送短信的网关的键(名称)
  • processing_data: 包含网关数据的JSON
  • processing_status: 从网关获得的发送状态
  • additional: 用于JSON中的额外信息。库不使用此字段,其工作逻辑完全取决于库的用户

使用

方法说明

库只有一个接口和抽象类,因此不能直接创建提供的类实例并使用它。

这里只列出了基本方法,包括抽象方法,它们将在特定短信网关的类中可用。如果方法在子类中被重写,将在子类的说明中说明

  • getBalance() - 获取网关账户中的当前余额
  • checkStatus($campaignID, $recipient) - 通过发送ID(网关)和接收者国际格式电话号码检查发送消息的当前状态
  • sendSMS($recipient, $text) - 发送sms,参数:国际格式电话号码和文本
  • processPhone($international_phone) - 由于某些短信网关可能无法处理国际格式电话号码,此方法将国际格式电话号码调整为网关可以使用的格式
  • checkStatusByCron() - 该方法旨在按计划(通过crontab)检查发送消息的状态
  • sendSmsByCron() - 发送已保存到数据库的已准备短信

从所有可用网关中选择最佳网关

<?php

use cri2net\sms_client\Sender;
use cri2net\sms_fly\SMS_fly;

$sender = new Sender();

// один доступный аккаунт
$sms1 = new SMS_fly('380000000001', 'pass1');
$sms1->alfaname = 'Alfaname';
$sender->addInstance($sms1);

// ещё один аккаунт
$sms2 = new SMS_fly('380000000002', 'pass2');
$sms1->alfaname = 'Alfaname';
$sender->addInstance($sms2);

$to = '380940000001';
$best = $sender->getBestInstance($to);
$data = $best->sendSMS($to, 'Hello!');