Skip to content

Commit

Permalink
Optimized upload transaction.
Browse files Browse the repository at this point in the history
  • Loading branch information
andrew-svirin committed Jan 16, 2025
1 parent 8f4f5cd commit 146c173
Show file tree
Hide file tree
Showing 25 changed files with 53 additions and 75 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## 2.4

* Optimized upload transaction.
* Fix decryption for data.
* Optimized memory usage.

## 2.3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

namespace EbicsApi\Ebics\Builders\CustomerCreditTransfer;

use DateTime;
use DOMElement;
use EbicsApi\Ebics\Contracts\PostalAddressInterface;
use EbicsApi\Ebics\Handlers\Traits\XPathTrait;
use EbicsApi\Ebics\Models\CustomerCreditTransfer;
use EbicsApi\Ebics\Services\DOMHelper;
use EbicsApi\Ebics\Services\RandomService;
use DateTime;
use DOMElement;
use InvalidArgumentException;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

namespace EbicsApi\Ebics\Builders\CustomerCreditTransfer;

use DateTime;
use EbicsApi\Ebics\Handlers\Traits\XPathTrait;
use EbicsApi\Ebics\Models\CustomerCreditTransfer;
use EbicsApi\Ebics\Services\DOMHelper;
use EbicsApi\Ebics\Services\RandomService;
use DateTime;

