SMS send service and command

This commit is contained in:
Javier Hernández Gil 2013-12-09 20:29:26 +01:00
parent 485caf0c83
commit c9ad5c208a
8 changed files with 207 additions and 2 deletions

View File

@ -0,0 +1,53 @@
<?php
namespace Jhg\NexmoBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @author Javi Hernández Gil <bilbo@deverbena.com>
*/
class SmsSendCommand extends ContainerAwareCommand
{
/**
* @see Command
*/
protected function configure()
{
$this
->setName('nexmo:sms:send')
->setDescription('Send a SMS message')
->setDefinition(array(
new InputArgument('number', InputArgument::REQUIRED, 'The number'),
new InputArgument('fromName', InputArgument::REQUIRED, 'The name shown as origin'),
new InputArgument('message', InputArgument::REQUIRED, 'The message'),
))
->setHelp(<<<EOT
The <info>nexmo:sms:send</info> command sends a SMS message through Nexmo API
<info>php app/console nexmo:sms:send +34666555444 MyApp "Hello World!!"</info>
EOT
);
}
/**
* @see Command
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$number = $input->getArgument('number');
$fromName = $input->getArgument('fromName');
$message = $input->getArgument('message');
$sender = $this->getContainer()->get('jhg_nexmo_sms.sms.sender');
if($sender->send($number,$fromName,$message,null,0)) {
$output->writeln(sprintf('SMS send to %u from %s: "%s"',$number,$fromName,$message));
} else {
$output->writeln(sprintf('There was an error sending SMS to %u from %s: "%s"',$number,$fromName,$message));
}
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace Jhg\NexmoBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* This is the class that validates and merges configuration from your app/config files
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
*/
class Configuration implements ConfigurationInterface
{
/**
* {@inheritDoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('jhg_nexmo');
// Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for
// more information on that topic.
$rootNode
->children()
->scalarNode('api_key')->end()
->scalarNode('api_secret')->end()
->scalarNode('from_name')->end()
->booleanNode('disable_delivery')->end()
->end()
;
return $treeBuilder;
}
}

View File

@ -0,0 +1,56 @@
<?php
namespace Jhg\NexmoBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class JhgNexmoExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
if (!isset($config['api_key'])) {
throw new \InvalidArgumentException('The "api_key" option must be set for JhgNexmoBundle');
}
if (!isset($config['api_secret'])) {
throw new \InvalidArgumentException('The "api_secret" option must be set for JhgNexmoBundle');
}
$container->setParameter('jhg_nexmo.api_key', $config['api_key']);
$container->setParameter('jhg_nexmo.api_secret', $config['api_secret']);
if(isset($config['disable_delivery'])) {
$container->setParameter('jhg_nexmo.disable_delivery', $config['disable_delivery']);
}
if(isset($config['from_name'])) {
if (strlen($config['from_name'])>11) {
throw new \InvalidArgumentException('The "jhg_nexmo.from_name" option can not be larger than 11 characters');
}
if (!preg_match('/^[0-9a-z]{11}$/i', $config['from_name'])) {
throw new \InvalidArgumentException('The "jhg_nexmo.from_name" option only have alphanumeric characters');
}
$container->setParameter('jhg_nexmo.from_name', $config['from_name']);
} else {
$container->setParameter('jhg_nexmo.from_name', 'MyAppName');
}
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}

13
JhgNexmoBundle.php Normal file
View File

@ -0,0 +1,13 @@
<?php
namespace Jhg\NexmoBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
/**
* Bundle.
* @author Javi Hernández Gil <bilbo@deverbena.com>
*/
class JhgNexmoBundle extends Bundle
{
}

View File

@ -1,4 +1,7 @@
nexmo-bundle
============
Integrates Nexmo libs in Symfony2
Integrates Nexmo libs in Symfon2
Reference
---------
https://docs.nexmo.com/index.php/messaging-sms-api/send-message

View File

@ -0,0 +1,6 @@
parameters:
services:
jhg_nexmo.sms.sender:
class: Jhg\NexmoBundle\Sender\SmsSender
arguments: [@service_container]

36
Sender/SmsSender.php Normal file
View File

@ -0,0 +1,36 @@
<?php
namespace Jhg\NexmoBundle\Sender;
use Nexmo\NexmoMessage;
use Symfony\Component\DependencyInjection\Container;
class SmsSender
{
/**
* @var Container
*/
protected $container;
/**
* @var NexmoMessage
*/
protected $nexmoMessage;
public function __construct( Container $container) {
$this->container = $container;
$api_key = $this->container->getParameter('jhg_nexmo.api_key');
$api_secret = $this->container->getParameter('jhg_nexmo.api_secret');
$this->nexmoMessage = new NexmoMessage($api_key, $api_secret);
}
public function send($number,$fromName=null,$message,$unicode=null, $status_report_req=0) {
if($fromName===null)
$fromName = $this->container->getParameter('jhg_nexmo.from_name');
return $this->nexmoMessage->sendText($number,$fromName,$message,$unicode,$status_report_req);
}
}

View File

@ -7,7 +7,7 @@
"authors": [
{
"name": "Javier Hernández Gil",
"name": "Javi Hernández Gil",
"homepage": "https://github.com/javihernandezgil/nexmo-bundle"
}
],