/nexmo-laravel

Add Vonage functionality such as SMS and voice calling to your Laravel app with this Laravel Service Provider.

Primary LanguagePHPMIT LicenseMIT

THIS PACKAGE IS DEPRECATED We have moved to: https://github.com/Vonage/vonage-laravel, so please raise any new issues or Pull Requests in this repository.

Nexmo Package for Laravel

Latest Stable Version Latest Unstable Version License Total Downloads

Nexmo is now known as Vonage

Introduction

This is a simple Laravel Service Provider providing access to the Nexmo PHP Client Library.

Installation

To install the PHP client library using Composer:

composer require nexmo/laravel

Alternatively, add these two lines to your composer require section:

{
    "require": {
        "nexmo/laravel": "^2.0"
    }
}

Laravel 5.5+

If you're using Laravel 5.5 or above, the package will automatically register the Nexmo provider and facade.

Laravel 5.4 and below

Add Nexmo\Laravel\NexmoServiceProvider to the providers array in your config/app.php:

'providers' => [
    // Other service providers...

    Nexmo\Laravel\NexmoServiceProvider::class,
],

If you want to use the facade interface, you can use the facade class when needed:

use Nexmo\Laravel\Facade\Nexmo;

Or add an alias in your config/app.php:

'aliases' => [
    ...
    'Nexmo' => Nexmo\Laravel\Facade\Nexmo::class,
],

Using Nexmo-Laravel with Lumen

Nexmo-Laravel works with Lumen too! You'll need to do a little work by hand to get it up and running. First, install the package using composer:

composer require nexmo/laravel

Next, we have to tell Lumen that our library exists. Update bootstrap/app.php and register the NexmoServiceProvider:

$app->register(Nexmo\Laravel\NexmoServiceProvider::class);

Finally, we need to configure the library. Unfortunately Lumen doesn't support auto-publishing files so you'll have to create the config file yourself by creating a config directory and copying the config file out of the package in to your project:

mkdir config
cp vendor/nexmo/laravel/config/nexmo.php config/nexmo.php

At this point, set NEXMO_KEY and NEXMO_SECRET in your .env file and it should be working for you. You can test this with the following route:

$router->get('/', function () use ($router) {
    app(Nexmo\Client::class);
});

Dealing with Guzzle Client issues

By default, this package uses nexmo/client, which includes a Guzzle adapter for accessing the API. Some other libraries supply their own Guzzle adapter, leading to composer not being able to resolve a list of dependencies. You may get an error when adding nexmo/laravel to your application because of this.

The Nexmo client allows you to override the HTTP adapter that is being used. This takes a bit more configuration, but this package allows you to use nexmo/client-core to supply your own HTTP adapter.

To do this:

  1. composer require nexmo/client-core to install the Core SDK

  2. Install your own httplug-compatible adapter. For example, to use Symfony's HTTP Client:

    1. composer require symfony/http-client php-http/message-factory php-http/httplug nyholm/psr7
  3. composer require nexmo/laravel to install this package

  4. In your .env file, add the following configuration:

    NEXMO_HTTP_CLIENT="Symfony\\Component\\HttpClient\\HttplugClient"

You can now pull the Nexmo\Client object from the Laravel Service Container, or use the Facade provided by this package.

Configuration

You can use artisan vendor:publish to copy the distribution configuration file to your app's config directory:

php artisan vendor:publish

Then update config/nexmo.php with your credentials. Alternatively, you can update your .env file with the following:

NEXMO_KEY=my_api_key
NEXMO_SECRET=my_secret

Optionally, you could also set an application_id and private_key if required:

NEXMO_APPLICATION_ID=my_application_id
NEXMO_PRIVATE_KEY=./private.key

Private keys can either be a path to a file, like above, or the string of the key itself:

NEXMO_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n[...]\n-----END PRIVATE KEY-----\n"
NEXMO_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY-----
"

Usage

To use the Nexmo Client Library you can use the facade, or request the instance from the service container:

Nexmo::message()->send([
    'to'   => '14845551244',
    'from' => '16105552344',
    'text' => 'Using the facade to send a message.'
]);

Or

$nexmo = app('Nexmo\Client');

$nexmo->message()->send([
    'to'   => '14845551244',
    'from' => '16105552344',
    'text' => 'Using the instance to send a message.'
]);

If you're using private key authentication, try making a voice call:

Nexmo::calls()->create([
    'to' => [[
        'type' => 'phone',
        'number' => '14155550100'
    ]],
    'from' => [
        'type' => 'phone',
        'number' => '14155550101'
    ],
    'answer_url' => ['https://example.com/webhook/answer'],
    'event_url' => ['https://example.com/webhook/event']
]);

For more information on using the Nexmo client library, see the official client library repository.