[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-8532":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":32,"discoverSource":33},8532,"easy-sms","overtrue\u002Feasy-sms","overtrue","📲 一款多渠道的短信发送轮子","",null,"PHP",3330,565,73,24,0,2,7,61.96,"MIT License",false,"master",true,[25,26,27,28],"php-sms","sms","sms-client","sms-gateway","2026-06-12 04:00:40","\u003Ch1 align=\"center\">Easy SMS\u003C\u002Fh1>\n\n\u003Cp align=\"center\">:calling: 一款多渠道的短信发送组件\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fovertrue\u002Feasy-sms\">\u003Cimg src=\"https:\u002F\u002Fposer.pugx.org\u002Fovertrue\u002Feasy-sms\u002Fv\u002Fstable.svg\" alt=\"Latest Stable Version\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fovertrue\u002Feasy-sms\">\u003Cimg src=\"https:\u002F\u002Fposer.pugx.org\u002Fovertrue\u002Feasy-sms\u002Fv\u002Funstable.svg\" alt=\"Latest Unstable Version\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fscrutinizer-ci.com\u002Fg\u002Fovertrue\u002Feasy-sms\u002F?branch=master\">\u003Cimg src=\"https:\u002F\u002Fscrutinizer-ci.com\u002Fg\u002Fovertrue\u002Feasy-sms\u002Fbadges\u002Fcoverage.png?b=master\" alt=\"Code Coverage\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fovertrue\u002Feasy-sms\">\u003Cimg src=\"https:\u002F\u002Fposer.pugx.org\u002Fovertrue\u002Feasy-sms\u002Fdownloads\" alt=\"Total Downloads\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fovertrue\u002Feasy-sms\">\u003Cimg src=\"https:\u002F\u002Fposer.pugx.org\u002Fovertrue\u002Feasy-sms\u002Flicense\" alt=\"License\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fovertrue\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fovertrue\u002Fovertrue\u002Fblob\u002Fmaster\u002Fsponsor-me-button-s.svg?raw=true\" alt=\"Sponsor me\" style=\"max-width: 100%;\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n## 特点\n\n1. 支持目前市面多家服务商\n1. 一套写法兼容所有平台\n1. 简单配置即可灵活增减服务商\n1. 内置多种服务商轮询策略、支持自定义轮询策略\n1. 统一的返回值格式，便于日志与监控\n1. 自动轮询选择可用的服务商\n1. 更多等你去发现与改进...\n\n## 平台支持\n\n- [腾讯云 SMS](https:\u002F\u002Fcloud.tencent.com\u002Fproduct\u002Fsms)\n- [Ucloud](https:\u002F\u002Fwww.ucloud.cn)\n- [七牛云](https:\u002F\u002Fwww.qiniu.com\u002F)\n- [SendCloud](http:\u002F\u002Fwww.sendcloud.net\u002F)\n- [阿里云](https:\u002F\u002Fwww.aliyun.com\u002F)\n- [云片](https:\u002F\u002Fwww.yunpian.com)\n- [Submail](https:\u002F\u002Fwww.mysubmail.com)\n- [螺丝帽](https:\u002F\u002Fluosimao.com\u002F)\n- [容联云通讯](http:\u002F\u002Fwww.yuntongxun.com)\n- [互亿无线](http:\u002F\u002Fwww.ihuyi.com)\n- [聚合数据](https:\u002F\u002Fwww.juhe.cn)\n- [百度云](https:\u002F\u002Fcloud.baidu.com\u002F)\n- [华信短信平台](http:\u002F\u002Fwww.ipyy.com\u002F)\n- [253云通讯（创蓝）](https:\u002F\u002Fwww.253.com\u002F)\n- [创蓝云智](https:\u002F\u002Fwww.chuanglan.com\u002F)\n- [融云](http:\u002F\u002Fwww.rongcloud.cn)\n- [天毅无线](http:\u002F\u002Fwww.85hu.com\u002F)\n- [华为云](https:\u002F\u002Fwww.huaweicloud.com\u002Fproduct\u002Fmsgsms.html)\n- [网易云信](https:\u002F\u002Fyunxin.163.com\u002Fsms)\n- [云之讯](https:\u002F\u002Fwww.ucpaas.com\u002Findex.html)\n- [凯信通](http:\u002F\u002Fwww.kingtto.cn\u002F)\n- [UE35.net](http:\u002F\u002Fuesms.ue35.cn\u002F)\n- [短信宝](http:\u002F\u002Fwww.smsbao.com\u002F)\n- [Tiniyo](https:\u002F\u002Ftiniyo.com\u002F)\n- [摩杜云](https:\u002F\u002Fwww.moduyun.com\u002F)\n- [融合云（助通）](https:\u002F\u002Fwww.ztinfo.cn\u002Fproducts\u002Fsms)\n- [蜘蛛云](https:\u002F\u002Fzzyun.com\u002F)\n- [融合云信](https:\u002F\u002Fmaap.wo.cn\u002F)\n- [天瑞云](http:\u002F\u002Fcms.tinree.com\u002F)\n- [时代互联](https:\u002F\u002Fwww.now.cn\u002F)\n- [火山引擎](https:\u002F\u002Fconsole.volcengine.com\u002Fsms\u002F)\n- [移动云MAS（黑名单模式）](https:\u002F\u002Fmas.10086.cn)\n- [电信天翼云](https:\u002F\u002Fwww.ctyun.cn\u002Fdocument\u002F10020426\u002F10021544)\n- [微趣云](https:\u002F\u002Fsms.weiqucloud.com\u002F)\n\n## 环境需求\n\n- PHP >= 8.4\n\n## 安装\n\n```shell\ncomposer require \"overtrue\u002Feasy-sms\"\n```\n\n**For Laravel notification**\n\n如果你喜欢使用 [Laravel Notification](https:\u002F\u002Flaravel.com\u002Fdocs\u002F5.8\u002Fnotifications), 可以考虑直接使用朋友封装的拓展包：\n\n\u003Chttps:\u002F\u002Fgithub.com\u002Fyl\u002Feasysms-notification-channel>\n\n## 使用\n\n```php\nuse Overtrue\\EasySms\\EasySms;\n\n$config = [\n    \u002F\u002F HTTP 请求的超时时间（秒）\n    'timeout' => 5.0,\n\n    \u002F\u002F 默认发送配置\n    'default' => [\n        \u002F\u002F 网关调用策略，默认：顺序调用\n        'strategy' => \\Overtrue\\EasySms\\Strategies\\OrderStrategy::class,\n\n        \u002F\u002F 默认可用的发送网关\n        'gateways' => [\n            'yunpian', 'aliyun',\n        ],\n    ],\n    \u002F\u002F 可用的网关配置\n    'gateways' => [\n        'errorlog' => [\n            'file' => '\u002Ftmp\u002Feasy-sms.log',\n        ],\n        'yunpian' => [\n            'api_key' => '824f0ff2f71cab52936axxxxxxxxxx',\n        ],\n        'aliyun' => [\n            'access_key_id' => '',\n            'access_key_secret' => '',\n            'sign_name' => '',\n        ],\n        \u002F\u002F...\n    ],\n];\n\n$easySms = new EasySms($config);\n\n$easySms->send(13188888888, [\n    'content'  => '您的验证码为: 6379',\n    'template' => 'SMS_001',\n    'data' => [\n        'code' => 6379\n    ],\n]);\n```\n\n## 短信内容\n\n由于使用多网关发送，所以一条短信要支持多平台发送，每家的发送方式不一样，但是我们抽象定义了以下公用属性：\n\n- `content` 文字内容，使用在像云片类似的以文字内容发送的平台\n- `template` 模板 ID，使用在以模板ID来发送短信的平台\n- `data`  模板变量，使用在以模板ID来发送短信的平台\n\n所以，在使用过程中你可以根据所要使用的平台定义发送的内容。\n\n```php\n$easySms->send(13188888888, [\n    'content'  => '您的验证码为: 6379',\n    'template' => 'SMS_001',\n    'data' => [\n        'code' => 6379\n    ],\n]);\n```\n\n你也可以使用闭包来返回对应的值：\n\n```php\n$easySms->send(13188888888, [\n    'content'  => function($gateway){\n        return '您的验证码为: 6379';\n    },\n    'template' => function($gateway){\n        return 'SMS_001';\n    },\n    'data' => function($gateway){\n        return [\n            'code' => 6379\n        ];\n    },\n]);\n```\n\n你可以根据 `$gateway` 参数类型来判断返回值，例如：\n\n```php\n$easySms->send(13188888888, [\n    'content'  => function($gateway){\n        if ($gateway->getName() == 'yunpian') {\n            return '云片专用验证码：1235';\n        }\n        return '您的验证码为: 6379';\n    },\n    'template' => function($gateway){\n        if ($gateway->getName() == 'aliyun') {\n            return 'TP2818';\n        }\n        return 'SMS_001';\n    },\n    'data' => function($gateway){\n        return [\n            'code' => 6379\n        ];\n    },\n]);\n```\n\n## 发送网关\n\n默认使用 `default` 中的设置来发送，如果某一条短信你想要覆盖默认的设置。在 `send` 方法中使用第三个参数即可：\n\n```php\n$easySms->send(13188888888, [\n    'content'  => '您的验证码为: 6379',\n    'template' => 'SMS_001',\n    'data' => [\n        'code' => 6379\n    ],\n ], ['yunpian', 'juhe']); \u002F\u002F 这里的网关配置将会覆盖全局默认值\n```\n\n## 返回值\n\n由于使用多网关发送，所以返回值为一个数组，结构如下：\n\n```php\n[\n    'yunpian' => [\n        'gateway' => 'yunpian',\n        'status' => 'success',\n        'result' => [...] \u002F\u002F 平台返回值\n    ],\n    'juhe' => [\n        'gateway' => 'juhe',\n        'status' => 'failure',\n        'exception' => \\Overtrue\\EasySms\\Exceptions\\GatewayErrorException 对象\n    ],\n    \u002F\u002F...\n]\n```\n\n如果所选网关列表均发送失败时，将会抛出 `Overtrue\\EasySms\\Exceptions\\NoGatewayAvailableException` 异常，你可以使用 `$e->results` 获取发送结果。\n\n你也可以使用 `$e` 提供的更多便捷方法：\n\n```php\n$e->getResults();               \u002F\u002F 返回所有 API 的结果，结构同上\n$e->getExceptions();            \u002F\u002F 返回所有调用异常列表\n$e->getException($gateway);     \u002F\u002F 返回指定网关名称的异常对象\n$e->getLastException();         \u002F\u002F 获取最后一个失败的异常对象\n```\n\n## 自定义网关\n\n本拓展已经支持用户自定义网关，你可以很方便的配置即可当成与其它拓展一样的使用：\n\n```php\n$config = [\n    ...\n    'default' => [\n        'gateways' => [\n            'mygateway', \u002F\u002F 配置你的网站到可用的网关列表\n        ],\n    ],\n    'gateways' => [\n        'mygateway' => [...], \u002F\u002F 你网关所需要的参数，如果没有可以不配置\n    ],\n];\n\n$easySms = new EasySms($config);\n\n\u002F\u002F 注册\n$easySms->extend('mygateway', function($gatewayConfig){\n    \u002F\u002F $gatewayConfig 来自配置文件里的 `gateways.mygateway`\n    return new MyGateway($gatewayConfig);\n});\n\n$easySms->send(13188888888, [\n    'content'  => '您的验证码为: 6379',\n    'template' => 'SMS_001',\n    'data' => [\n        'code' => 6379\n    ],\n]);\n```\n\n## 国际短信\n\n国际短信与国内短信的区别是号码前面需要加国际码，但是由于各平台对国际号码的写法不一致，所以在发送国际短信的时候有一点区别：\n\n```php\nuse Overtrue\\EasySms\\PhoneNumber;\n\n\u002F\u002F 发送到国际码为 31 的国际号码\n$number = new PhoneNumber(13188888888, 31);\n\n$easySms->send($number, [\n    'content'  => '您的验证码为: 6379',\n    'template' => 'SMS_001',\n    'data' => [\n        'code' => 6379\n    ],\n]);\n```\n\n## 定义短信\n\n你可以根据发送场景的不同，定义不同的短信类，从而实现一处定义多处调用，你可以继承 `Overtrue\\EasySms\\Message` 来定义短信模型：\n\n```php\n\u003C?php\n\nuse Overtrue\\EasySms\\Message;\nuse Overtrue\\EasySms\\Contracts\\GatewayInterface;\nuse Overtrue\\EasySms\\Strategies\\OrderStrategy;\n\nclass OrderPaidMessage extends Message\n{\n    protected $order;\n    protected $strategy = OrderStrategy::class;           \u002F\u002F 定义本短信的网关使用策略，覆盖全局配置中的 `default.strategy`\n    protected $gateways = ['alidayu', 'yunpian', 'juhe']; \u002F\u002F 定义本短信的适用平台，覆盖全局配置中的 `default.gateways`\n\n    public function __construct($order)\n    {\n        $this->order = $order;\n    }\n\n    \u002F\u002F 定义直接使用内容发送平台的内容\n    public function getContent(GatewayInterface $gateway = null)\n    {\n        return sprintf('您的订单:%s, 已经完成付款', $this->order->no);\n    }\n\n    \u002F\u002F 定义使用模板发送方式平台所需要的模板 ID\n    public function getTemplate(GatewayInterface $gateway = null)\n    {\n        return 'SMS_003';\n    }\n\n    \u002F\u002F 模板参数\n    public function getData(GatewayInterface $gateway = null)\n    {\n        return [\n            'order_no' => $this->order->no\n        ];\n    }\n}\n```\n\n> 更多自定义方式请参考：[`Overtrue\\EasySms\\Message`](Overtrue\\EasySms\\Message;)\n\n发送自定义短信：\n\n```php\n$order = ...;\n$message = new OrderPaidMessage($order);\n\n$easySms->send(13188888888, $message);\n```\n\n## 各平台配置说明\n\n### [阿里云](https:\u002F\u002Fwww.aliyun.com\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyun' => [\n        'access_key_id' => '',\n        'access_key_secret' => '',\n        'sign_name' => '',\n    ],\n```\n\n### [阿里云Rest](https:\u002F\u002Fwww.aliyun.com\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyunrest' => [\n        'app_key' => '',\n        'app_secret_key' => '',\n        'sign_name' => '',\n    ],\n```\n\n### [阿里云国际](https:\u002F\u002Fwww.alibabacloud.com\u002Fhelp\u002Fzh\u002Fdoc-detail\u002F160524.html)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyunintl' => [\n        'access_key_id' => '',\n        'access_key_secret' => '',\n        'sign_name' => '',\n    ],\n```\n\n发送示例：\n\n```php\nuse Overtrue\\EasySms\\PhoneNumber;\n\n$easySms = new EasySms($config);\n$phone_number = new PhoneNumber(18888888888, 86);\n\n$easySms->send($phone_number, [\n    'content' => '您好：先生\u002F女士！您的验证码为${code}，有效时间是5分钟，请及时验证。',\n    'template' => 'SMS_00000001', \u002F\u002F 模板ID\n    'data' => [\n        \"code\" => 521410,\n    ],\n]);\n```\n\n\n### [阿里云短信认证](https:\u002F\u002Fhelp.aliyun.com\u002Fzh\u002Fpnvs\u002Fgetting-started\u002Fsms-authentication-service-novice-guide)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyundypns' => [\n        'access_key_id' => '',\n        'access_key_secret' => '',\n        'sign_name' => '', \u002F\u002F 不可自定义，可选：速通互联验证码、云渚科技验证服务等\n    ],\n```\n\n发送示例：\n\n```php\n$easySms = new EasySms($config);\n\n$easySms->send('18888888888', [\n    'template' => '100001', \u002F\u002F 模板ID，详见：https:\u002F\u002Fdypns.console.aliyun.com\u002FsmsCertParamsConfig\n    'data' => [\n        \"code\" => 1234,\n        \"min\" => 5, \u002F\u002F 有效时间（分钟）\n    ],\n]);\n```\n\n### [云片](https:\u002F\u002Fwww.yunpian.com)\n\n短信内容使用 `content`\n\n```php\n    'yunpian' => [\n        'api_key' => '',\n        'signature' => '【默认签名】', \u002F\u002F 内容中无签名时使用\n    ],\n```\n\n### [Submail](https:\u002F\u002Fwww.mysubmail.com)\n\n短信内容使用 `data`\n\n```php\n    'submail' => [\n        'app_id' => '',\n        'app_key' => '',\n        'project' => '', \u002F\u002F 默认 project，可在发送时 data 中指定\n    ],\n```\n\n### [螺丝帽](https:\u002F\u002Fluosimao.com\u002F)\n\n短信内容使用 `content`\n\n```php\n    'luosimao' => [\n        'api_key' => '',\n    ],\n```\n\n### [容联云通讯](http:\u002F\u002Fwww.yuntongxun.com)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yuntongxun' => [\n        'app_id' => '',\n        'account_sid' => '',\n        'account_token' => '',\n        'is_sub_account' => false,\n    ],\n```\n\n### [互亿无线](http:\u002F\u002Fwww.ihuyi.com)\n\n短信内容使用 `content`\n\n```php\n    'huyi' => [\n        'api_id' => '',\n        'api_key' => '',\n        'signature' => '',\n    ],\n```\n\n### [聚合数据](https:\u002F\u002Fwww.juhe.cn)\n\n短信内容使用 `template` + `data`\n\n```php\n    'juhe' => [\n        'app_key' => '',\n    ],\n```\n\n### [SendCloud](http:\u002F\u002Fwww.sendcloud.net\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'sendcloud' => [\n        'sms_user' => '',\n        'sms_key' => '',\n        'timestamp' => false, \u002F\u002F 是否启用时间戳\n    ],\n```\n\n### [百度云](https:\u002F\u002Fcloud.baidu.com\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'baidu' => [\n        'ak' => '',\n        'sk' => '',\n        'invoke_id' => '',\n        'domain' => '',\n    ],\n```\n\n### [华信短信平台](http:\u002F\u002Fwww.ipyy.com\u002F)\n\n短信内容使用 `content`\n\n```php\n    'huaxin' => [\n        'user_id'  => '',\n        'password' => '',\n        'account'  => '',\n        'ip'       => '',\n        'ext_no'   => '',\n    ],\n```\n\n### [253云通讯（创蓝）](https:\u002F\u002Fwww.253.com\u002F)\n\n短信内容使用 `content`\n\n```php\n    'chuanglan' => [\n        'account' => '',\n        'password' => '',\n\n        \u002F\u002F 国际短信时必填\n        'intel_account' => '',\n        'intel_password' => '',\n\n        \u002F\u002F \\Overtrue\\EasySms\\Gateways\\ChuanglanGateway::CHANNEL_VALIDATE_CODE  => 验证码通道（默认）\n        \u002F\u002F \\Overtrue\\EasySms\\Gateways\\ChuanglanGateway::CHANNEL_PROMOTION_CODE => 会员营销通道\n        'channel'  => \\Overtrue\\EasySms\\Gateways\\ChuanglanGateway::CHANNEL_VALIDATE_CODE,\n\n        \u002F\u002F 会员营销通道 特定参数。创蓝规定：api提交营销短信的时候，需要自己加短信的签名及退订信息\n        'sign' => '【通讯云】',\n        'unsubscribe' => '回TD退订',\n    ],\n```\n\n### [创蓝云智](https:\u002F\u002Fwww.chuanglan.com\u002F)\n\n普通短信发送内容使用 `content`\n\n```php\n    'chuanglanv1' => [\n        'account' => '',\n        'password' => '',\n        'needstatus' => false,\n        'channel' => \\Overtrue\\EasySms\\Gateways\\Chuanglanv1Gateway::CHANNEL_NORMAL_CODE,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'content' => xxxxxxx\n]);\n```\n\n变量短信发送内容使用 `template` + `data`\n\n```php\n    'chuanglanv1' => [\n        'account' => '',\n        'password' => '',\n        'needstatus' => false,\n        'channel' => \\Overtrue\\EasySms\\Gateways\\Chuanglanv1Gateway::CHANNEL_VARIABLE_CODE,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'template' => xxxxxx, \u002F\u002F 模板内容\n    'data' => 'phone\":\"15800000000,1234；15300000000,4321',\n]);\n```\n\n### [融云](http:\u002F\u002Fwww.rongcloud.cn)\n\n短信分为两大类，验证类和通知类短信。 发送验证类短信使用 `template` + `data`\n\n```php\n    'rongcloud' => [\n        'app_key' => '',\n        'app_secret' => '',\n    ]\n```\n\n### [天毅无线](http:\u002F\u002Fwww.85hu.com\u002F)\n\n短信内容使用 `content`\n\n```php\n    'tianyiwuxian' => [\n        'username' => '', \u002F\u002F用户名\n        'password' => '', \u002F\u002F密码\n        'gwid' => '', \u002F\u002F网关ID\n    ]\n```\n\n### [twilio](https:\u002F\u002Fwww.twilio.com)\n\n短信使用 `content`\n发送对象需要 使用`+`添加区号\n\n```php\n    'twilio' => [\n        'account_sid' => '', \u002F\u002F sid\n        'from' => '', \u002F\u002F 发送的号码 可以在控制台购买\n        'token' => '', \u002F\u002F apitoken\n    ],\n```\n\n### [tiniyo](https:\u002F\u002Fwww.tiniyo.com)\n\n短信使用 `content`\n发送对象需要 使用`+`添加区号\n\n```php\n    'tiniyo' => [\n        'account_sid' => '', \u002F\u002F auth_id from https:\u002F\u002Ftiniyo.com\n        'from' => '', \u002F\u002F 发送的号码 可以在控制台购买\n        'token' => '', \u002F\u002F auth_secret from https:\u002F\u002Ftiniyo.com\n    ],\n```\n\n### [腾讯云 SMS](https:\u002F\u002Fcloud.tencent.com\u002Fproduct\u002Fsms)\n\n短信内容使用 `template` + `data`\n\n```php\n    'qcloud' => [\n        'sdk_app_id' => '', \u002F\u002F 短信应用的 SDK APP ID\n        'secret_id' => '', \u002F\u002F SECRET ID\n        'secret_key' => '', \u002F\u002F SECRET KEY\n        'sign_name' => '腾讯CoDesign', \u002F\u002F 短信签名\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'template' => 101234, \u002F\u002F 模板ID\n    'data' => [\n        \"a\", 'b', 'c', 'd', \u002F\u002F按占位顺序给值\n    ],\n]);\n```\n\n### [华为云 SMS](https:\u002F\u002Fwww.huaweicloud.com\u002Fproduct\u002Fmsgsms.html)\n\n短信内容使用 `template` + `data`\n\n```php\n    'huawei' => [\n        'endpoint' => '', \u002F\u002F APP接入地址\n        'app_key' => '', \u002F\u002F APP KEY\n        'app_secret' => '', \u002F\u002F APP SECRET\n        'from' => [\n            'default' => '1069012345', \u002F\u002F 默认使用签名通道号\n            'custom' => 'csms12345', \u002F\u002F 其他签名通道号 可以在 data 中定义 from 来指定\n            'abc' => 'csms67890', \u002F\u002F 其他签名通道号\n            ...\n        ],\n        'callback' => '' \u002F\u002F 短信状态回调地址\n    ],\n```\n\n使用默认签名通道 `default`\n\n```php\n$easySms->send(13188888888, [\n    'template' => 'SMS_001',\n    'data' => [\n        6379\n    ],\n]);\n```\n\n使用指定签名通道\n\n```php\n$easySms->send(13188888888, [\n    'template' => 'SMS_001',\n    'data' => [\n        6379,\n        'from' => 'custom' \u002F\u002F 对应 config 中的 from 数组中 custom\n    ],\n]);\n```\n\n### [网易云信](https:\u002F\u002Fyunxin.163.com\u002Fsms)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yunxin' => [\n        'app_key' => '',\n        'app_secret' => '',\n        'code_length' => 4, \u002F\u002F 随机验证码长度，范围 4～10，默认为 4\n        'need_up' => false, \u002F\u002F 是否需要支持短信上行\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'SMS_001',    \u002F\u002F 不填则使用默认模板\n    'data' => [\n        'code' => 8946, \u002F\u002F 如果设置了该参数，则 code_length 参数无效\n        'action' => 'sendCode', \u002F\u002F 默认为 `sendCode`，校验短信验证码使用 `verifyCode`\n    ],\n]);\n```\n\n通知模板短信\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'templateid',    \u002F\u002F 模板编号(由客户顾问配置之后告知开发者)\n    'data' => [\n        'action' => 'sendTemplate', \u002F\u002F 默认为 `sendCode`，校验短信验证码使用 `verifyCode`\n        'params' => [1,2,3], \u002F\u002F短信参数列表，用于依次填充模板\n    ],\n]);\n```\n\n### [云之讯](https:\u002F\u002Fwww.ucpaas.com\u002Findex.html)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yunzhixun' => [\n        'sid' => '',\n        'token' => '',\n        'app_id' => '',\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'SMS_001',\n    'data' => [\n        'params' => '8946,3',   \u002F\u002F 模板参数，多个参数使用 `,` 分割，模板无参数时可为空\n        'uid' => 'hexianghui',  \u002F\u002F 用户 ID，随状态报告返回，可为空\n        'mobiles' => '18888888888,188888888889',    \u002F\u002F 批量发送短信，手机号使用 `,` 分割，不使用批量发送请不要设置该参数\n    ],\n]);\n```\n\n### [凯信通](http:\u002F\u002Fwww.kingtto.cn\u002F)\n\n短信内容使用 `content`\n\n```php\n    'kingtto'  => [\n        'userid'   => '',\n        'account'  => '',\n        'password' => '',\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'content'  => '您的验证码为: 6379',\n]);\n```\n\n### [七牛云](https:\u002F\u002Fwww.qiniu.com\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'qiniu' => [\n        'secret_key' => '',\n        'access_key' => '',\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => '1231234123412341234',\n    'data' => [\n        'code' => 1234,\n    ],\n]);\n```\n\n### [Ucloud](https:\u002F\u002Fwww.ucloud.cn\u002F)\n\n短信使用 `template` + `data`\n\n```php\n  'ucloud' => [\n        'private_key'  => '',    \u002F\u002F私钥\n        'public_key'   => '',    \u002F\u002F公钥\n        'sig_content'  => '',    \u002F\u002F 短信签名,\n        'project_id'   => '',    \u002F\u002F项目ID,子账号才需要该参数\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'UTAXXXXX',       \u002F\u002F短信模板\n    'data' => [\n        'code' => 1234,     \u002F\u002F模板参数，模板没有参数不用则填写，有多个参数请用数组，[1111,1111]\n        'mobiles' =>'',     \u002F\u002F同时发送多个手机短信，请用数组[xxx,xxx]\n    ],\n]);\n\n```\n\n### [短信宝](http:\u002F\u002Fwww.smsbao.com\u002F)\n\n短信使用 `content`\n\n```php\n  'smsbao' => [\n        'user'  => '',    \u002F\u002F账号\n        'password'   => ''   \u002F\u002F密码\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'content' => '您的验证码为: 6379',       \u002F\u002F短信模板\n]);\n\n```\n\n### [摩杜云](https:\u002F\u002Fwww.moduyun.com\u002F)\n\n短信使用 `template` + `data`\n\n```php\n  'moduyun' => [\n        'accesskey' => '',  \u002F\u002F必填 ACCESS KEY\n        'secretkey' => '',  \u002F\u002F必填 SECRET KEY\n        'signId'    => '',  \u002F\u002F选填 短信签名，如果使用默认签名，该字段可缺省\n        'type'      => 0,   \u002F\u002F选填 0:普通短信;1:营销短信\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => '5a95****b953',   \u002F\u002F短信模板\n    'data' => [\n        1234,   \u002F\u002F模板参数，对应模板的{1}\n        30      \u002F\u002F模板参数，对应模板的{2}\n        \u002F\u002F...\n    ],\n]);\n\n```\n\n### [融合云（助通）](https:\u002F\u002Fwww.ztinfo.cn\u002Fproducts\u002Fsms)\n\n短信使用 `template` + `data`\n\n```php\n  'rongheyun' => [\n        'username' => '',  \u002F\u002F必填 用户名\n        'password' => '',  \u002F\u002F必填 密码\n        'signature'=> '',  \u002F\u002F必填 已报备的签名\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => '31874',   \u002F\u002F短信模板\n    'data' => [\n        'valid_code' => '888888',   \u002F\u002F模板参数，对应模板的{valid_code}\n        \u002F\u002F...\n    ],\n]);\n\n```\n\n### [蜘蛛云](https:\u002F\u002Fzzyun.com\u002F)\n\n短信使用 `template` + `data`\n\n```php\n  'zzyun' => [\n        'user_id' => '',    \u002F\u002F必填 会员ID\n        'secret' => '',     \u002F\u002F必填 接口密钥\n        'sign_name'=> '',   \u002F\u002F必填 短信签名\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'SMS_210317****',   \u002F\u002F短信模板\n    'data' => [\n        'code' => '888888',   \u002F\u002F模板参数，对应模板的{code}\n        \u002F\u002F...\n    ],\n]);\n\n```\n\n### [融合云信](https:\u002F\u002Fmaap.wo.cn\u002F)\n\n短信使用 `template` + `data`\n\n```php\n  'maap' => [\n        'cpcode' => '',    \u002F\u002F必填 商户编码\n        'key' => '',     \u002F\u002F必填 接口密钥\n        'excode'=> '',   \u002F\u002F选填 扩展名\n    ],\n```\n\n```php\n$easySms->send(18888888888, [\n    'template' => '356120',   \u002F\u002F短信模板\n    'data' => [\n        '123465'\n    ],\u002F\u002F模板参数\n]);\n\n```\n\n### [天瑞云](http:\u002F\u002Fcms.tinree.com\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'tinree' => [\n        'accesskey' => '', \u002F\u002F 平台分配给用户的accesskey\n        'secret' => '', \u002F\u002F 平台分配给用户的secret\n        'sign' => '', \u002F\u002F 平台上申请的接口短信签名或者签名ID\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'template' => '123456', \u002F\u002F 模板ID\n    'data' => [\n        \"a\", 'b', 'c', \u002F\u002F按模板变量占位顺序\n    ],\n]);\n```\n\n### [时代互联](https:\u002F\u002Fwww.now.cn\u002F)\n\n短信使用 `content`\n\n```php\n  'nowcn' => [\n        'key'  => '',    \u002F\u002F用户ID\n        'secret'   => '',    \u002F\u002F开发密钥\n        'api_type'  => '',    \u002F\u002F 短信通道,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'content'  => '您的验证码为: 6379',\n]);\n```\n\n### [火山引擎](https:\u002F\u002Fconsole.volcengine.com\u002Fsms\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'volcengine' => [\n        'access_key_id' => '', \u002F\u002F 平台分配给用户的access_key_id\n        'access_key_secret' => '', \u002F\u002F 平台分配给用户的access_key_secret\n        'region_id' => 'cn-north-1', \u002F\u002F 国内节点 cn-north-1，国外节点 ap-singapore-1，不填或填错，默认使用国内节点\n        'sign_name' => '', \u002F\u002F 平台上申请的接口短信签名或者签名ID，可不填，发送短信时data中指定\n        'sms_account' => '', \u002F\u002F 消息组帐号,火山短信页面右上角，短信应用括号中的字符串，可不填，发送短信时data中指定\n    ],\n```\n\n发送示例1：\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'SMS_123456', \u002F\u002F 模板ID\n    'data' => [\n       \"code\" => 1234 \u002F\u002F 模板变量\n    ],\n]);\n```\n\n发送示例2：\n\n```php\n$easySms->send(18888888888, [\n    'template' => 'SMS_123456', \u002F\u002F 模板ID\n    'data' => [\n        \"template_param\" => [\"code\" => 1234], \u002F\u002F 模板变量参数\n        \"sign_name\" => \"yoursignname\", \u002F\u002F 签名，覆盖配置文件中的sign_name\n        \"sms_account\" => \"yoursmsaccount\", \u002F\u002F 消息组帐号，覆盖配置文件中的sms_account\n        \"phone_numbers\" => \"18888888888,18888888889\", \u002F\u002F 手机号，批量发送，英文的逗号连接多个手机号，覆盖发送方法中的填入的手机号\n    ],\n]);\n```\n\n### [移动云MAS（黑名单模式）](https:\u002F\u002Fmas.10086.cn\u002F)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yidongmasblack' => [\n        'ecName' => '', \u002F\u002F 机构名称\n        'secretKey' => '', \u002F\u002F 密钥\n        'apId' => '', \u002F\u002F 应用ID\n        'sign' => '', \u002F\u002F 签名\n        'addSerial' => '', \u002F\u002F 通道号默认空\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'content'  => '您的验证码为: 6379',\n]);\n```\n\n### [电信天翼云](https:\u002F\u002Fwww.ctyun.cn\u002F)\n\n短信使用 `content`\n\n```php\n  'ctyun' => [\n        'access_key'  => '',    \u002F\u002F用户access\n        'secret_key'   => '',    \u002F\u002F开发密钥secret\n        'sign'  => '验证码测试',    \u002F\u002F 短信下发签名,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'content' => $content,\n    'template' => 'SMS64124870510', \u002F\u002F 模板ID\n    'data' => [\n        \"code\" => 123456,\n    ],\n]);\n```\n\n### [微趣云](https:\u002F\u002Fsms.weiqucloud.com\u002F)\n\n短信使用 `content`\n\n```php\n  'weiqucloud' => [\n        'userId'  => '',    \u002F\u002F 服务商会提供 \n        'account'   => '',    \u002F\u002F服务商会提供\n        'password'  => '',    \u002F\u002F 服务商会提供,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms->send(18888888888, [\n    'content'  =>\"【已备案签名】您的验证码是 xx。\",\n]);\n```\n\n## :heart: 支持我\n\n[![Sponsor me](https:\u002F\u002Fgithub.com\u002Fovertrue\u002Fovertrue\u002Fblob\u002Fmaster\u002Fsponsor-me.svg?raw=true)](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fovertrue)\n\n如果你喜欢我的项目并想支持它，[点击这里 :heart:](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fovertrue)\n\n## Project supported by JetBrains\n\nMany thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.\n\n[![](https:\u002F\u002Fresources.jetbrains.com\u002Fstorage\u002Fproducts\u002Fcompany\u002Fbrand\u002Flogos\u002Fjb_beam.svg)](https:\u002F\u002Fwww.jetbrains.com\u002F?from=https:\u002F\u002Fgithub.com\u002Fovertrue)\n\n## PHP 扩展包开发\n\n> 想知道如何从零开始构建 PHP 扩展包？\n>\n> 请关注我的实战课程，我会在此课程中分享一些扩展开发经验 —— [《PHP 扩展包实战教程 - 从入门到发布》](https:\u002F\u002Flearnku.com\u002Fcourses\u002Fcreating-package)\n\n## License\n\nMIT\n","Easy SMS 是一款用于多渠道短信发送的PHP组件。它支持市面上多家短信服务提供商，通过统一接口和配置方式简化了跨平台短信发送流程。其核心功能包括一套代码兼容所有服务商、灵活的服务商增减机制、内置及自定义轮询策略以提高发送成功率，并且提供统一格式的返回值便于日志记录与系统监控。适用于需要高效稳定地向用户发送验证码、通知等信息的应用场景，如电商平台、在线教育平台等。","2026-06-11 03:18:29","top_language"]