又一个轮子:一款满足你的多种发送需求的短信发送组件: overtrue/easy-sms

其实这个轮子已经做好 3 个月了,陆续做了一些修改,另外一些朋友也在试用与测试,所以经过这 3 个月来的打磨,应该是时候放出来坑更多的小朋友了,哈哈,开个玩笑。

先讲讲缘由咯:

  1. 我们通常会在一个应用使用多家的短信发送服务以保证服务可用性。
  2. 接入多家服务的时候需要写多份代码,维护成本高。
  3. 针对各家服务商的调用方式不同,发送消息写法不统一。
  4. 增减服务商成本较大,代码改动量大。

当然了,对于编码质量高的同学来讲,上面的这些问题都不算大事,但是重复的折腾就会比较厌烦了,所以呢,我就开了这个坑。

https://github.com/overtrue/easy-sms

特点:

  1. 支持目前市面多家服务商:云片、Submail、螺丝帽、阿里大于、容联云通讯、互亿无线、聚合数据、SendCloud
  2. 一套写法兼容所有平台
  3. 简单配置即可灵活增减服务商
  4. 支持多种服务商选择策略
  5. 统一的返回值格式,便于日志与监控
  6. 自动轮询选择可用的服务商
  7. 更多等你去发现与改进...

你需要做的就是先打开上面的链接,点击右上角区域的 star, 然后看文档,喜欢就装上玩。有问题随时找我咯。:kiss:

本帖已被设为精华帖!
本帖由 Summer 于 6年前 加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 99

已试用一段时间了,好评 :+1:

6年前 评论
franktrue

好像不支持阿里云啊

6年前 评论

@fnf1993 阿里大于 不是?

6年前 评论
franktrue

@overtrue 我以前也以为是一样的,后来发现阿里云的消息服务,和阿里大于是两个东西= =

6年前 评论

@fnf1993 OK, 我改天集成进来,当然也欢迎 PR.

6年前 评论
franktrue

@overtrue 感谢~

6年前 评论
幽弥狂

感谢超哥

6年前 评论
Destiny

用了超哥的轮子,腰不酸腿不疼,一口气能上20楼了。

6年前 评论

超哥的轮子好啊,超哥的轮子棒,超哥的轮子呱呱叫。

6年前 评论

@maxincai 哈哈哈哈

6年前 评论

@Rekkles 哈哈,不要这样,小心论坛被关掉哦

6年前 评论

如果能配合 laravel notification 就更佳了 :+1:

6年前 评论
Summer

@Rekkles 已删,别这样,我会坐牢的

6年前 评论

手动点赞

6年前 评论

用了超哥的easywechat,确实很好用,有机会试试这个,感谢超哥!!!

6年前 评论

:+1: 好用

6年前 评论

超哥威武,超哥霸气~~

6年前 评论

百度云短信已经提交PR了

6年前 评论

厉害了我的轮子哥! 点赞

6年前 评论

高产奶牛,超哥出品,直接上线。

6年前 评论

@springjk 哈哈哈,Summer 是母猪,安哥是奶牛!

6年前 评论
QQ76762

厉害了我的哥

6年前 评论

这种源码读起来是一种很开心的体验!

6年前 评论
imxfly

评论得拉到最后才精彩= =,奶牛超哥,用你的easywechat确实少踩不少坑。是成为造轮子的人还是开轮子的人好呢:poop:

6年前 评论

@Stephen 开轮子是什么意思?

6年前 评论

@Stephen 是说我坑了你?

6年前 评论
imxfly

@overtrue 没有啊,少踩很多坑这句话不够清楚么= =

6年前 评论

@Stephen 好吧,看错了,我看成是 “踩了不少坑” 哈哈,sorry.

6年前 评论
imxfly

@overtrue 眼泪水掉下来

6年前 评论
imxfly

:revolving_hearts:

6年前 评论

会封装Laravel的ServiceProvider吗

6年前 评论

@墨风 嗯,也不是不行哈,过两天,最近忙成狗

6年前 评论

@overtrue 期待支持阿里云的短信,,,公司用的阿里云的,,正准备问阿里云和阿里大于是不是一个东西呢~~

6年前 评论

@largezhou 阿里云消息那个好复杂啊。。。所以现在抽不出时间来搞它,如果你们已经用上了,可以考虑贡献 PR

6年前 评论

https://github.com/overtrue/easy-sms/blob/...
如果Gateway是用注册式的就好了。比如自建的平台如果想写一个Gateway的话,还得class_alias到Overtrue\EasySms\Gateways命名空间下,有点hack了。

6年前 评论

@reatang guys, 请认真阅读 readme. 不然我要用小拳拳锤你胸口哦!

6年前 评论

@overtrue 看到了 extend()//吓了我个蹦

6年前 评论

好轮子 ?

6年前 评论
[ErrorException]                                             
  The use statement with non-compound name 'DB' has no effect  
Script php artisan optimize handling the post-update-cmd event returned with error code 1
Installation failed, reverting ./composer.json to its original content.

超哥我composer安装一直报这个错误 , 我的php是7.0 系统centos

6年前 评论

@DanceSmile 这明明是你 PHP 基础语法的问题吧,在根命名空间 use DB; 的原因:

The use statement with non-compound name 'DB' has no effect

6年前 评论

@overtrue 多谢指点,一句话点破了 好了,谢谢超哥

6年前 评论

@overtrue 刚才google的好久, 一直因为是不能用use DB, 我就把文件里的的use DB 删掉了好多,
看到你说的 根命名空间 才恍然大悟

6年前 评论

@overtrue

![Uploading file...]()
code应该是字符串,数字会报错

6年前 评论

file
code应该是字符串,数字会报错

