{"id":13459442,"url":"https://github.com/overtrue/easy-sms","last_synced_at":"2025-05-14T11:05:31.115Z","repository":{"id":37678016,"uuid":"84444835","full_name":"overtrue/easy-sms","owner":"overtrue","description":"📲 一款满足你的多种发送需求的短信发送轮子","archived":false,"fork":false,"pushed_at":"2025-04-23T06:21:38.000Z","size":435,"stargazers_count":3227,"open_issues_count":25,"forks_count":556,"subscribers_count":76,"default_branch":"master","last_synced_at":"2025-05-07T10:52:32.233Z","etag":null,"topics":["php-sms","sms","sms-client","sms-gateway"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/overtrue.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":["overtrue"]}},"created_at":"2017-03-09T13:26:10.000Z","updated_at":"2025-05-05T02:46:06.000Z","dependencies_parsed_at":"2023-02-15T20:01:04.630Z","dependency_job_id":"1343d2e1-98bd-4b74-b17d-875a89d335e8","html_url":"https://github.com/overtrue/easy-sms","commit_stats":{"total_commits":275,"total_committers":70,"mean_commits":"3.9285714285714284","dds":0.4363636363636364,"last_synced_commit":"78b9bdaabe08f444589877a47d10595805dba42b"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overtrue%2Feasy-sms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overtrue%2Feasy-sms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overtrue%2Feasy-sms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overtrue%2Feasy-sms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/overtrue","download_url":"https://codeload.github.com/overtrue/easy-sms/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254129479,"owners_count":22019628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php-sms","sms","sms-client","sms-gateway"],"created_at":"2024-07-31T09:01:22.481Z","updated_at":"2025-05-14T11:05:31.045Z","avatar_url":"https://github.com/overtrue.png","language":"PHP","funding_links":["https://github.com/sponsors/overtrue"],"categories":["PHP","配置 Configuration","PHP (184)","第三方API( Third Party APIs )","类库"],"sub_categories":["第三方api Third Party APIs","聊天/短信"],"readme":"\u003ch1 align=\"center\"\u003eEasy SMS\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e:calling: 一款满足你的多种发送需求的短信发送组件\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://packagist.org/packages/overtrue/easy-sms\"\u003e\u003cimg src=\"https://poser.pugx.org/overtrue/easy-sms/v/stable.svg\" alt=\"Latest Stable Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/overtrue/easy-sms\"\u003e\u003cimg src=\"https://poser.pugx.org/overtrue/easy-sms/v/unstable.svg\" alt=\"Latest Unstable Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://scrutinizer-ci.com/g/overtrue/easy-sms/?branch=master\"\u003e\u003cimg src=\"https://scrutinizer-ci.com/g/overtrue/easy-sms/badges/coverage.png?b=master\" alt=\"Code Coverage\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/overtrue/easy-sms\"\u003e\u003cimg src=\"https://poser.pugx.org/overtrue/easy-sms/downloads\" alt=\"Total Downloads\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/overtrue/easy-sms\"\u003e\u003cimg src=\"https://poser.pugx.org/overtrue/easy-sms/license\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/sponsors/overtrue\"\u003e\u003cimg src=\"https://github.com/overtrue/overtrue/blob/master/sponsor-me-button-s.svg?raw=true\" alt=\"Sponsor me\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## 特点\n\n1. 支持目前市面多家服务商\n1. 一套写法兼容所有平台\n1. 简单配置即可灵活增减服务商\n1. 内置多种服务商轮询策略、支持自定义轮询策略\n1. 统一的返回值格式，便于日志与监控\n1. 自动轮询选择可用的服务商\n1. 更多等你去发现与改进...\n\n## 平台支持\n\n- [腾讯云 SMS](https://cloud.tencent.com/product/sms)\n- [Ucloud](https://www.ucloud.cn)\n- [七牛云](https://www.qiniu.com/)\n- [SendCloud](http://www.sendcloud.net/)\n- [阿里云](https://www.aliyun.com/)\n- [云片](https://www.yunpian.com)\n- [Submail](https://www.mysubmail.com)\n- [螺丝帽](https://luosimao.com/)\n- [容联云通讯](http://www.yuntongxun.com)\n- [互亿无线](http://www.ihuyi.com)\n- [聚合数据](https://www.juhe.cn)\n- [百度云](https://cloud.baidu.com/)\n- [华信短信平台](http://www.ipyy.com/)\n- [253云通讯（创蓝）](https://www.253.com/)\n- [创蓝云智](https://www.chuanglan.com/)\n- [融云](http://www.rongcloud.cn)\n- [天毅无线](http://www.85hu.com/)\n- [华为云](https://www.huaweicloud.com/product/msgsms.html)\n- [网易云信](https://yunxin.163.com/sms)\n- [云之讯](https://www.ucpaas.com/index.html)\n- [凯信通](http://www.kingtto.cn/)\n- [UE35.net](http://uesms.ue35.cn/)\n- [短信宝](http://www.smsbao.com/)\n- [Tiniyo](https://tiniyo.com/)\n- [摩杜云](https://www.moduyun.com/)\n- [融合云（助通）](https://www.ztinfo.cn/products/sms)\n- [蜘蛛云](https://zzyun.com/)\n- [融合云信](https://maap.wo.cn/)\n- [天瑞云](http://cms.tinree.com/)\n- [时代互联](https://www.now.cn/)\n- [火山引擎](https://console.volcengine.com/sms/)\n- [移动云MAS（黑名单模式）](https://mas.10086.cn)\n- [电信天翼云](https://www.ctyun.cn/document/10020426/10021544)\n\n## 环境需求\n\n- PHP \u003e= 5.6\n\n## 安装\n\n```shell\ncomposer require \"overtrue/easy-sms\"\n```\n\n**For Laravel notification**\n\n如果你喜欢使用 [Laravel Notification](https://laravel.com/docs/5.8/notifications), 可以考虑直接使用朋友封装的拓展包：\n\n\u003chttps://github.com/yl/easysms-notification-channel\u003e\n\n## 使用\n\n```php\nuse Overtrue\\EasySms\\EasySms;\n\n$config = [\n    // HTTP 请求的超时时间（秒）\n    'timeout' =\u003e 5.0,\n\n    // 默认发送配置\n    'default' =\u003e [\n        // 网关调用策略，默认：顺序调用\n        'strategy' =\u003e \\Overtrue\\EasySms\\Strategies\\OrderStrategy::class,\n\n        // 默认可用的发送网关\n        'gateways' =\u003e [\n            'yunpian', 'aliyun',\n        ],\n    ],\n    // 可用的网关配置\n    'gateways' =\u003e [\n        'errorlog' =\u003e [\n            'file' =\u003e '/tmp/easy-sms.log',\n        ],\n        'yunpian' =\u003e [\n            'api_key' =\u003e '824f0ff2f71cab52936axxxxxxxxxx',\n        ],\n        'aliyun' =\u003e [\n            'access_key_id' =\u003e '',\n            'access_key_secret' =\u003e '',\n            'sign_name' =\u003e '',\n        ],\n        //...\n    ],\n];\n\n$easySms = new EasySms($config);\n\n$easySms-\u003esend(13188888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        'code' =\u003e 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-\u003esend(13188888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        'code' =\u003e 6379\n    ],\n]);\n```\n\n你也可以使用闭包来返回对应的值：\n\n```php\n$easySms-\u003esend(13188888888, [\n    'content'  =\u003e function($gateway){\n        return '您的验证码为: 6379';\n    },\n    'template' =\u003e function($gateway){\n        return 'SMS_001';\n    },\n    'data' =\u003e function($gateway){\n        return [\n            'code' =\u003e 6379\n        ];\n    },\n]);\n```\n\n你可以根据 `$gateway` 参数类型来判断返回值，例如：\n\n```php\n$easySms-\u003esend(13188888888, [\n    'content'  =\u003e function($gateway){\n        if ($gateway-\u003egetName() == 'yunpian') {\n            return '云片专用验证码：1235';\n        }\n        return '您的验证码为: 6379';\n    },\n    'template' =\u003e function($gateway){\n        if ($gateway-\u003egetName() == 'aliyun') {\n            return 'TP2818';\n        }\n        return 'SMS_001';\n    },\n    'data' =\u003e function($gateway){\n        return [\n            'code' =\u003e 6379\n        ];\n    },\n]);\n```\n\n## 发送网关\n\n默认使用 `default` 中的设置来发送，如果某一条短信你想要覆盖默认的设置。在 `send` 方法中使用第三个参数即可：\n\n```php\n$easySms-\u003esend(13188888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        'code' =\u003e 6379\n    ],\n ], ['yunpian', 'juhe']); // 这里的网关配置将会覆盖全局默认值\n```\n\n## 返回值\n\n由于使用多网关发送，所以返回值为一个数组，结构如下：\n\n```php\n[\n    'yunpian' =\u003e [\n        'gateway' =\u003e 'yunpian',\n        'status' =\u003e 'success',\n        'result' =\u003e [...] // 平台返回值\n    ],\n    'juhe' =\u003e [\n        'gateway' =\u003e 'juhe',\n        'status' =\u003e 'failure',\n        'exception' =\u003e \\Overtrue\\EasySms\\Exceptions\\GatewayErrorException 对象\n    ],\n    //...\n]\n```\n\n如果所选网关列表均发送失败时，将会抛出 `Overtrue\\EasySms\\Exceptions\\NoGatewayAvailableException` 异常，你可以使用 `$e-\u003eresults` 获取发送结果。\n\n你也可以使用 `$e` 提供的更多便捷方法：\n\n```php\n$e-\u003egetResults();               // 返回所有 API 的结果，结构同上\n$e-\u003egetExceptions();            // 返回所有调用异常列表\n$e-\u003egetException($gateway);     // 返回指定网关名称的异常对象\n$e-\u003egetLastException();         // 获取最后一个失败的异常对象\n```\n\n## 自定义网关\n\n本拓展已经支持用户自定义网关，你可以很方便的配置即可当成与其它拓展一样的使用：\n\n```php\n$config = [\n    ...\n    'default' =\u003e [\n        'gateways' =\u003e [\n            'mygateway', // 配置你的网站到可用的网关列表\n        ],\n    ],\n    'gateways' =\u003e [\n        'mygateway' =\u003e [...], // 你网关所需要的参数，如果没有可以不配置\n    ],\n];\n\n$easySms = new EasySms($config);\n\n// 注册\n$easySms-\u003eextend('mygateway', function($gatewayConfig){\n    // $gatewayConfig 来自配置文件里的 `gateways.mygateway`\n    return new MyGateway($gatewayConfig);\n});\n\n$easySms-\u003esend(13188888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        'code' =\u003e 6379\n    ],\n]);\n```\n\n## 国际短信\n\n国际短信与国内短信的区别是号码前面需要加国际码，但是由于各平台对国际号码的写法不一致，所以在发送国际短信的时候有一点区别：\n\n```php\nuse Overtrue\\EasySms\\PhoneNumber;\n\n// 发送到国际码为 31 的国际号码\n$number = new PhoneNumber(13188888888, 31);\n\n$easySms-\u003esend($number, [\n    'content'  =\u003e '您的验证码为: 6379',\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        'code' =\u003e 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;           // 定义本短信的网关使用策略，覆盖全局配置中的 `default.strategy`\n    protected $gateways = ['alidayu', 'yunpian', 'juhe']; // 定义本短信的适用平台，覆盖全局配置中的 `default.gateways`\n\n    public function __construct($order)\n    {\n        $this-\u003eorder = $order;\n    }\n\n    // 定义直接使用内容发送平台的内容\n    public function getContent(GatewayInterface $gateway = null)\n    {\n        return sprintf('您的订单:%s, 已经完成付款', $this-\u003eorder-\u003eno);\n    }\n\n    // 定义使用模板发送方式平台所需要的模板 ID\n    public function getTemplate(GatewayInterface $gateway = null)\n    {\n        return 'SMS_003';\n    }\n\n    // 模板参数\n    public function getData(GatewayInterface $gateway = null)\n    {\n        return [\n            'order_no' =\u003e $this-\u003eorder-\u003eno\n        ];\n    }\n}\n```\n\n\u003e 更多自定义方式请参考：[`Overtrue\\EasySms\\Message`](Overtrue\\EasySms\\Message;)\n\n发送自定义短信：\n\n```php\n$order = ...;\n$message = new OrderPaidMessage($order);\n\n$easySms-\u003esend(13188888888, $message);\n```\n\n## 各平台配置说明\n\n### [阿里云](https://www.aliyun.com/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyun' =\u003e [\n        'access_key_id' =\u003e '',\n        'access_key_secret' =\u003e '',\n        'sign_name' =\u003e '',\n    ],\n```\n\n### [阿里云Rest](https://www.aliyun.com/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyunrest' =\u003e [\n        'app_key' =\u003e '',\n        'app_secret_key' =\u003e '',\n        'sign_name' =\u003e '',\n    ],\n```\n\n### [阿里云国际](https://www.alibabacloud.com/help/zh/doc-detail/160524.html)\n\n短信内容使用 `template` + `data`\n\n```php\n    'aliyunintl' =\u003e [\n        'access_key_id' =\u003e '',\n        'access_key_secret' =\u003e '',\n        'sign_name' =\u003e '',\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-\u003esend($phone_number, [\n    'content' =\u003e '您好：先生/女士！您的验证码为${code}，有效时间是5分钟，请及时验证。',\n    'template' =\u003e 'SMS_00000001', // 模板ID\n    'data' =\u003e [\n        \"code\" =\u003e 521410,\n    ],\n]);\n```\n\n### [云片](https://www.yunpian.com)\n\n短信内容使用 `content`\n\n```php\n    'yunpian' =\u003e [\n        'api_key' =\u003e '',\n        'signature' =\u003e '【默认签名】', // 内容中无签名时使用\n    ],\n```\n\n### [Submail](https://www.mysubmail.com)\n\n短信内容使用 `data`\n\n```php\n    'submail' =\u003e [\n        'app_id' =\u003e '',\n        'app_key' =\u003e '',\n        'project' =\u003e '', // 默认 project，可在发送时 data 中指定\n    ],\n```\n\n### [螺丝帽](https://luosimao.com/)\n\n短信内容使用 `content`\n\n```php\n    'luosimao' =\u003e [\n        'api_key' =\u003e '',\n    ],\n```\n\n### [容联云通讯](http://www.yuntongxun.com)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yuntongxun' =\u003e [\n        'app_id' =\u003e '',\n        'account_sid' =\u003e '',\n        'account_token' =\u003e '',\n        'is_sub_account' =\u003e false,\n    ],\n```\n\n### [互亿无线](http://www.ihuyi.com)\n\n短信内容使用 `content`\n\n```php\n    'huyi' =\u003e [\n        'api_id' =\u003e '',\n        'api_key' =\u003e '',\n        'signature' =\u003e '',\n    ],\n```\n\n### [聚合数据](https://www.juhe.cn)\n\n短信内容使用 `template` + `data`\n\n```php\n    'juhe' =\u003e [\n        'app_key' =\u003e '',\n    ],\n```\n\n### [SendCloud](http://www.sendcloud.net/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'sendcloud' =\u003e [\n        'sms_user' =\u003e '',\n        'sms_key' =\u003e '',\n        'timestamp' =\u003e false, // 是否启用时间戳\n    ],\n```\n\n### [百度云](https://cloud.baidu.com/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'baidu' =\u003e [\n        'ak' =\u003e '',\n        'sk' =\u003e '',\n        'invoke_id' =\u003e '',\n        'domain' =\u003e '',\n    ],\n```\n\n### [华信短信平台](http://www.ipyy.com/)\n\n短信内容使用 `content`\n\n```php\n    'huaxin' =\u003e [\n        'user_id'  =\u003e '',\n        'password' =\u003e '',\n        'account'  =\u003e '',\n        'ip'       =\u003e '',\n        'ext_no'   =\u003e '',\n    ],\n```\n\n### [253云通讯（创蓝）](https://www.253.com/)\n\n短信内容使用 `content`\n\n```php\n    'chuanglan' =\u003e [\n        'account' =\u003e '',\n        'password' =\u003e '',\n\n        // 国际短信时必填\n        'intel_account' =\u003e '',\n        'intel_password' =\u003e '',\n\n        // \\Overtrue\\EasySms\\Gateways\\ChuanglanGateway::CHANNEL_VALIDATE_CODE  =\u003e 验证码通道（默认）\n        // \\Overtrue\\EasySms\\Gateways\\ChuanglanGateway::CHANNEL_PROMOTION_CODE =\u003e 会员营销通道\n        'channel'  =\u003e \\Overtrue\\EasySms\\Gateways\\ChuanglanGateway::CHANNEL_VALIDATE_CODE,\n\n        // 会员营销通道 特定参数。创蓝规定：api提交营销短信的时候，需要自己加短信的签名及退订信息\n        'sign' =\u003e '【通讯云】',\n        'unsubscribe' =\u003e '回TD退订',\n    ],\n```\n\n### [创蓝云智](https://www.chuanglan.com/)\n\n普通短信发送内容使用 `content`\n\n```php\n    'chuanglanv1' =\u003e [\n        'account' =\u003e '',\n        'password' =\u003e '',\n        'needstatus' =\u003e false,\n        'channel' =\u003e \\Overtrue\\EasySms\\Gateways\\Chuanglanv1Gateway::CHANNEL_NORMAL_CODE,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'content' =\u003e xxxxxxx\n]);\n```\n\n变量短信发送内容使用 `template` + `data`\n\n```php\n    'chuanglanv1' =\u003e [\n        'account' =\u003e '',\n        'password' =\u003e '',\n        'needstatus' =\u003e false,\n        'channel' =\u003e \\Overtrue\\EasySms\\Gateways\\Chuanglanv1Gateway::CHANNEL_VARIABLE_CODE,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e xxxxxx, // 模板内容\n    'data' =\u003e 'phone\":\"15800000000,1234；15300000000,4321',\n]);\n```\n\n### [融云](http://www.rongcloud.cn)\n\n短信分为两大类，验证类和通知类短信。 发送验证类短信使用 `template` + `data`\n\n```php\n    'rongcloud' =\u003e [\n        'app_key' =\u003e '',\n        'app_secret' =\u003e '',\n    ]\n```\n\n### [天毅无线](http://www.85hu.com/)\n\n短信内容使用 `content`\n\n```php\n    'tianyiwuxian' =\u003e [\n        'username' =\u003e '', //用户名\n        'password' =\u003e '', //密码\n        'gwid' =\u003e '', //网关ID\n    ]\n```\n\n### [twilio](https://www.twilio.com)\n\n短信使用 `content`\n发送对象需要 使用`+`添加区号\n\n```php\n    'twilio' =\u003e [\n        'account_sid' =\u003e '', // sid\n        'from' =\u003e '', // 发送的号码 可以在控制台购买\n        'token' =\u003e '', // apitoken\n    ],\n```\n\n### [tiniyo](https://www.tiniyo.com)\n\n短信使用 `content`\n发送对象需要 使用`+`添加区号\n\n```php\n    'tiniyo' =\u003e [\n        'account_sid' =\u003e '', // auth_id from https://tiniyo.com\n        'from' =\u003e '', // 发送的号码 可以在控制台购买\n        'token' =\u003e '', // auth_secret from https://tiniyo.com\n    ],\n```\n\n### [腾讯云 SMS](https://cloud.tencent.com/product/sms)\n\n短信内容使用 `template` + `data`\n\n```php\n    'qcloud' =\u003e [\n        'sdk_app_id' =\u003e '', // 短信应用的 SDK APP ID\n        'secret_id' =\u003e '', // SECRET ID\n        'secret_key' =\u003e '', // SECRET KEY\n        'sign_name' =\u003e '腾讯CoDesign', // 短信签名\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 101234, // 模板ID\n    'data' =\u003e [\n        \"a\", 'b', 'c', 'd', //按占位顺序给值\n    ],\n]);\n```\n\n### [华为云 SMS](https://www.huaweicloud.com/product/msgsms.html)\n\n短信内容使用 `template` + `data`\n\n```php\n    'huawei' =\u003e [\n        'endpoint' =\u003e '', // APP接入地址\n        'app_key' =\u003e '', // APP KEY\n        'app_secret' =\u003e '', // APP SECRET\n        'from' =\u003e [\n            'default' =\u003e '1069012345', // 默认使用签名通道号\n            'custom' =\u003e 'csms12345', // 其他签名通道号 可以在 data 中定义 from 来指定\n            'abc' =\u003e 'csms67890', // 其他签名通道号\n            ...\n        ],\n        'callback' =\u003e '' // 短信状态回调地址\n    ],\n```\n\n使用默认签名通道 `default`\n\n```php\n$easySms-\u003esend(13188888888, [\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        6379\n    ],\n]);\n```\n\n使用指定签名通道\n\n```php\n$easySms-\u003esend(13188888888, [\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        6379,\n        'from' =\u003e 'custom' // 对应 config 中的 from 数组中 custom\n    ],\n]);\n```\n\n### [网易云信](https://yunxin.163.com/sms)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yunxin' =\u003e [\n        'app_key' =\u003e '',\n        'app_secret' =\u003e '',\n        'code_length' =\u003e 4, // 随机验证码长度，范围 4～10，默认为 4\n        'need_up' =\u003e false, // 是否需要支持短信上行\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'SMS_001',    // 不填则使用默认模板\n    'data' =\u003e [\n        'code' =\u003e 8946, // 如果设置了该参数，则 code_length 参数无效\n        'action' =\u003e 'sendCode', // 默认为 `sendCode`，校验短信验证码使用 `verifyCode`\n    ],\n]);\n```\n\n通知模板短信\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'templateid',    // 模板编号(由客户顾问配置之后告知开发者)\n    'data' =\u003e [\n        'action' =\u003e 'sendTemplate', // 默认为 `sendCode`，校验短信验证码使用 `verifyCode`\n        'params' =\u003e [1,2,3], //短信参数列表，用于依次填充模板\n    ],\n]);\n```\n\n### [云之讯](https://www.ucpaas.com/index.html)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yunzhixun' =\u003e [\n        'sid' =\u003e '',\n        'token' =\u003e '',\n        'app_id' =\u003e '',\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'SMS_001',\n    'data' =\u003e [\n        'params' =\u003e '8946,3',   // 模板参数，多个参数使用 `,` 分割，模板无参数时可为空\n        'uid' =\u003e 'hexianghui',  // 用户 ID，随状态报告返回，可为空\n        'mobiles' =\u003e '18888888888,188888888889',    // 批量发送短信，手机号使用 `,` 分割，不使用批量发送请不要设置该参数\n    ],\n]);\n```\n\n### [凯信通](http://www.kingtto.cn/)\n\n短信内容使用 `content`\n\n```php\n    'kingtto'  =\u003e [\n        'userid'   =\u003e '',\n        'account'  =\u003e '',\n        'password' =\u003e '',\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n]);\n```\n\n### [七牛云](https://www.qiniu.com/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'qiniu' =\u003e [\n        'secret_key' =\u003e '',\n        'access_key' =\u003e '',\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e '1231234123412341234',\n    'data' =\u003e [\n        'code' =\u003e 1234,\n    ],\n]);\n```\n\n### [Ucloud](https://www.ucloud.cn/)\n\n短信使用 `template` + `data`\n\n```php\n  'ucloud' =\u003e [\n        'private_key'  =\u003e '',    //私钥\n        'public_key'   =\u003e '',    //公钥\n        'sig_content'  =\u003e '',    // 短信签名,\n        'project_id'   =\u003e '',    //项目ID,子账号才需要该参数\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'UTAXXXXX',       //短信模板\n    'data' =\u003e [\n        'code' =\u003e 1234,     //模板参数，模板没有参数不用则填写，有多个参数请用数组，[1111,1111]\n        'mobiles' =\u003e'',     //同时发送多个手机短信，请用数组[xxx,xxx]\n    ],\n]);\n\n```\n\n### [短信宝](http://www.smsbao.com/)\n\n短信使用 `content`\n\n```php\n  'smsbao' =\u003e [\n        'user'  =\u003e '',    //账号\n        'password'   =\u003e ''   //密码\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'content' =\u003e '您的验证码为: 6379',       //短信模板\n]);\n\n```\n\n### [摩杜云](https://www.moduyun.com/)\n\n短信使用 `template` + `data`\n\n```php\n  'moduyun' =\u003e [\n        'accesskey' =\u003e '',  //必填 ACCESS KEY\n        'secretkey' =\u003e '',  //必填 SECRET KEY\n        'signId'    =\u003e '',  //选填 短信签名，如果使用默认签名，该字段可缺省\n        'type'      =\u003e 0,   //选填 0:普通短信;1:营销短信\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e '5a95****b953',   //短信模板\n    'data' =\u003e [\n        1234,   //模板参数，对应模板的{1}\n        30      //模板参数，对应模板的{2}\n        //...\n    ],\n]);\n\n```\n\n### [融合云（助通）](https://www.ztinfo.cn/products/sms)\n\n短信使用 `template` + `data`\n\n```php\n  'rongheyun' =\u003e [\n        'username' =\u003e '',  //必填 用户名\n        'password' =\u003e '',  //必填 密码\n        'signature'=\u003e '',  //必填 已报备的签名\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e '31874',   //短信模板\n    'data' =\u003e [\n        'valid_code' =\u003e '888888',   //模板参数，对应模板的{valid_code}\n        //...\n    ],\n]);\n\n```\n\n### [蜘蛛云](https://zzyun.com/)\n\n短信使用 `template` + `data`\n\n```php\n  'zzyun' =\u003e [\n        'user_id' =\u003e '',    //必填 会员ID\n        'secret' =\u003e '',     //必填 接口密钥\n        'sign_name'=\u003e '',   //必填 短信签名\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'SMS_210317****',   //短信模板\n    'data' =\u003e [\n        'code' =\u003e '888888',   //模板参数，对应模板的{code}\n        //...\n    ],\n]);\n\n```\n\n### [融合云信](https://maap.wo.cn/)\n\n短信使用 `template` + `data`\n\n```php\n  'maap' =\u003e [\n        'cpcode' =\u003e '',    //必填 商户编码\n        'key' =\u003e '',     //必填 接口密钥\n        'excode'=\u003e '',   //选填 扩展名\n    ],\n```\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e '356120',   //短信模板\n    'data' =\u003e [\n        '123465'\n    ],//模板参数\n]);\n\n```\n\n### [天瑞云](http://cms.tinree.com/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'tinree' =\u003e [\n        'accesskey' =\u003e '', // 平台分配给用户的accesskey\n        'secret' =\u003e '', // 平台分配给用户的secret\n        'sign' =\u003e '', // 平台上申请的接口短信签名或者签名ID\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e '123456', // 模板ID\n    'data' =\u003e [\n        \"a\", 'b', 'c', //按模板变量占位顺序\n    ],\n]);\n```\n\n### [时代互联](https://www.now.cn/)\n\n短信使用 `content`\n\n```php\n  'nowcn' =\u003e [\n        'key'  =\u003e '',    //用户ID\n        'secret'   =\u003e '',    //开发密钥\n        'api_type'  =\u003e '',    // 短信通道,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n]);\n```\n\n### [火山引擎](https://console.volcengine.com/sms/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'volcengine' =\u003e [\n        'access_key_id' =\u003e '', // 平台分配给用户的access_key_id\n        'access_key_secret' =\u003e '', // 平台分配给用户的access_key_secret\n        'region_id' =\u003e 'cn-north-1', // 国内节点 cn-north-1，国外节点 ap-singapore-1，不填或填错，默认使用国内节点\n        'sign_name' =\u003e '', // 平台上申请的接口短信签名或者签名ID，可不填，发送短信时data中指定\n        'sms_account' =\u003e '', // 消息组帐号,火山短信页面右上角，短信应用括号中的字符串，可不填，发送短信时data中指定\n    ],\n```\n\n发送示例1：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'SMS_123456', // 模板ID\n    'data' =\u003e [\n       \"code\" =\u003e 1234 // 模板变量\n    ],\n]);\n```\n\n发送示例2：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'template' =\u003e 'SMS_123456', // 模板ID\n    'data' =\u003e [\n        \"template_param\" =\u003e [\"code\" =\u003e 1234], // 模板变量参数\n        \"sign_name\" =\u003e \"yoursignname\", // 签名，覆盖配置文件中的sign_name\n        \"sms_account\" =\u003e \"yoursmsaccount\", // 消息组帐号，覆盖配置文件中的sms_account\n        \"phone_numbers\" =\u003e \"18888888888,18888888889\", // 手机号，批量发送，英文的逗号连接多个手机号，覆盖发送方法中的填入的手机号\n    ],\n]);\n```\n\n### [移动云MAS（黑名单模式）](https://mas.10086.cn/)\n\n短信内容使用 `template` + `data`\n\n```php\n    'yidongmasblack' =\u003e [\n        'ecName' =\u003e '', // 机构名称\n        'secretKey' =\u003e '', // 密钥\n        'apId' =\u003e '', // 应用ID\n        'sign' =\u003e '', // 签名\n        'addSerial' =\u003e '', // 通道号默认空\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'content'  =\u003e '您的验证码为: 6379',\n]);\n```\n\n### [电信天翼云](https://www.ctyun.cn/)\n\n短信使用 `content`\n\n```php\n  'ctyun' =\u003e [\n        'access_key'  =\u003e '',    //用户access\n        'secret_key'   =\u003e '',    //开发密钥secret\n        'sign'  =\u003e '验证码测试',    // 短信下发签名,\n    ],\n```\n\n发送示例：\n\n```php\n$easySms-\u003esend(18888888888, [\n    'content' =\u003e $content,\n    'template' =\u003e 'SMS64124870510', // 模板ID\n    'data' =\u003e [\n        \"code\" =\u003e 123456,\n    ],\n]);\n```\n\n## :heart: 支持我\n\n[![Sponsor me](https://github.com/overtrue/overtrue/blob/master/sponsor-me.svg?raw=true)](https://github.com/sponsors/overtrue)\n\n如果你喜欢我的项目并想支持它，[点击这里 :heart:](https://github.com/sponsors/overtrue)\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://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/?from=https://github.com/overtrue)\n\n## PHP 扩展包开发\n\n\u003e 想知道如何从零开始构建 PHP 扩展包？\n\u003e\n\u003e 请关注我的实战课程，我会在此课程中分享一些扩展开发经验 —— [《PHP 扩展包实战教程 - 从入门到发布》](https://learnku.com/courses/creating-package)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovertrue%2Feasy-sms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovertrue%2Feasy-sms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovertrue%2Feasy-sms/lists"}