diff --git a/src/Request/Request.php b/src/Request/Request.php index d06a15b..3f7d928 100644 --- a/src/Request/Request.php +++ b/src/Request/Request.php @@ -23,6 +23,8 @@ use D3\LinkmobilityClient\RecipientsList\RecipientsListInterface; use D3\LinkmobilityClient\Response\ResponseInterface; use D3\LinkmobilityClient\ValueObject\Recipient; use D3\LinkmobilityClient\ValueObject\Sender; +use D3\LinkmobilityClient\ValueObject\SmsMessageAbstract; +use D3\LinkmobilityClient\ValueObject\SmsMessageInterface; use D3\LinkmobilityClient\ValueObject\StringValueObject; use GuzzleHttp\RequestOptions; use InvalidArgumentException; @@ -30,7 +32,7 @@ use InvalidArgumentException; abstract class Request implements RequestInterface { /** - * @var StringValueObject + * @var SmsMessageInterface */ private $message; @@ -105,9 +107,9 @@ abstract class Request implements RequestInterface private $maxSmsPerMessage = 0; /** - * @param StringValueObject $message + * @param SmsMessageAbstract $message */ - public function __construct(StringValueObject $message) + public function __construct(SmsMessageInterface $message) { $this->recipientsList = new RecipientsList(); $this->setMessage( $message ); @@ -148,9 +150,7 @@ abstract class Request implements RequestInterface return [ 'clientMessageId' => $this->getClientMessageId(), 'contentCategory' => $this->getContentCategory(), - 'maxSmsPerMessage' => $this->getMaxSmsPerMessage(), - 'messageContent' => (string) $this->getMessage(), - 'messageType' => $this->getMessageType(), + 'messageContent' => $this->getMessage()->getMessageContent(), 'notificationCallbackUrl' => $this->getNotificationCallbackUrl(), 'priority' => $this->getPriority(), 'recipientAddressList' => $this->getRecipientsList()->getRecipients(), @@ -201,7 +201,7 @@ abstract class Request implements RequestInterface return $this; } - public function getMessage(): StringValueObject + public function getMessage(): SmsMessageInterface { return $this->message; } diff --git a/src/SMS/BinaryRequest.php b/src/SMS/BinaryRequest.php new file mode 100644 index 0000000..d7fc105 --- /dev/null +++ b/src/SMS/BinaryRequest.php @@ -0,0 +1,59 @@ + + * @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; + } +} \ No newline at end of file diff --git a/src/SMS/RequestFactory.php b/src/SMS/RequestFactory.php new file mode 100644 index 0000000..2b3d872 --- /dev/null +++ b/src/SMS/RequestFactory.php @@ -0,0 +1,57 @@ + + * @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); + } +} \ No newline at end of file diff --git a/src/SMS/Request.php b/src/SMS/RequestFactoryInterface.php similarity index 59% rename from src/SMS/Request.php rename to src/SMS/RequestFactoryInterface.php index cef6561..326e9cd 100644 --- a/src/SMS/Request.php +++ b/src/SMS/RequestFactoryInterface.php @@ -13,24 +13,15 @@ * @link http://www.oxidmodule.com */ +declare( strict_types = 1 ); + namespace D3\LinkmobilityClient\SMS; -use D3\LinkmobilityClient\ValueObject\Sender; use D3\LinkmobilityClient\ValueObject\SmsMessage; -class Request +interface RequestFactoryInterface { - public function __construct( Sender $sender, SmsMessage $message) - { - // use factory pattern + public function __construct(SmsMessage $message); - //$this = new TextRequest($sender, $message); - /* - if ($message->isGsm7()) { - return new TextRequest($sender, $message); - } - - return new TextRequest($sender, $message); - */ - } + public function getRequest() : SmsRequestInterface; } \ No newline at end of file diff --git a/src/SMS/SmsRequestInterface.php b/src/SMS/SmsRequestInterface.php new file mode 100644 index 0000000..5c1a55b --- /dev/null +++ b/src/SMS/SmsRequestInterface.php @@ -0,0 +1,23 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\LinkmobilityClient\SMS; + +use D3\LinkmobilityClient\ValueObject\SmsMessageInterface; + +interface SmsRequestInterface +{ + public function __construct(SmsMessageInterface $message); +} \ No newline at end of file diff --git a/src/SMS/TextRequest.php b/src/SMS/TextRequest.php index a915c4d..0e50283 100644 --- a/src/SMS/TextRequest.php +++ b/src/SMS/TextRequest.php @@ -18,9 +18,11 @@ declare( strict_types = 1 ); namespace D3\LinkmobilityClient\SMS; 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 @@ -34,7 +36,7 @@ class TextRequest extends \D3\LinkmobilityClient\Request\Request { 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; } + + public function getRawBody() : array + { + return array_merge( + parent::getRawBody(), + [ + 'maxSmsPerMessage' => $this->getMaxSmsPerMessage(), + 'messageType' => $this->getMessageType(), + ] + ); + } } \ No newline at end of file diff --git a/src/ValueObject/SmsBinaryMessage.php b/src/ValueObject/SmsBinaryMessage.php new file mode 100644 index 0000000..6749f50 --- /dev/null +++ b/src/ValueObject/SmsBinaryMessage.php @@ -0,0 +1,29 @@ +value); + $smsLength->validate(); + } + + public function getMessageContent() + { + return str_split( + base64_encode($this->value), + SmsLength::MAXIMUM_CHARACTERS_UCS2_SINGLE + ); + } +} diff --git a/src/ValueObject/SmsMessage.php b/src/ValueObject/SmsMessage.php deleted file mode 100644 index 6cc4a4e..0000000 --- a/src/ValueObject/SmsMessage.php +++ /dev/null @@ -1,56 +0,0 @@ -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(); - } -} diff --git a/src/ValueObject/SmsMessageAbstract.php b/src/ValueObject/SmsMessageAbstract.php new file mode 100644 index 0000000..6e65208 --- /dev/null +++ b/src/ValueObject/SmsMessageAbstract.php @@ -0,0 +1,33 @@ +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; + } +} diff --git a/src/ValueObject/SmsMessageInterface.php b/src/ValueObject/SmsMessageInterface.php new file mode 100644 index 0000000..34e927a --- /dev/null +++ b/src/ValueObject/SmsMessageInterface.php @@ -0,0 +1,25 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\LinkmobilityClient\ValueObject; + +interface SmsMessageInterface +{ + public function chunkCount() : int; + + public function length() : int; + + public function getMessageContent(); +} \ No newline at end of file diff --git a/src/ValueObject/SmsTextMessage.php b/src/ValueObject/SmsTextMessage.php new file mode 100644 index 0000000..19d917f --- /dev/null +++ b/src/ValueObject/SmsTextMessage.php @@ -0,0 +1,21 @@ +value); + $smsLength->validate(); + } +}