使用laravel向所有存储在数据库中的号码发送nexmo短信

时间:2019-02-09 18:41:09

标签: laravel

大家好,我的代码有问题,我尝试将nexmo文本发送到数据库中的所有数字。发送时,我的浏览器中出现此错误“数组到字符串转换”,并且错误显示此行“ CURLOPT_POSTFIELDS => $ postData“如果有人可以帮助我。”

我试图做一个dd('$ message')和dd('$ options'),但我得到的字段值很好,但是在发送时总是有相同的错误。我试图看到该方法爆破(),但没有成功。

    public function sendMsg(Request $request)
    {
        $message = $request->input('message');
        $options = $request->input('telephone');
        $encodeMessage = urlencode($message);


        $authkey = '********'; 
        $senderId = '******************';
        $route = 4;
        $postData = $request->all();

        $mobileNumber = implode(" ", $postData['telephone']);

        $arr = str_split($mobileNumber, '12');
        $mobiles = implode(", ", $arr);

        $data = array(
        'authkey' => $authkey,
        'mobiles' => $mobiles,
        'message' => $encodeMessage,
        'sender' => $senderId,
        'route' => $route
        );

        $url = "https://rest.nexmo.com/sms/json";
        $ch = curl_init();
        curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $postData
        ));

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYpeer, 0);

        $output = curl_exec($ch);

        if (curl_errno($ch)) {
        echo 'error:' . curl_errno($ch);
        }
        curl_close($ch);
        return redirect('/create');
    }

1 个答案:

答案 0 :(得分:0)

要将自定义短信通知发送给所有用户,可以使用Laravel的内置通知系统。

您需要开始使用的所有信息都在Laravel网站的Documentation中。

要开始使用,您需要:

下载nexmo作曲家软件包

composer require nexmo/client

将配置nexmo配置添加到config/services.php文件

'nexmo' => [
    'key'      => env('NEXMO_KEY'),
    'secret'   => env('NEXMO_SECRET'),
    'sms_from' => 'your-nexmo-phone-number',
],

NB 请仅更改上面代码中的"your-nexmo-phone-number"部分。请勿将上面的NEXMO_KEYNEXMO_SECRET替换为您的实际密钥和秘密,因为它们将存储在.env中,并将值传递给env()助手功能需要与.env中的键匹配。

  

sms_from 选项是发送SMS消息的电话号码。您应该在Nexmo控制面板中为您的应用程序生成一个电话号码。

将您的nexmo api密钥和nexmo机密添加到您的.env文件中

NEXMO_KEY=your-nexmo-api-key
NEXMO_SECRET=nexmo-secret

您现在应该设置为使用nexmo发送短信。


下一步,请确保您的User模型已设置为发送通知

为此,请确保是否使用了Illuminate\Notifications\Notifiable特征,例如

use Illuminate\Notifications\Notifiable; // <--This bit

...

class User extends Authenticatable
{
    use Notifiable; // <-- and this bit

...

然后将以下内容也添加到您的User模型中:

public function routeNotificationForNexmo($notification)
{
    return $this->phone;
}

这将使通知系统知道要为用户使用的电话号码。

最后,创建一个新的通知类

php artisan make:notification CustomSmsNotification

转到课程(app/Notifications/CustomSmsNotification.php)并将其更改为以下内容:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\NexmoMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class CustomSmsNotification extends Notification
{
    use Queueable;

    /**
     * The message to send.
     *
     * @var string
     */
    public $message;

    /**
     * Create a new notification instance.
     *
     * @param $message
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['nexmo'];
    }

    /**
     * Get the Nexmo / SMS representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return NexmoMessage
     */
    public function toNexmo($notifiable)
    {
        return (new NexmoMessage)->content($this->message);
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

您的控制器方法类似于:

public function sendMsg(Request $request)
{
    \Notification::send(User::all(), new CustomSmsNotification($request->input('message')));
}