SMS send service and command
This commit is contained in:
parent
485caf0c83
commit
c9ad5c208a
53
Command/SmsSendCommand.php
Normal file
53
Command/SmsSendCommand.php
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
38
DependencyInjection/Configuration.php
Normal file
38
DependencyInjection/Configuration.php
Normal 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;
|
||||
}
|
||||
}
|
56
DependencyInjection/JhgNexmoExtension.php
Normal file
56
DependencyInjection/JhgNexmoExtension.php
Normal 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
13
JhgNexmoBundle.php
Normal 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
|
||||
{
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
6
Resources/config/services.yml
Normal file
6
Resources/config/services.yml
Normal 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
36
Sender/SmsSender.php
Normal 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);
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
"authors": [
|
||||
{
|
||||
"name": "Javier Hernández Gil",
|
||||
"name": "Javi Hernández Gil",
|
||||
"homepage": "https://github.com/javihernandezgil/nexmo-bundle"
|
||||
}
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue
Block a user