如何在Laravel中为直接发送的Nexmo SMS添加用户名
Laravel 框架下为Nexmo(Vonage)短信添加用户名的实现方案
首先确保你已经完成基础配置:安装laravel/vonage-notification-channel扩展,且在.env文件中正确配置VONAGE_KEY、VONAGE_SECRET、VONAGE_SMS_FROM三个核心参数。
方案1:通过通知类发送(官方推荐)
- 生成通知类
运行Artisan命令:php artisan make:notification CustomSmsNotification - 修改通知类逻辑,注入用户实例拼接用户名
编辑app/Notifications/CustomSmsNotification.php文件:<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Notifications\Messages\VonageMessage; use App\Models\User; class CustomSmsNotification extends Notification { use Queueable; protected $user; // 构造方法接收用户实例 public function __construct(User $user) { $this->user = $user; } public function via($notifiable) { return ['vonage']; } public function toVonage($notifiable) { // 拼接短信内容时直接插入用户名字段 return (new VonageMessage) ->content("您好{$this->user->name},您的账户本次登录验证码为123456,5分钟内有效。"); } } - 触发发送
拿到目标用户实例后调用notify方法即可:$targetUser = User::find(1); // 替换为实际获取用户的逻辑 $targetUser->notify(new CustomSmsNotification($targetUser));
方案2:直接调用Facade发送
如果不需要走Laravel通知体系,可直接调用Vonage facade手动构造内容:
use Illuminate\Support\Facades\Vonage; use App\Models\User; // 获取目标用户 $user = User::where('phone', '13xxxxxxxxx')->first(); // 构造带用户名的短信内容 $smsContent = "您好{$user->name},您订阅的服务已成功续费,有效期至2024年12月31日。"; // 执行发送 Vonage::sms()->send([ 'to' => '86' . $user->phone, // 国内手机号需加86前缀 'from' => config('vonage.sms_from'), 'text' => $smsContent, ]);
注意:如果使用的是旧版本Nexmo SDK,将上述代码中的
Vonage替换为Nexmo即可,调用逻辑完全一致。手机号必须携带对应国家区号,否则会出现发送失败的问题。
内容的提问来源于stack exchange,提问作者Francis O. Manzolo
相关产品推荐
相关产品推荐

