diff --git a/src/Client.php b/src/Client.php index a143464..5e65c03 100644 --- a/src/Client.php +++ b/src/Client.php @@ -3,29 +3,41 @@ namespace BlueMedia; +use BlueMedia\Common\Builder\ServiceDtoBuilder; +use BlueMedia\Common\Enum\ClientEnum; +use BlueMedia\Common\Parser\ServiceResponseParser; +use BlueMedia\Common\Util\EnvironmentRequirements; use BlueMedia\Confirmation\Builder\ConfirmationVOBuilder; -use BlueMedia\HttpClient\HttpClientInterface; use BlueMedia\Hash\HashChecker; +use BlueMedia\HttpClient\HttpClient; +use BlueMedia\HttpClient\HttpClientInterface; +use BlueMedia\HttpClient\ValueObject\Request; +use BlueMedia\HttpClient\ValueObject\Response; +use BlueMedia\Itn\Builder\ItnDtoBuilder; +use BlueMedia\Itn\Builder\ItnResponseBuilder; use BlueMedia\Itn\Builder\ItnVOBuilder; use BlueMedia\Itn\Decoder\ItnDecoder; -use BlueMedia\Serializer\SerializableInterface; -use BlueMedia\Transaction\View; use BlueMedia\Itn\ValueObject\Itn; -use BlueMedia\HttpClient\HttpClient; -use BlueMedia\Common\Enum\ClientEnum; -use BlueMedia\Itn\Builder\ItnDtoBuilder; use BlueMedia\PaywayList\Dto\PaywayListDto; -use BlueMedia\Itn\Builder\ItnResponseBuilder; -use BlueMedia\HttpClient\ValueObject\Request; -use BlueMedia\HttpClient\ValueObject\Response; -use BlueMedia\Common\Builder\ServiceDtoBuilder; -use BlueMedia\Common\Parser\ServiceResponseParser; -use BlueMedia\Common\Util\EnvironmentRequirements; +use BlueMedia\PaywayList\ValueObject\PaywayListResponse\PaywayListResponse; +use BlueMedia\Recurring\Builder\RecurringDtoBuilder; +use BlueMedia\Recurring\Parser\RecurringResponseParser; use BlueMedia\RegulationList\Dto\RegulationListDto; +use BlueMedia\RegulationList\ValueObject\RegulationListResponse\RegulationListResponse; +use BlueMedia\Rpan\Builder\RpanBuilder; +use BlueMedia\Rpan\Builder\RpanDtoBuilder; +use BlueMedia\Rpan\Builder\RpanVOBuilder; +use BlueMedia\Rpan\Decoder\RpanDecoder; +use BlueMedia\Rpan\ValueObject\Rpan; +use BlueMedia\Rpdn\Builder\RpdnBuilder; +use BlueMedia\Rpdn\Builder\RpdnDtoBuilder; +use BlueMedia\Rpdn\Builder\RpdnVOBuilder; +use BlueMedia\Rpdn\Decoder\RpdnDecoder; +use BlueMedia\Rpdn\ValueObject\Rpdn; +use BlueMedia\Serializer\SerializableInterface; use BlueMedia\Transaction\Builder\TransactionDtoBuilder; use BlueMedia\Transaction\Parser\TransactionResponseParser; -use BlueMedia\PaywayList\ValueObject\PaywayListResponse\PaywayListResponse; -use BlueMedia\RegulationList\ValueObject\RegulationListResponse\RegulationListResponse; +use BlueMedia\Transaction\View; final class Client { @@ -117,6 +129,30 @@ public function doTransactionInit(array $transactionData): Response return $parser->parse(true); } + /** + * Initialize deactivation recurring. + * Returns recurring information. + * + * @param array $transactionData + * + * @return Response + * @api + */ + public function doRecurringDeactivationInit(array $recurringData): Response + { + $recurringData['recurringDeactivation']['messageID'] = bin2hex(random_bytes(ClientEnum::MESSAGE_ID_LENGTH)); + $recurringDeactivationDto = RecurringDtoBuilder::build($recurringData, $this->configuration); + + $recurringDeactivationDto->setRequest(new Request( + $recurringDeactivationDto->getGatewayUrl() . ClientEnum::DEACTIVATE_RECURRING_ROUTE, + [self::HEADER => self::CONTINUE_HEADER] + )); + + $parser = new RecurringResponseParser($this->httpClient->post($recurringDeactivationDto), $this->configuration); + + return $parser->parse(); + } + /** * Process ITN requests. * @@ -131,6 +167,34 @@ public function doItnIn(string $itn): Response return new Response($itnDto->getItn()); } + /** + * Process RPAN requests. + * + * @param string $rpan encoded with base64 + * @return Response + * @api + */ + public function doRpanIn(string $rpan): Response + { + $rpanDto = RpanDtoBuilder::build(RpanDecoder::decode($rpan)); + + return new Response($rpanDto->getRpan()); + } + + /** + * Process RPDN requests. + * + * @param string $rpdn encoded with base64 + * @return Response + * @api + */ + public function doRpdnIn(string $rpdn): Response + { + $rpdnDto = RpdnDtoBuilder::build(RpdnDecoder::decode($rpdn)); + + return new Response($rpdnDto->getRpdn()); + } + /** * Returns response for ITN IN request. * @@ -146,6 +210,36 @@ public function doItnInResponse(Itn $itn, bool $transactionConfirmed = true) return new Response(ItnResponseBuilder::build($itn, $transactionConfirmed, $this->configuration)); } + /** + * Returns response for RPAN IN request. + * + * @param Rpan $rpan + * @param bool $transactionConfirmed + * + * @return Response + * @api + * + */ + public function doRpanInResponse(Rpan $rpan, bool $transactionConfirmed = true) + { + return new Response(RpanBuilder::build($rpan, $transactionConfirmed, $this->configuration)); + } + + /** + * Returns response for RPDN IN request. + * + * @param Rpdn $rpdn + * @param bool $transactionConfirmed + * + * @return Response + * @api + * + */ + public function doRpdnInResponse(Rpdn $rpdn, bool $transactionConfirmed = true) + { + return new Response(RpdnBuilder::build($rpdn, $transactionConfirmed, $this->configuration)); + } + /** * Returns payway list. * @@ -240,4 +334,26 @@ public static function getItnObject(string $itn): Itn { return ItnVOBuilder::build(ItnDecoder::decode($itn)); } + + /** + * Method allows to get Rpan object from base64 + * + * @param string $rpan + * @return Rpan + */ + public static function getRpanObject(string $rpan): Rpan + { + return RpanVOBuilder::build(RpanDecoder::decode($rpan)); + } + + /** + * Method allows to get Rpdn object from base64 + * + * @param string $rpdn + * @return Rpdn + */ + public static function getRpdnObject(string $rpdn): Rpdn + { + return RpdnVOBuilder::build(RpdnDecoder::decode($rpdn)); + } } diff --git a/src/Common/Enum/ClientEnum.php b/src/Common/Enum/ClientEnum.php index 95e5c77..e3440d8 100644 --- a/src/Common/Enum/ClientEnum.php +++ b/src/Common/Enum/ClientEnum.php @@ -8,6 +8,7 @@ abstract class ClientEnum public const PAYMENT_ROUTE = '/payment'; public const PAYWAY_LIST_ROUTE = '/paywayList'; public const GET_REGULATIONS_ROUTE = '/webapi/regulationsGet'; + public const DEACTIVATE_RECURRING_ROUTE = '/deactivate_recurring'; public const STATUS_CONFIRMED = 'CONFIRMED'; public const STATUS_NOT_CONFIRMED = 'NOTCONFIRMED'; @@ -31,5 +32,6 @@ abstract class ClientEnum public const PATTERN_XML_ERROR = '@(.*)@Usi'; public const PATTERN_GENERAL_ERROR = '/error(.*)/si'; - public const MESSAGE_ID_LENGTH = 32; + // byte = 2 hex characters so 16 bytes = 32 char + public const MESSAGE_ID_LENGTH = 16; } diff --git a/src/Hash/HashGenerator.php b/src/Hash/HashGenerator.php index 0b102b7..1f7c03f 100644 --- a/src/Hash/HashGenerator.php +++ b/src/Hash/HashGenerator.php @@ -26,15 +26,29 @@ public static function generateHash(array $data, Configuration $configuration): } if (is_array($value)) { + $value = self::arrayValuesRecursive($value); $value = array_filter($value, 'mb_strlen'); $value = implode($configuration->getHashSeparator(), $value); } - $result .= $value.$configuration->getHashSeparator(); + $result .= $value . $configuration->getHashSeparator(); } $result .= $configuration->getSharedKey(); return hash($configuration->getHashAlgo(), $result); } + + private static function arrayValuesRecursive($value) + { + $flat = []; + foreach ($value as $item) { + if (is_array($item)) { + $flat = array_merge($flat, self::arrayValuesRecursive($item)); + } else { + $flat[] = $item; + } + } + return $flat; + } } diff --git a/src/Itn/ValueObject/CustomerData.php b/src/Itn/ValueObject/CustomerData.php new file mode 100644 index 0000000..d095b2c --- /dev/null +++ b/src/Itn/ValueObject/CustomerData.php @@ -0,0 +1,166 @@ +fName; + } + + /** + * @return string + */ + public function getLName(): string + { + return $this->lName; + } + + /** + * @return string + */ + public function getStreetName(): string + { + return $this->streetName; + } + + /** + * @return string + */ + public function getStreetHouseNo(): string + { + return $this->streetHouseNo; + } + + /** + * @return string + */ + public function getStreetStaircaseNo(): string + { + return $this->streetStaircaseNo; + } + + /** + * @return string + */ + public function getStreetPremiseNo(): string + { + return $this->streetPremiseNo; + } + + /** + * @return string + */ + public function getPostalCode(): string + { + return $this->postalCode; + } + + /** + * @return string + */ + public function getCity(): string + { + return $this->city; + } + + /** + * @return string + */ + public function getNrb(): string + { + return $this->nrb; + } + + /** + * @return string + */ + public function getSenderData(): string + { + return $this->senderData; + } +} diff --git a/src/Itn/ValueObject/Itn.php b/src/Itn/ValueObject/Itn.php index 38d9f48..5091a64 100644 --- a/src/Itn/ValueObject/Itn.php +++ b/src/Itn/ValueObject/Itn.php @@ -4,9 +4,9 @@ namespace BlueMedia\Itn\ValueObject; use BlueMedia\Common\ValueObject\AbstractValueObject; -use JMS\Serializer\Annotation\Type; -use JMS\Serializer\Annotation\AccessorOrder; use BlueMedia\Serializer\SerializableInterface; +use JMS\Serializer\Annotation\AccessorOrder; +use JMS\Serializer\Annotation\Type; /** * @AccessorOrder("custom", @@ -20,6 +20,7 @@ * "paymentDate", * "paymentStatus", * "paymentStatusDetails", + * "customerData", * "hash" * }) */ @@ -97,6 +98,12 @@ final class Itn extends AbstractValueObject implements SerializableInterface */ protected $paymentStatusDetails; + /** + * @var CustomerData + * @Type("BlueMedia\Itn\ValueObject\CustomerData") + */ + protected $customerData; + /** * Itn hash. * @@ -190,4 +197,12 @@ public function getPaymentStatusDetails(): string { return $this->paymentStatusDetails; } + + /** + * @return CustomerData + */ + public function getCustomerData(): CustomerData + { + return $this->customerData; + } } diff --git a/src/Recurring/Builder/RecurringDtoBuilder.php b/src/Recurring/Builder/RecurringDtoBuilder.php new file mode 100644 index 0000000..a5bcb94 --- /dev/null +++ b/src/Recurring/Builder/RecurringDtoBuilder.php @@ -0,0 +1,30 @@ +serializeDataToDto($transactionData, RecurringDeactivationDto::class); + $transactionDto->getRecurringDeactivation()->setServiceId($configuration->getServiceId()); + + $hash = HashGenerator::generateHash( + $transactionDto->getRecurringDeactivation()->capitalizedArray(), + $configuration + ); + + $transactionDto->getRecurringDeactivation()->setHash($hash); + + return $transactionDto; + } +} diff --git a/src/Recurring/Dto/RecurringDeactivationDto.php b/src/Recurring/Dto/RecurringDeactivationDto.php new file mode 100644 index 0000000..a3bdd03 --- /dev/null +++ b/src/Recurring/Dto/RecurringDeactivationDto.php @@ -0,0 +1,31 @@ +recurringDeactivation; + } + + public function getRequestData(): SerializableInterface + { + return $this->getRecurringDeactivation(); + } +} diff --git a/src/Recurring/Dto/RecurringDeactivationDtoInterface.php b/src/Recurring/Dto/RecurringDeactivationDtoInterface.php new file mode 100644 index 0000000..61e5474 --- /dev/null +++ b/src/Recurring/Dto/RecurringDeactivationDtoInterface.php @@ -0,0 +1,14 @@ +isErrorResponse(); + return new Response($this->parseRecurringDeactivationInitResponse()); + } + + private function parseRecurringDeactivationInitResponse(): SerializableInterface + { + $recurringDeactivation = (new Serializer())->deserializeXml($this->response, + RecurringDeactivationResponse::class); + + if (HashChecker::checkHash($recurringDeactivation, $this->configuration) === false) { + throw HashException::wrongHashError(); + } + + return $recurringDeactivation; + } +} diff --git a/src/Recurring/ValueObject/RecurringConfirmations.php b/src/Recurring/ValueObject/RecurringConfirmations.php new file mode 100644 index 0000000..817df77 --- /dev/null +++ b/src/Recurring/ValueObject/RecurringConfirmations.php @@ -0,0 +1,24 @@ +recurringConfirmed; + } +} diff --git a/src/Recurring/ValueObject/RecurringConfirmed.php b/src/Recurring/ValueObject/RecurringConfirmed.php new file mode 100644 index 0000000..c028d16 --- /dev/null +++ b/src/Recurring/ValueObject/RecurringConfirmed.php @@ -0,0 +1,65 @@ +clientHash; + } + + /** + * @return string + */ + public function getConfirmation(): string + { + return $this->confirmation; + } + + /** + * @return string + */ + public function getReason(): string + { + return $this->reason; + } + + +} diff --git a/src/Recurring/ValueObject/RecurringDeactivation.php b/src/Recurring/ValueObject/RecurringDeactivation.php new file mode 100644 index 0000000..acca10c --- /dev/null +++ b/src/Recurring/ValueObject/RecurringDeactivation.php @@ -0,0 +1,141 @@ +serviceID = $serviceID; + return $this; + } + + /** + * @return string + */ + public function getServiceID(): string + { + return $this->serviceID; + } + + /** + * @param string $hash + * @return RecurringDeactivation + */ + public function setHash(string $hash): RecurringDeactivation + { + $this->hash = $hash; + return $this; + } + + /** + * @return string + */ + public function getHash(): string + { + return trim($this->hash); + } + + /** + * @return string + */ + public function getMessageID(): string + { + return $this->messageID; + } + + /** + * @return string + */ + public function getClientHash(): string + { + return $this->clientHash; + } + + /** + * @return string + */ + public function getConfirmation(): string + { + return $this->confirmation; + } + + /** + * @return string + */ + public function getReason(): string + { + return $this->reason; + } + + +} diff --git a/src/Recurring/ValueObject/RecurringDeactivationResponse.php b/src/Recurring/ValueObject/RecurringDeactivationResponse.php new file mode 100644 index 0000000..9450262 --- /dev/null +++ b/src/Recurring/ValueObject/RecurringDeactivationResponse.php @@ -0,0 +1,89 @@ +serviceID; + } + + /** + * @return string + */ + public function getMessageID(): string + { + return $this->messageID; + } + + /** + * @return RecurringConfirmations + */ + public function getRecurringConfirmations(): RecurringConfirmations + { + return $this->recurringConfirmations; + } + + /** + * @return string + */ + public function getHash(): string + { + return $this->hash; + } + + public function toXml(): string + { + return (new Serializer())->toXml($this); + } +} diff --git a/src/Rpan/Builder/RpanBuilder.php b/src/Rpan/Builder/RpanBuilder.php new file mode 100644 index 0000000..3ba32eb --- /dev/null +++ b/src/Rpan/Builder/RpanBuilder.php @@ -0,0 +1,43 @@ + $configuration->getServiceId(), + 'clientHash' => $rpan->getRecurringData()->getClientHash(), + 'confirmation' => $confirmation + ]; + + $rpanResponseData = [ + 'serviceID' => $configuration->getServiceId(), + 'recurringConfirmations' => [ + 'recurringConfirmed' => [ + 'clientHash' => $rpan->getRecurringData()->getClientHash(), + 'confirmation' => $confirmation + ], + ], + 'hash' => HashGenerator::generateHash($hashData, $configuration) + ]; + + $serializer = new Serializer(); + + return $serializer->fromArray($rpanResponseData, RpanResponse::class); + } +} diff --git a/src/Rpan/Builder/RpanDtoBuilder.php b/src/Rpan/Builder/RpanDtoBuilder.php new file mode 100644 index 0000000..9c57669 --- /dev/null +++ b/src/Rpan/Builder/RpanDtoBuilder.php @@ -0,0 +1,27 @@ +asXML(); + + $itnDto = $serializer->deserializeXml($xmlTransaction, RpanDto::class); + + $itnDto->getRpan()->setServiceID((string)$xmlData->serviceID); + $itnDto->getRpan()->setHash((string)$xmlData->hash); + + return $itnDto; + } +} diff --git a/src/Rpan/Builder/RpanVOBuilder.php b/src/Rpan/Builder/RpanVOBuilder.php new file mode 100644 index 0000000..2578863 --- /dev/null +++ b/src/Rpan/Builder/RpanVOBuilder.php @@ -0,0 +1,20 @@ +asXML(); + + return (new Serializer())->deserializeXml($xmlTransaction, Rpan::class); + } +} diff --git a/src/Rpan/Decoder/RpanDecoder.php b/src/Rpan/Decoder/RpanDecoder.php new file mode 100644 index 0000000..b6b599a --- /dev/null +++ b/src/Rpan/Decoder/RpanDecoder.php @@ -0,0 +1,20 @@ +rpan; + } + + public function getRequestData(): SerializableInterface + { + return $this->getRpan(); + } +} diff --git a/src/Rpan/ValueObject/CardData.php b/src/Rpan/ValueObject/CardData.php new file mode 100644 index 0000000..2fe99d1 --- /dev/null +++ b/src/Rpan/ValueObject/CardData.php @@ -0,0 +1,106 @@ +index; + } + + /** + * @return string + */ + public function getValidityYear(): string + { + return $this->validityYear; + } + + /** + * @return string + */ + public function getValidityMonth(): string + { + return $this->validityMonth; + } + + /** + * @return string + */ + public function getIssuer(): string + { + return $this->issuer; + } + + /** + * @return string + */ + public function getBin(): string + { + return $this->bin; + } + + /** + * @return string + */ + public function getMask(): string + { + return $this->mask; + } +} diff --git a/src/Rpan/ValueObject/RecurringData.php b/src/Rpan/ValueObject/RecurringData.php new file mode 100644 index 0000000..93fff3f --- /dev/null +++ b/src/Rpan/ValueObject/RecurringData.php @@ -0,0 +1,61 @@ +recurringAction; + } + + /** + * @return string + */ + public function getClientHash(): string + { + return $this->clientHash; + } + + /** + * @return string + */ + public function getExpirationDate(): string + { + return $this->expirationDate; + } +} diff --git a/src/Rpan/ValueObject/Rpan.php b/src/Rpan/ValueObject/Rpan.php new file mode 100644 index 0000000..8ff080e --- /dev/null +++ b/src/Rpan/ValueObject/Rpan.php @@ -0,0 +1,111 @@ +serviceID = $serviceID; + + return $this; + } + + /** + * @return Transaction + */ + public function getTransaction(): Transaction + { + return $this->transaction; + } + + /** + * @return RecurringData + */ + public function getRecurringData(): RecurringData + { + return $this->recurringData; + } + + /** + * @return CardData + */ + public function getCardData(): CardData + { + return $this->cardData; + } + + /** + * @param string $hash + * @return Rpan + */ + public function setHash(string $hash): Rpan + { + $this->hash = $hash; + + return $this; + } + + /** + * @return string + */ + public function getHash(): string + { + return trim($this->hash); + } + +} diff --git a/src/Rpan/ValueObject/RpanResponse/RecurringConfirmations.php b/src/Rpan/ValueObject/RpanResponse/RecurringConfirmations.php new file mode 100644 index 0000000..9ed703c --- /dev/null +++ b/src/Rpan/ValueObject/RpanResponse/RecurringConfirmations.php @@ -0,0 +1,24 @@ +recurringConfirmed; + } +} diff --git a/src/Rpan/ValueObject/RpanResponse/RecurringConfirmed.php b/src/Rpan/ValueObject/RpanResponse/RecurringConfirmed.php new file mode 100644 index 0000000..1fb318a --- /dev/null +++ b/src/Rpan/ValueObject/RpanResponse/RecurringConfirmed.php @@ -0,0 +1,65 @@ +clientHash; + } + + /** + * @return string + */ + public function getConfirmation(): string + { + return $this->confirmation; + } + + /** + * @return string + */ + public function getReason(): string + { + return $this->reason; + } + + +} diff --git a/src/Rpan/ValueObject/RpanResponse/RpanResponse.php b/src/Rpan/ValueObject/RpanResponse/RpanResponse.php new file mode 100644 index 0000000..1ee3ba1 --- /dev/null +++ b/src/Rpan/ValueObject/RpanResponse/RpanResponse.php @@ -0,0 +1,86 @@ +serviceID; + } + + /** + * @return string + */ + public function getMessageID(): string + { + return $this->messageID; + } + + /** + * @return RecurringConfirmations + */ + public function getRecurringConfirmations(): RecurringConfirmations + { + return $this->recurringConfirmations; + } + + /** + * @return string + */ + public function getHash(): string + { + return $this->hash; + } + + public function toXml(): string + { + return (new Serializer())->toXml($this); + } +} diff --git a/src/Rpan/ValueObject/Transaction.php b/src/Rpan/ValueObject/Transaction.php new file mode 100644 index 0000000..78225d1 --- /dev/null +++ b/src/Rpan/ValueObject/Transaction.php @@ -0,0 +1,230 @@ +orderID; + } + + /** + * @return string + */ + public function getRemoteID(): string + { + return $this->remoteID; + } + + /** + * @return string + */ + public function getAmount(): string + { + return $this->amount; + } + + /** + * @return string + */ + public function getCurrency(): string + { + return $this->currency; + } + + /** + * @return string + */ + public function getPaymentDate(): string + { + return $this->paymentDate; + } + + /** + * @return string + */ + public function getPaymentStatus(): string + { + return $this->paymentStatus; + } + + /** + * @return string + */ + public function getPaymentStatusDetails(): string + { + return $this->paymentStatusDetails; + } + + /** + * @return string + */ + public function getStartAmount(): string + { + return $this->startAmount; + } + + /** + * @return string + */ + public function getInvoiceNumber(): string + { + return $this->invoiceNumber; + } + + /** + * @return string + */ + public function getCustomerNumber(): string + { + return $this->customerNumber; + } + + /** + * @return string + */ + public function getCustomerEmail(): string + { + return $this->customerEmail; + } + + /** + * @return string + */ + public function getCustomerPhone(): string + { + return $this->customerPhone; + } +} diff --git a/src/Rpdn/Builder/RpdnBuilder.php b/src/Rpdn/Builder/RpdnBuilder.php new file mode 100644 index 0000000..ad0b1af --- /dev/null +++ b/src/Rpdn/Builder/RpdnBuilder.php @@ -0,0 +1,40 @@ + $configuration->getServiceId(), + 'clientHash' => $rpdn->getRecurringData()->getClientHash(), + 'confirmation' => $confirmation + ]; + + $rpdnResponseData = [ + 'serviceID' => $configuration->getServiceId(), + 'recurringConfirmations' => [ + 'recurringConfirmed' => [ + 'clientHash' => $rpdn->getRecurringData()->getClientHash(), + 'confirmation' => $confirmation + ], + ], + 'hash' => HashGenerator::generateHash($hashData, $configuration) + ]; + + $serializer = new Serializer(); + + return $serializer->fromArray($rpdnResponseData, RpdnResponse::class); + } +} diff --git a/src/Rpdn/Builder/RpdnDtoBuilder.php b/src/Rpdn/Builder/RpdnDtoBuilder.php new file mode 100644 index 0000000..16bbd4c --- /dev/null +++ b/src/Rpdn/Builder/RpdnDtoBuilder.php @@ -0,0 +1,26 @@ +asXML(); + $rpdnDto = $serializer->deserializeXml($xmlTransaction, RpdnDto::class); + + $rpdnDto->getRpdn()->setServiceID((string)$xmlData->serviceID); + $rpdnDto->getRpdn()->setHash((string)$xmlData->hash); + + return $rpdnDto; + } +} diff --git a/src/Rpdn/Builder/RpdnVOBuilder.php b/src/Rpdn/Builder/RpdnVOBuilder.php new file mode 100644 index 0000000..59e3f76 --- /dev/null +++ b/src/Rpdn/Builder/RpdnVOBuilder.php @@ -0,0 +1,20 @@ +asXML(); + + return (new Serializer())->deserializeXml($xmlTransaction, Rpdn::class); + } +} diff --git a/src/Rpdn/Decoder/RpdnDecoder.php b/src/Rpdn/Decoder/RpdnDecoder.php new file mode 100644 index 0000000..d877b42 --- /dev/null +++ b/src/Rpdn/Decoder/RpdnDecoder.php @@ -0,0 +1,20 @@ +rpdn; + } + + public function getRequestData(): SerializableInterface + { + return $this->getRpdn(); + } +} diff --git a/src/Rpdn/ValueObject/RecurringData.php b/src/Rpdn/ValueObject/RecurringData.php new file mode 100644 index 0000000..df1ba3e --- /dev/null +++ b/src/Rpdn/ValueObject/RecurringData.php @@ -0,0 +1,76 @@ +recurringAction; + } + + /** + * @return string + */ + public function getClientHash(): string + { + return $this->clientHash; + } + + /** + * @return string + */ + public function getDeactivationSource(): string + { + return $this->deactivationSource; + } + + /** + * @return string + */ + public function getDeactivationDate(): string + { + return $this->deactivationDate; + } +} diff --git a/src/Rpdn/ValueObject/Rpdn.php b/src/Rpdn/ValueObject/Rpdn.php new file mode 100644 index 0000000..24352c6 --- /dev/null +++ b/src/Rpdn/ValueObject/Rpdn.php @@ -0,0 +1,80 @@ +serviceID = $serviceID; + + return $this; + } + + /** + * @return RecurringData + */ + public function getRecurringData(): RecurringData + { + return $this->recurringData; + } + + /** + * @param string $hash + * @return Rpdn + */ + public function setHash(string $hash): Rpdn + { + $this->hash = $hash; + + return $this; + } + + /** + * @return string + */ + public function getHash(): string + { + return trim($this->hash); + } +} diff --git a/src/Rpdn/ValueObject/RpdnResponse/RecurringConfirmations.php b/src/Rpdn/ValueObject/RpdnResponse/RecurringConfirmations.php new file mode 100644 index 0000000..0dadd1c --- /dev/null +++ b/src/Rpdn/ValueObject/RpdnResponse/RecurringConfirmations.php @@ -0,0 +1,24 @@ +recurringConfirmed; + } +} diff --git a/src/Rpdn/ValueObject/RpdnResponse/RecurringConfirmed.php b/src/Rpdn/ValueObject/RpdnResponse/RecurringConfirmed.php new file mode 100644 index 0000000..3904743 --- /dev/null +++ b/src/Rpdn/ValueObject/RpdnResponse/RecurringConfirmed.php @@ -0,0 +1,65 @@ +clientHash; + } + + /** + * @return string + */ + public function getConfirmation(): string + { + return $this->confirmation; + } + + /** + * @return string + */ + public function getReason(): string + { + return $this->reason; + } + + +} diff --git a/src/Rpdn/ValueObject/RpdnResponse/RpdnResponse.php b/src/Rpdn/ValueObject/RpdnResponse/RpdnResponse.php new file mode 100644 index 0000000..d5cc6fe --- /dev/null +++ b/src/Rpdn/ValueObject/RpdnResponse/RpdnResponse.php @@ -0,0 +1,70 @@ +serviceID; + } + + /** + * @return RecurringConfirmations + */ + public function getRecurringConfirmations(): RecurringConfirmations + { + return $this->recurringConfirmations; + } + + /** + * @return string + */ + public function getHash(): string + { + return $this->hash; + } + + public function toXml(): string + { + return (new Serializer())->toXml($this); + } +} diff --git a/src/Transaction/ValueObject/Transaction.php b/src/Transaction/ValueObject/Transaction.php index 159cd92..0a884cf 100644 --- a/src/Transaction/ValueObject/Transaction.php +++ b/src/Transaction/ValueObject/Transaction.php @@ -23,22 +23,25 @@ * "taxCountry", * "customerIP", * "title", - * "blikUIDKey", - * "blikUIDLabel", - * "blikAMKey", + * "receiverName", + * "customerPhone", * "validityTime", * "linkValidityTime", - * "receiverNRB", - * "receiverName", - * "receiverAddress", - * "remoteID", - * "bankHref", - * "returnURL", + * "recurringAction", + * "clientHash", * "authorizationCode", * "screenType", + * "blikUIDKey", + * "blikUIDLabel", + * "blikAMKey", + * "returnURL", * "defaultRegulationAcceptanceState", * "defaultRegulationAcceptanceID", * "defaultRegulationAcceptanceTime", + * "receiverNRB", + * "receiverAddress", + * "remoteID", + * "bankHref", * "hash" * }) */ @@ -262,6 +265,30 @@ class Transaction extends AbstractValueObject implements SerializableInterface */ protected $returnURL; + /** + * recurring Action + * + * @var string + * @Type("string") + */ + protected $recurringAction; + + /** + * Customer Phone. + * + * @var string + * @Type("string") + */ + protected $customerPhone; + + /** + * Client Hash. + * + * @var string + * @Type("string") + */ + protected $clientHash; + /** * @param string $serviceID * @return Transaction @@ -384,4 +411,22 @@ public function getBlikAMKey(): string { return $this->blikAMKey; } + + /** + * @return string + */ + public function getCustomerPhone(): string + { + return $this->customerPhone; + } + + /** + * @return string + */ + public function getClientHash(): string + { + return $this->clientHash; + } + + }