make compatible between different SMS types
This commit is contained in:
parent
fae19607c2
commit
6854f12e13
@ -23,6 +23,8 @@ use D3\LinkmobilityClient\RecipientsList\RecipientsListInterface;
|
|||||||
use D3\LinkmobilityClient\Response\ResponseInterface;
|
use D3\LinkmobilityClient\Response\ResponseInterface;
|
||||||
use D3\LinkmobilityClient\ValueObject\Recipient;
|
use D3\LinkmobilityClient\ValueObject\Recipient;
|
||||||
use D3\LinkmobilityClient\ValueObject\Sender;
|
use D3\LinkmobilityClient\ValueObject\Sender;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsMessageAbstract;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
|
||||||
use D3\LinkmobilityClient\ValueObject\StringValueObject;
|
use D3\LinkmobilityClient\ValueObject\StringValueObject;
|
||||||
use GuzzleHttp\RequestOptions;
|
use GuzzleHttp\RequestOptions;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
@ -30,7 +32,7 @@ use InvalidArgumentException;
|
|||||||
abstract class Request implements RequestInterface
|
abstract class Request implements RequestInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var StringValueObject
|
* @var SmsMessageInterface
|
||||||
*/
|
*/
|
||||||
private $message;
|
private $message;
|
||||||
|
|
||||||
@ -105,9 +107,9 @@ abstract class Request implements RequestInterface
|
|||||||
private $maxSmsPerMessage = 0;
|
private $maxSmsPerMessage = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param StringValueObject $message
|
* @param SmsMessageAbstract $message
|
||||||
*/
|
*/
|
||||||
public function __construct(StringValueObject $message)
|
public function __construct(SmsMessageInterface $message)
|
||||||
{
|
{
|
||||||
$this->recipientsList = new RecipientsList();
|
$this->recipientsList = new RecipientsList();
|
||||||
$this->setMessage( $message );
|
$this->setMessage( $message );
|
||||||
@ -148,9 +150,7 @@ abstract class Request implements RequestInterface
|
|||||||
return [
|
return [
|
||||||
'clientMessageId' => $this->getClientMessageId(),
|
'clientMessageId' => $this->getClientMessageId(),
|
||||||
'contentCategory' => $this->getContentCategory(),
|
'contentCategory' => $this->getContentCategory(),
|
||||||
'maxSmsPerMessage' => $this->getMaxSmsPerMessage(),
|
'messageContent' => $this->getMessage()->getMessageContent(),
|
||||||
'messageContent' => (string) $this->getMessage(),
|
|
||||||
'messageType' => $this->getMessageType(),
|
|
||||||
'notificationCallbackUrl' => $this->getNotificationCallbackUrl(),
|
'notificationCallbackUrl' => $this->getNotificationCallbackUrl(),
|
||||||
'priority' => $this->getPriority(),
|
'priority' => $this->getPriority(),
|
||||||
'recipientAddressList' => $this->getRecipientsList()->getRecipients(),
|
'recipientAddressList' => $this->getRecipientsList()->getRecipients(),
|
||||||
@ -201,7 +201,7 @@ abstract class Request implements RequestInterface
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMessage(): StringValueObject
|
public function getMessage(): SmsMessageInterface
|
||||||
{
|
{
|
||||||
return $this->message;
|
return $this->message;
|
||||||
}
|
}
|
||||||
|
59
src/SMS/BinaryRequest.php
Normal file
59
src/SMS/BinaryRequest.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare( strict_types = 1 );
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\SMS;
|
||||||
|
|
||||||
|
use Assert\Assert;
|
||||||
|
use D3\LinkmobilityClient\Request\Request;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsBinaryMessage;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsMessage;
|
||||||
|
|
||||||
|
class BinaryRequest extends Request implements SmsRequestInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getUri(): string
|
||||||
|
{
|
||||||
|
return '/rest/smsmessaging/binary';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRawBody() : array
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::getRawBody(),
|
||||||
|
[
|
||||||
|
'userDataHeaderPresent' => true
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validate()
|
||||||
|
{
|
||||||
|
parent::validate();
|
||||||
|
|
||||||
|
Assert::thatNullOr( $this->getMessage() )->isInstanceOf(SmsBinaryMessage::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getResponseClass(): string
|
||||||
|
{
|
||||||
|
return Response::class;
|
||||||
|
}
|
||||||
|
}
|
57
src/SMS/RequestFactory.php
Normal file
57
src/SMS/RequestFactory.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare( strict_types = 1 );
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\SMS;
|
||||||
|
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsBinaryMessage;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsTextMessage;
|
||||||
|
use Phlib\SmsLength\SmsLength;
|
||||||
|
|
||||||
|
class RequestFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @deprecated is SmsLength constant from version 2.1
|
||||||
|
*/
|
||||||
|
const GSM_7BIT = '7-bit';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated is SmsLength constant from version 2.1
|
||||||
|
*/
|
||||||
|
const GSM_UCS2 = 'ucs-2';
|
||||||
|
|
||||||
|
private $message;
|
||||||
|
|
||||||
|
public function __construct($message)
|
||||||
|
{
|
||||||
|
$this->message = $message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return SmsRequestInterface
|
||||||
|
*/
|
||||||
|
public function getRequest() : SmsRequestInterface
|
||||||
|
{
|
||||||
|
$smsLength = new SmsLength($this->message);
|
||||||
|
if ($smsLength->getEncoding() === self::GSM_7BIT) {
|
||||||
|
$message = new SmsTextMessage($this->message);
|
||||||
|
return new TextRequest($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = new SmsBinaryMessage($this->message);
|
||||||
|
return new BinaryRequest($message);
|
||||||
|
}
|
||||||
|
}
|
@ -13,24 +13,15 @@
|
|||||||
* @link http://www.oxidmodule.com
|
* @link http://www.oxidmodule.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
declare( strict_types = 1 );
|
||||||
|
|
||||||
namespace D3\LinkmobilityClient\SMS;
|
namespace D3\LinkmobilityClient\SMS;
|
||||||
|
|
||||||
use D3\LinkmobilityClient\ValueObject\Sender;
|
|
||||||
use D3\LinkmobilityClient\ValueObject\SmsMessage;
|
use D3\LinkmobilityClient\ValueObject\SmsMessage;
|
||||||
|
|
||||||
class Request
|
interface RequestFactoryInterface
|
||||||
{
|
{
|
||||||
public function __construct( Sender $sender, SmsMessage $message)
|
public function __construct(SmsMessage $message);
|
||||||
{
|
|
||||||
// use factory pattern
|
|
||||||
|
|
||||||
//$this = new TextRequest($sender, $message);
|
public function getRequest() : SmsRequestInterface;
|
||||||
/*
|
|
||||||
if ($message->isGsm7()) {
|
|
||||||
return new TextRequest($sender, $message);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new TextRequest($sender, $message);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
}
|
23
src/SMS/SmsRequestInterface.php
Normal file
23
src/SMS/SmsRequestInterface.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\SMS;
|
||||||
|
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
|
||||||
|
|
||||||
|
interface SmsRequestInterface
|
||||||
|
{
|
||||||
|
public function __construct(SmsMessageInterface $message);
|
||||||
|
}
|
@ -18,9 +18,11 @@ declare( strict_types = 1 );
|
|||||||
namespace D3\LinkmobilityClient\SMS;
|
namespace D3\LinkmobilityClient\SMS;
|
||||||
|
|
||||||
use Assert\Assert;
|
use Assert\Assert;
|
||||||
use D3\LinkmobilityClient\ValueObject\SmsMessage;
|
use D3\LinkmobilityClient\Request\Request;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsMessageInterface;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\SmsTextMessage;
|
||||||
|
|
||||||
class TextRequest extends \D3\LinkmobilityClient\Request\Request
|
class TextRequest extends Request implements SmsRequestInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
@ -34,7 +36,7 @@ class TextRequest extends \D3\LinkmobilityClient\Request\Request
|
|||||||
{
|
{
|
||||||
parent::validate();
|
parent::validate();
|
||||||
|
|
||||||
Assert::thatNullOr( $this->getMessage() )->isInstanceOf(SmsMessage::class);
|
Assert::thatNullOr( $this->getMessage() )->isInstanceOf(SmsTextMessage::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,4 +46,15 @@ class TextRequest extends \D3\LinkmobilityClient\Request\Request
|
|||||||
{
|
{
|
||||||
return Response::class;
|
return Response::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getRawBody() : array
|
||||||
|
{
|
||||||
|
return array_merge(
|
||||||
|
parent::getRawBody(),
|
||||||
|
[
|
||||||
|
'maxSmsPerMessage' => $this->getMaxSmsPerMessage(),
|
||||||
|
'messageType' => $this->getMessageType(),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
29
src/ValueObject/SmsBinaryMessage.php
Normal file
29
src/ValueObject/SmsBinaryMessage.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\ValueObject;
|
||||||
|
|
||||||
|
use Phlib\SmsLength\SmsLength;
|
||||||
|
|
||||||
|
class SmsBinaryMessage extends SmsMessageAbstract
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $message
|
||||||
|
*/
|
||||||
|
public function __construct(string $message)
|
||||||
|
{
|
||||||
|
parent::__construct( $message);
|
||||||
|
|
||||||
|
$smsLength = new SmsLength($this->value);
|
||||||
|
$smsLength->validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMessageContent()
|
||||||
|
{
|
||||||
|
return str_split(
|
||||||
|
base64_encode($this->value),
|
||||||
|
SmsLength::MAXIMUM_CHARACTERS_UCS2_SINGLE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,56 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\LinkmobilityClient\ValueObject;
|
|
||||||
|
|
||||||
use Phlib\SmsLength\SmsLength;
|
|
||||||
|
|
||||||
class SmsMessage extends StringValueObject
|
|
||||||
{
|
|
||||||
const GSM_7BIT = '7-bit';
|
|
||||||
const GSM_UCS2 = 'ucs-2';
|
|
||||||
|
|
||||||
public function __construct(string $number)
|
|
||||||
{
|
|
||||||
parent::__construct( $number);
|
|
||||||
|
|
||||||
$smsLength = new SmsLength($this->value);
|
|
||||||
$smsLength->validate();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var bool
|
|
||||||
*/
|
|
||||||
private $gsm7;
|
|
||||||
|
|
||||||
public function chunkCount() : int
|
|
||||||
{
|
|
||||||
$smsLength = new SmsLength($this->value);
|
|
||||||
return $smsLength->getMessageCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function length() : int
|
|
||||||
{
|
|
||||||
$smsLength = new SmsLength($this->value);
|
|
||||||
return $smsLength->getSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isGsm7() : bool
|
|
||||||
{
|
|
||||||
$smsLength = new SmsLength($this->value);
|
|
||||||
if (is_null($this->gsm7)) {
|
|
||||||
$this->gsm7 = $smsLength->getEncoding() === self::GSM_7BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->gsm7;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isUnicode() : bool
|
|
||||||
{
|
|
||||||
return !$this->isGsm7();
|
|
||||||
}
|
|
||||||
}
|
|
33
src/ValueObject/SmsMessageAbstract.php
Normal file
33
src/ValueObject/SmsMessageAbstract.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\ValueObject;
|
||||||
|
|
||||||
|
use Phlib\SmsLength\SmsLength;
|
||||||
|
|
||||||
|
abstract class SmsMessageAbstract extends StringValueObject implements SmsMessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function chunkCount() : int
|
||||||
|
{
|
||||||
|
$smsLength = new SmsLength($this->value);
|
||||||
|
return $smsLength->getMessageCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function length() : int
|
||||||
|
{
|
||||||
|
$smsLength = new SmsLength($this->value);
|
||||||
|
return $smsLength->getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMessageContent()
|
||||||
|
{
|
||||||
|
return (string) $this->value;
|
||||||
|
}
|
||||||
|
}
|
25
src/ValueObject/SmsMessageInterface.php
Normal file
25
src/ValueObject/SmsMessageInterface.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\ValueObject;
|
||||||
|
|
||||||
|
interface SmsMessageInterface
|
||||||
|
{
|
||||||
|
public function chunkCount() : int;
|
||||||
|
|
||||||
|
public function length() : int;
|
||||||
|
|
||||||
|
public function getMessageContent();
|
||||||
|
}
|
21
src/ValueObject/SmsTextMessage.php
Normal file
21
src/ValueObject/SmsTextMessage.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace D3\LinkmobilityClient\ValueObject;
|
||||||
|
|
||||||
|
use Phlib\SmsLength\SmsLength;
|
||||||
|
|
||||||
|
class SmsTextMessage extends SmsMessageAbstract
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $message
|
||||||
|
*/
|
||||||
|
public function __construct(string $message)
|
||||||
|
{
|
||||||
|
parent::__construct( $message);
|
||||||
|
|
||||||
|
$smsLength = new SmsLength($this->value);
|
||||||
|
$smsLength->validate();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user