/**
* Class CustomerInstantCreditTransferBuilder builder for model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

namespace EbicsApi\Ebics\Builders\CustomerCreditTransfer;

use DateTime;
use DOMElement;
use EbicsApi\Ebics\Contracts\PostalAddressInterface;
use EbicsApi\Ebics\Handlers\Traits\XPathTrait;
use EbicsApi\Ebics\Models\CustomerCreditTransfer;
use EbicsApi\Ebics\Services\DOMHelper;
use EbicsApi\Ebics\Services\RandomService;
use DateTime;
use DOMElement;
use InvalidArgumentException;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

namespace EbicsApi\Ebics\Builders\CustomerDirectDebit;

use DateTime;
use EbicsApi\Ebics\Handlers\Traits\XPathTrait;
use EbicsApi\Ebics\Models\CustomerDirectDebit;
use EbicsApi\Ebics\Services\DOMHelper;
use EbicsApi\Ebics\Services\RandomService;
use DateTime;

/**
* Class CustomerDirectDebitBuilder builder for model @see \EbicsApi\Ebics\Models\CustomerDirectDebit
Expand Down
6 changes: 3 additions & 3 deletions src/Builders/Request/OrderDetailsBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@

namespace EbicsApi\Ebics\Builders\Request;

use DateTimeInterface;
use DOMDocument;
use DOMElement;
use EbicsApi\Ebics\Contexts\BTDContext;
use EbicsApi\Ebics\Contexts\BTUContext;
use EbicsApi\Ebics\Contexts\FDLContext;
use EbicsApi\Ebics\Contexts\FULContext;
use EbicsApi\Ebics\Contexts\HVDContext;
use EbicsApi\Ebics\Contexts\HVEContext;
use EbicsApi\Ebics\Contexts\HVTContext;
use DateTimeInterface;
use DOMDocument;
use DOMElement;

/**
* Abstract Class OrderDetailsBuilder builder for request container.
Expand Down
2 changes: 1 addition & 1 deletion src/Builders/Request/OrderDetailsBuilderV2.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

namespace EbicsApi\Ebics\Builders\Request;

use DateTimeInterface;
use EbicsApi\Ebics\Contexts\BTDContext;
use EbicsApi\Ebics\Contexts\BTUContext;
use EbicsApi\Ebics\Contexts\HVDContext;
use EbicsApi\Ebics\Contexts\HVEContext;
use EbicsApi\Ebics\Contexts\HVTContext;
use DateTimeInterface;
use LogicException;

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Builders/Request/OrderDetailsBuilderV3.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

namespace EbicsApi\Ebics\Builders\Request;

use DateTimeInterface;
use EbicsApi\Ebics\Contexts\BTDContext;
use EbicsApi\Ebics\Contexts\BTUContext;
use EbicsApi\Ebics\Contexts\HVDContext;
use EbicsApi\Ebics\Contexts\HVEContext;
use EbicsApi\Ebics\Contexts\HVTContext;
use DateTimeInterface;
use LogicException;

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Builders/Request/RequestBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

namespace EbicsApi\Ebics\Builders\Request;

use EbicsApi\Ebics\Models\Http\Request;
use Closure;
use EbicsApi\Ebics\Models\Http\Request;

/**
* Class RequestBuilder builder for model @see \EbicsApi\Ebics\Models\Http\Request
Expand Down
5 changes: 2 additions & 3 deletions src/Contexts/RequestContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@

namespace EbicsApi\Ebics\Contexts;

use DateTime;
use DateTimeInterface;
use EbicsApi\Ebics\Contracts\SignatureDataInterface;
use EbicsApi\Ebics\Models\Bank;
use EbicsApi\Ebics\Models\Keyring;
use EbicsApi\Ebics\Models\User;
use DateTime;
use DateTimeInterface;
use LogicException;

/**
* Class RequestContext context container for @see \EbicsApi\Ebics\Factories\RequestFactory
Expand Down
2 changes: 1 addition & 1 deletion src/Contracts/EbicsClientInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace EbicsApi\Ebics\Contracts;

use DateTimeInterface;
use EbicsApi\Ebics\Contexts\BTDContext;
use EbicsApi\Ebics\Contexts\BTUContext;
use EbicsApi\Ebics\Contexts\FDLContext;
Expand All @@ -18,7 +19,6 @@
use EbicsApi\Ebics\Models\Keyring;
use EbicsApi\Ebics\Models\UploadOrderResult;
use EbicsApi\Ebics\Models\User;
use DateTimeInterface;

/**
* EBICS client representation.
Expand Down
57 changes: 17 additions & 40 deletions src/EbicsClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -273,9 +273,10 @@ public function SPR(RequestContext $context = null): UploadOrderResult
$context = $this->requestFactory->prepareStandardContext($context);
$context->setOnlyES(true);

$transaction = $this->uploadESTransaction(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($context) {
$transaction->setOrderData(' ');
$transaction->setNumSegments(0);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createSPR($transaction, $context);
Expand Down Expand Up @@ -629,6 +630,7 @@ public function BTU(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createBTU($transaction, $context);
Expand Down Expand Up @@ -678,6 +680,7 @@ public function FUL(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createFUL($transaction, $context);
Expand All @@ -700,6 +703,7 @@ public function CCT(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createCCT($transaction, $context);
Expand All @@ -722,6 +726,7 @@ public function CDD(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createCDD($transaction, $context);
Expand All @@ -744,6 +749,7 @@ public function CDB(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createCDB($transaction, $context);
Expand All @@ -766,6 +772,7 @@ public function CIP(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createCIP($transaction, $context);
Expand All @@ -788,6 +795,7 @@ public function XE2(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createXE2($transaction, $context);
Expand All @@ -810,6 +818,7 @@ public function XE3(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createXE3($transaction, $context);
Expand All @@ -830,6 +839,7 @@ public function YCT(OrderDataInterface $orderData, RequestContext $context = nul
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($orderData, $context) {
$transaction->setOrderData($orderData->getContent());
$transaction->setNumSegments(1);
$transaction->setDigest($this->cryptService->hash($transaction->getOrderData()));

return $this->requestFactory->createYCT($transaction, $context);
Expand Down Expand Up @@ -881,9 +891,10 @@ public function HVE(HVEContext $hveContext, RequestContext $context = null): Upl
{
$context = $this->requestFactory->prepareStandardContext($context)
->setHVEContext($hveContext);
$transaction = $this->uploadESTransaction(
$transaction = $this->uploadTransaction(
function (UploadTransaction $transaction) use ($context) {
$transaction->setDigest($context->getHVEContext()->getDigest());
$transaction->setNumSegments(0);

return $this->requestFactory->createHVE($transaction, $context);
}
Expand Down Expand Up @@ -1140,11 +1151,10 @@ private function retrieveDownloadSegment(Request $request): DownloadSegment
* @throws EbicsResponseException
* @throws IncorrectResponseEbicsException
*/
private function uploadESTransaction(callable $requestClosure): UploadTransaction
private function uploadTransaction(callable $requestClosure): UploadTransaction
{
$transaction = $this->transactionFactory->createUploadTransaction();
$transaction->setKey($this->cryptService->generateTransactionKey());
$transaction->setNumSegments(0);

$request = call_user_func_array($requestClosure, [$transaction]);

Expand All @@ -1159,7 +1169,7 @@ private function uploadESTransaction(callable $requestClosure): UploadTransactio
$segment->setSegmentNumber(1);
$segment->setIsLastSegment(true);
$segment->setNumSegments($transaction->getNumSegments());
$segment->setOrderData(' ');
$segment->setOrderData($transaction->getOrderData());
$segment->setTransactionId($transaction->getInitialization()->getTransactionId());

if ($segment->getTransactionId()) {
Expand All @@ -1171,40 +1181,6 @@ private function uploadESTransaction(callable $requestClosure): UploadTransactio
return $transaction;
}

/**
* @throws EbicsException
* @throws EbicsResponseException
* @throws IncorrectResponseEbicsException
*/
private function uploadTransaction(callable $requestClosure): UploadTransaction
{
$transaction = $this->transactionFactory->createUploadTransaction();
$transaction->setKey($this->cryptService->generateTransactionKey());
$transaction->setNumSegments(1);

$request = call_user_func_array($requestClosure, [$transaction]);

$response = $this->httpClient->post($this->bank->getUrl(), $request);
$this->checkH00XReturnCode($request, $response);

$uploadSegment = $this->responseHandler->extractUploadSegment($request, $response);
$transaction->setInitialization($uploadSegment);

$segment = $this->segmentFactory->createTransferSegment();
$segment->setTransactionKey($transaction->getKey());
$segment->setSegmentNumber(1);
$segment->setIsLastSegment(true);
$segment->setNumSegments($transaction->getNumSegments());
$segment->setOrderData($transaction->getOrderData());
$segment->setTransactionId($transaction->getInitialization()->getTransactionId());
$transaction->addSegment($segment);
$transaction->setKey($transaction->getInitialization()->getTransactionId());

$this->transferTransfer($transaction);

return $transaction;
}

private function createInitializationOrderResult(InitializationTransaction $transaction): InitializationOrderResult
{
$orderResult = $this->orderResultFactory->createInitializationOrderResult();
Expand Down Expand Up @@ -1342,9 +1318,10 @@ private function getUserSignature(string $type): SignatureInterface
* Create new signature.
*
* @param string $type
* @param array|null $details
*
* @return SignatureInterface
* @throws EbicsException
* @throws PasswordEbicsException
*/
private function createUserSignature(string $type, array $details = null): SignatureInterface
{
Expand Down
10 changes: 5 additions & 5 deletions src/Handlers/OrderDataHandlerV2.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

namespace EbicsApi\Ebics\Handlers;

use DateTimeInterface;
use DOMDocument;
use DOMElement;
use DOMNode;
use DOMNodeList;
use EbicsApi\Ebics\Contracts\SignatureInterface;
use EbicsApi\Ebics\Handlers\Traits\H00XTrait;
use EbicsApi\Ebics\Models\Crypt\X509;
use EbicsApi\Ebics\Models\CustomerHIA;
use EbicsApi\Ebics\Models\CustomerINI;
use EbicsApi\Ebics\Models\Document;
use EbicsApi\Ebics\Services\DOMHelper;
use DateTimeInterface;
use DOMDocument;
use DOMElement;
use DOMNode;
use DOMNodeList;

/**
* Ebics 2.x OrderDataHandler.
Expand Down
4 changes: 2 additions & 2 deletions src/Handlers/OrderDataHandlerV30.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

namespace EbicsApi\Ebics\Handlers;

use DateTimeInterface;
use DOMElement;
use EbicsApi\Ebics\Contracts\SignatureInterface;
use EbicsApi\Ebics\Handlers\Traits\H005Trait;
use EbicsApi\Ebics\Models\Crypt\X509;
use EbicsApi\Ebics\Models\CustomerHIA;
use EbicsApi\Ebics\Models\CustomerINI;
use EbicsApi\Ebics\Models\Document;
use EbicsApi\Ebics\Services\DOMHelper;
use DateTimeInterface;
use DOMElement;
use RuntimeException;

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Handlers/Traits/C14NTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

namespace EbicsApi\Ebics\Handlers\Traits;

use EbicsApi\Ebics\Exceptions\AlgoEbicsException;
use DOMNode;
use DOMNodeList;
use DOMXPath;
use EbicsApi\Ebics\Exceptions\AlgoEbicsException;

/**
* Class C14NTrait manage c14n building.
Expand Down
2 changes: 1 addition & 1 deletion src/Models/CertificateX509.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

namespace EbicsApi\Ebics\Models;

use EbicsApi\Ebics\Models\Crypt\X509;
use DateTime;
use EbicsApi\Ebics\Models\Crypt\X509;

/**
* Class CertificateX509 represents Certificate model in X509 structure.
Expand Down
Loading

0 comments on commit 146c173

Please sign in to comment.