Laravel 使用 EasySms 发送阿里云短信报错:All the gateways have failed.

感谢关注这个问题~
我已经排除了签名、模板、accesskey以及阿里云格式的不对,阿里云的“发送量统计”与“发送记录查询”也没有看到任何记录。

config/easysms.php配置文件:

<?php
return [
    // HTTP 请求的超时时间(秒)
    'timeout' => 5.0,

    // 默认发送配置
    'default' => [
        // 网关调用策略,默认:顺序调用
        'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,

        // 默认可用的发送网关
        'gateways' => [
            'aliyun'
        ],
    ],
    // 可用的网关配置
    'gateways' => [
        'errorlog' => [
            'file' => '/tmp/easy-sms.log',
        ],
        'aliyun' => [
            'access_key_id' => env('ALIYUN_ACCESSKEY_ID'),
            'access_key_secret' => env('ALIYUN_ACCESSKEY_SECRET'),
            'sign_name' => env('ALIYUN_SMS_SIGN_NAME'),
        ]
    ],
];

EasySms注册器:

<?php
namespace App\Providers;
use Overtrue\EasySms\EasySms;
use Illuminate\Support\ServiceProvider;

class EasySmsServiceProvider extends ServiceProvider
{
    public function register()
    {
        //
    }
    public function boot()
    {
        $this->app->singleton(EasySms::class, function ($app) {
            return new EasySms(config('easysms'));
        });

        $this->app->alias(EasySms::class, 'easysms');
    }
}

config/app.php文件的provider中添加:

App\Providers\EasySmsServiceProvider::class

.env文件:

ALIYUN_ACCESSKEY_ID=************************
ALIYUN_ACCESSKEY_SECRET=****************************
ALIYUN_SMS_SIGN_NAME=博客

控制器:

<?php
namespace App\Http\Controllers;

use Overtrue\EasySms\EasySms;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class SmsController extends Controller
{
    public function send(Request $request,EasySms $easySms){
        $phone = '182********';
        $code = 123456;
        try {
            $result = $easySms->send($phone, [
                'template' => 'SMS_********',
                'data' => [
                    'code' => $code,
                ],
            ]);
            echo $result;
        } catch (\GuzzleHttp\Exception\ClientException $exception) {
            $response = $exception->getResponse();
            $result = json_decode($response->getBody()->getContents(), true);
        }
    }
}

报错如下:

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

根据图中报错信息操作。

4年前 评论
  • 优先确认 /tmp/easy-sms.log 文件的内容根据内容确认错误
  • 先不用服务提供者形式用,直接 new 类的形式

阿里云都没有错误日志,就证明没有成功调用,所以大概率是配置信息的问题

4年前 评论

错误信息已经给了,使用 $exception->getExceptions() 获取

4年前 评论

这是我最近刚做的,配置的方法和你的基本一样,我是这样调用的:

$easySms = app('easysms');
try {
    $result = $easySms->send($phone, [
        'template' => $template,
        'data' => $data,
    ]);

    // 添加发送短信流水 -->TODO

    return true;

} catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
    $msg = $exception->getException('aliyun')->getMessage();
    // 写log -->TODO
    \Log::info($msg);

    return false; // 返回 false ,根据不同的使用场景做对应的处理
}
3年前 评论

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