6年前 评论

@就好比 不同商家要求不一样,根据自己情况调整内容

6年前 评论

@overtrue 原来是这个样子 我用的阿里大鱼 受教了= =

6年前 评论

正想看看这一方面的东西

6年前 评论

原来是这个样子 我用的阿里大鱼 受教了=

6年前 评论

大神诞生很多好作品啊

6年前 评论

错误信息的返回格式问题

 // 可用的网关配置
    'gateways' => [
        'errorlog' => [
            'file' => '/tmp/easy-sms.log',
        ],
        …
    ],

在这里的errorLog记录是所有的请求以及响应的日志么?如果服务商报错了,那么排查错误的话是不是通过这个文件实现?
比如使用的服务商欠费了(我使用的是laradock开发环境,查询了workspace、nginx、php-fpm容器无法查到生成的这个日志
文件,所以来问问大神)。
因为我看到只要是错误,返回的错误全这样的,这个无法排查问题啊。

{
    "message": "All the gateways have failed.",
    "status_code": 500
}
6年前 评论

@努力做个技术男 麻烦读完 README,谢谢:

https://github.com/overtrue/easy-sms#返回值

'juhe' => [
        'status' => 'erred',
        'exception' => \Overtrue\EasySms\Exceptions\GatewayErrorException 对象
    ],

https://github.com/overtrue/easy-sms/blob/...

6年前 评论

@overtrue 是的,在使用的时我看到了。返回值在成功的情况下是没有问题。返回值如下:

array:1 [
  "alidayu" => array:2 [
    "status" => "success"
    "result" => array:1 [
      "alibaba_aliqin_fc_sms_num_send_response" => array:2 [
        "result" => array:4 [
          "err_code" => "0"
          "model" => "787524908215381104^0"
          "msg" => "*"
          "success" => true
        ]
        "request_id" => "z27e2084k8zr"
      ]
    ]
  ]
]

But 当我尝试把手机号调整为12位,它是在$easySms->send()执行之中就抛出了这个异常,也就是说没等到我判断$result时,它就已经抛出了一个异常响应。

 "debug": {
        "line": 88,
        "file": "/var/www/employment-service/vendor/overtrue/easy-sms/src/Messenger.php",
        "class": "Overtrue\\EasySms\\Exceptions\\NoGatewayAvailableException",
…

本人使用dingoAPI、laravel5.4,短信服务商是阿里大于(仅此一个)。

6年前 评论

@overtrue 抱歉,没看仔细,异常中包装了$results,我需要再看看如何从异常中获取$results,因为在我的laravel log 日志中没有出现$results的信息。

6年前 评论

@努力做个技术男

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

6年前 评论

@overtrue
非常感谢,本人目前只使用的一个短信服务商阿里大鱼,所以解决方式也只针对于阿里大鱼。

通过对$easySms->send封装一层try catch,通过对异常的捕获避免直接响应给请求,然后通过对异常$results的读取、处理,然后根据逻辑处理即可。如图所示:

file

6年前 评论

使用创蓝(253)短信时,报NoGatewayAvailableException错误

6年前 评论

抱歉了,因为公司用的是创蓝短信的老接口,跟这个轮子里的接口参数不一样,所以才报上面的错误。

6年前 评论

@overtrue 不支持阿里云语音?

6年前 评论

@overtrue 大神你好,请问这是因为什么刚下的扩展

file

5年前 评论

@xihanshui 请正确配置您的 SSL 根证书

5年前 评论

@overtrue 谢谢大神,我把Guzzel的ssl 证书认证选项给关了, 另外还有一个如果不是在 laravel框架中使用,选择腾讯云SMS服务的,可能会遇到这个错误

 Fatal error: Uncaught Error: Call to undefined function Overtrue\EasySms\Gateways\str_random() in C:\Users\Administrator\Desktop\easy-sms\vendor\overtrue\easy-sms\src\Gateways\QcloudGateway.php on line 69

因为 str_random() 不是php的内置函数 我给改成了 rand(100000, 999999) 就可以了。

5年前 评论

@xihanshui 好的,确实是 Bug, 稍后修复,多谢!

5年前 评论

不知道怎么兼容手机号是否带地区码

5年前 评论

@overtrue 大神,我的是TP5,在获取异常的时候一直提示错误

file

5年前 评论

大神好,阿里云短信是发送成功了,但是每天发送第一次不对,再试一次后就可以了。每天都是这样

4年前 评论

而且有时候发送不成功 返回值也是空的

4年前 评论

我找到问题了,有些时候发不成功 提示All the gateways have failed. You can get error details by $exception->getExceptions(), 但有时却成功了

4年前 评论

不知道华为云能不能兼容

4年前 评论

现在不支持阿里大于了?

4年前 评论

@pikalu 官方都放弃了

4年前 评论
pikalu 4年前

大汉三通 需要自己集成进去吗?

4年前 评论

老师,你好,我是您的扩展包课程的读者,我在参考github easy-sms 项目的源码,试着自己造轮子。我有一个疑问:阿里云短信服务提供了开发sdk ,如 alibabacloud/client": "^1.5 , 为什么在 easy-sms 项目中不使用, 而是自己封装代码? 基于什么样的考虑?我在造轮子的时候,该如何选择?

3年前 评论

@matteao 因为发短信就只是一个简单的 API 调用,如果用它的 SDK,要写的代码并没有减少,所以用不用其实差别不大。

3年前 评论
matteao 3年前

非常棒!打算改用你这个,希望作者可以吸取一下隔壁的一些功能github.com/toplan/laravel-sms#4-%E...

手机号验证、动态验证、debug不会发送短信可以通过接口获取短信验证码

3年前 评论
phpervip 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!