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
|
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": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Javier Hernández Gil",
|
"name": "Javi Hernández Gil",
|
||||||
"homepage": "https://github.com/javihernandezgil/nexmo-bundle"
|
"homepage": "https://github.com/javihernandezgil/nexmo-bundle"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in New Issue
Block a user