diff --git a/src/Sbp/Requests/CashLink/ActivateCashQrRequest.php b/src/Sbp/Requests/CashLink/ActivateCashQrRequest.php index a3df866..907d8bd 100644 --- a/src/Sbp/Requests/CashLink/ActivateCashQrRequest.php +++ b/src/Sbp/Requests/CashLink/ActivateCashQrRequest.php @@ -13,11 +13,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; //
// use Apoloz\AlfaBank\Sbp\Data\CashLink\ActivateCashQrRequestData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -25,7 +26,7 @@ use Saloon\Traits\Body\HasJsonBody; // class ActivateCashQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -56,9 +57,9 @@ class ActivateCashQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'ActivateCashQRc', 'TermNo' => $this->data->TermNo, 'qrcId' => $this->data->qrcId, @@ -67,22 +68,22 @@ class ActivateCashQrRequest extends Request implements HasBody ]; if ($this->data->OrderNumber !== null) { - $body['OrderNumber'] = $this->data->OrderNumber; + $bodyArray['OrderNumber'] = $this->data->OrderNumber; } if ($this->data->paymentPurpose !== null) { - $body['paymentPurpose'] = $this->data->paymentPurpose; + $bodyArray['paymentPurpose'] = $this->data->paymentPurpose; } if ($this->data->qrTtl !== null) { - $body['qrTtl'] = $this->data->qrTtl; + $bodyArray['qrTtl'] = $this->data->qrTtl; } if ($this->data->redirectUrl !== null) { - $body['redirectUrl'] = $this->data->redirectUrl; + $bodyArray['redirectUrl'] = $this->data->redirectUrl; } if ($this->data->notificationUrl !== null) { - $body['queryData'] = ['notificationUrl' => $this->data->notificationUrl]; + $bodyArray['queryData'] = ['notificationUrl' => $this->data->notificationUrl]; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/CashLink/ChangeAccountForCashQrRequest.php b/src/Sbp/Requests/CashLink/ChangeAccountForCashQrRequest.php index 4550117..7a0e820 100644 --- a/src/Sbp/Requests/CashLink/ChangeAccountForCashQrRequest.php +++ b/src/Sbp/Requests/CashLink/ChangeAccountForCashQrRequest.php @@ -12,20 +12,20 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; //
// +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class ChangeAccountForCashQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -53,7 +53,7 @@ class ChangeAccountForCashQrRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): array + public function createDtoFromResponse(Response $response): array { return $response->json(); } @@ -61,9 +61,9 @@ class ChangeAccountForCashQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'ChangeAccForCashQRc', 'TermNo' => $this->TermNo, 'qrcId' => $this->qrcId, @@ -71,16 +71,16 @@ class ChangeAccountForCashQrRequest extends Request implements HasBody ]; if ($this->NewTermNo !== null) { - $body['NewTermNo'] = $this->NewTermNo; + $bodyArray['NewTermNo'] = $this->NewTermNo; } if ($this->NewMerchantId !== null) { - $body['NewMerchantId'] = $this->NewMerchantId; + $bodyArray['NewMerchantId'] = $this->NewMerchantId; } if ($this->redirectUrl !== null) { - $body['redirectUrl'] = $this->redirectUrl; + $bodyArray['redirectUrl'] = $this->redirectUrl; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/CashLink/ChangeTermNoForCashQrRequest.php b/src/Sbp/Requests/CashLink/ChangeTermNoForCashQrRequest.php index 94910ca..eae6cb1 100644 --- a/src/Sbp/Requests/CashLink/ChangeTermNoForCashQrRequest.php +++ b/src/Sbp/Requests/CashLink/ChangeTermNoForCashQrRequest.php @@ -12,20 +12,20 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; //
// +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class ChangeTermNoForCashQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -49,7 +49,7 @@ class ChangeTermNoForCashQrRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): array + public function createDtoFromResponse(Response $response): array { return $response->json(); } @@ -57,13 +57,15 @@ class ChangeTermNoForCashQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'ChangeTermNoForCashQRc', 'TermNo' => $this->TermNo, 'qrcId' => $this->qrcId, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/CashLink/DeleteCashQrRequest.php b/src/Sbp/Requests/CashLink/DeleteCashQrRequest.php index 116bcd7..9d8236b 100644 --- a/src/Sbp/Requests/CashLink/DeleteCashQrRequest.php +++ b/src/Sbp/Requests/CashLink/DeleteCashQrRequest.php @@ -12,20 +12,20 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; //
// +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class DeleteCashQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -49,7 +49,7 @@ class DeleteCashQrRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): array + public function createDtoFromResponse(Response $response): array { return $response->json(); } @@ -57,13 +57,15 @@ class DeleteCashQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'DelCashQRc', 'TermNo' => $this->TermNo, 'qrcId' => $this->qrcId, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/CashLink/GetCashQrHistoryRequest.php b/src/Sbp/Requests/CashLink/GetCashQrHistoryRequest.php index 4f8f7d4..3480e3f 100644 --- a/src/Sbp/Requests/CashLink/GetCashQrHistoryRequest.php +++ b/src/Sbp/Requests/CashLink/GetCashQrHistoryRequest.php @@ -12,20 +12,20 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; //
// +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class GetCashQrHistoryRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -51,7 +51,7 @@ class GetCashQrHistoryRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): array + public function createDtoFromResponse(Response $response): array { return $response->json(); } @@ -59,15 +59,17 @@ class GetCashQrHistoryRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'GetCashQrcId', 'TermNo' => $this->TermNo, 'qrcId' => $this->qrcId, 'dateFrom' => $this->dateFrom, 'dateTo' => $this->dateTo, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/CashLink/GetCashQrStatusRequest.php b/src/Sbp/Requests/CashLink/GetCashQrStatusRequest.php index f4fb889..06688c8 100644 --- a/src/Sbp/Requests/CashLink/GetCashQrStatusRequest.php +++ b/src/Sbp/Requests/CashLink/GetCashQrStatusRequest.php @@ -12,20 +12,20 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; //
// +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class GetCashQrStatusRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -49,7 +49,7 @@ class GetCashQrStatusRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): array + public function createDtoFromResponse(Response $response): array { return $response->json(); } @@ -57,13 +57,15 @@ class GetCashQrStatusRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'GetCashQRCstatus', 'TermNo' => $this->TermNo, 'qrcId' => $this->qrcId, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/CashLink/RegCashQrRequest.php b/src/Sbp/Requests/CashLink/RegCashQrRequest.php index 2315d35..6474d87 100644 --- a/src/Sbp/Requests/CashLink/RegCashQrRequest.php +++ b/src/Sbp/Requests/CashLink/RegCashQrRequest.php @@ -14,11 +14,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\CashLink; // use Apoloz\AlfaBank\Sbp\Data\CashLink\RegCashQrRequestData; use Apoloz\AlfaBank\Sbp\Data\CashLink\RegCashQrResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -26,7 +27,7 @@ use Saloon\Traits\Body\HasJsonBody; // class RegCashQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,30 +58,30 @@ class RegCashQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'RegCashQRc', 'TermNo' => $this->data->TermNo, ]; if ($this->data->mediaType !== null) { - $body['mediaType'] = $this->data->mediaType; + $bodyArray['mediaType'] = $this->data->mediaType; } if ($this->data->width !== null) { - $body['width'] = $this->data->width; + $bodyArray['width'] = $this->data->width; } if ($this->data->height !== null) { - $body['height'] = $this->data->height; + $bodyArray['height'] = $this->data->height; } if ($this->data->redirectUrl !== null) { - $body['redirectUrl'] = $this->data->redirectUrl; + $bodyArray['redirectUrl'] = $this->data->redirectUrl; } if ($this->data->qrcId !== null) { - $body['qrcId'] = $this->data->qrcId; + $bodyArray['qrcId'] = $this->data->qrcId; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/DigitalRuble/CashLink/ChangeAccForCashUniQrRequest.php b/src/Sbp/Requests/DigitalRuble/CashLink/ChangeAccForCashUniQrRequest.php index 635c216..0fbed08 100644 --- a/src/Sbp/Requests/DigitalRuble/CashLink/ChangeAccForCashUniQrRequest.php +++ b/src/Sbp/Requests/DigitalRuble/CashLink/ChangeAccForCashUniQrRequest.php @@ -18,7 +18,6 @@ use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; //
@@ -26,7 +25,7 @@ use Saloon\Traits\Body\HasJsonBody; // class ChangeAccForCashUniQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,42 +56,42 @@ class ChangeAccForCashUniQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'ChangeAccForCashUniQr', 'TermNo' => $this->data->TermNo, ]; if ($this->data->messageID !== null) { - $body['messageID'] = $this->data->messageID; + $bodyArray['messageID'] = $this->data->messageID; } if ($this->data->qrcId !== null) { - $body['qrcId'] = $this->data->qrcId; + $bodyArray['qrcId'] = $this->data->qrcId; } if ($this->data->account !== null) { - $body['account'] = $this->data->account; + $bodyArray['account'] = $this->data->account; } if ($this->data->accountDR !== null) { - $body['accountDR'] = $this->data->accountDR; + $bodyArray['accountDR'] = $this->data->accountDR; } if ($this->data->NewTermNo !== null) { - $body['NewTermNo'] = $this->data->NewTermNo; + $bodyArray['NewTermNo'] = $this->data->NewTermNo; } if ($this->data->NewMerchantId !== null) { - $body['NewMerchantId'] = $this->data->NewMerchantId; + $bodyArray['NewMerchantId'] = $this->data->NewMerchantId; } if ($this->data->redirectUrl !== null) { - $body['redirectUrl'] = $this->data->redirectUrl; + $bodyArray['redirectUrl'] = $this->data->redirectUrl; } if ($this->data->paymentPageUrl !== null) { - $body['paymentPageUrl'] = $this->data->paymentPageUrl; + $bodyArray['paymentPageUrl'] = $this->data->paymentPageUrl; } if ($this->data->fraudScore !== null) { - $body['fraudScore'] = $this->data->fraudScore; + $bodyArray['fraudScore'] = $this->data->fraudScore; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/DigitalRuble/CashLink/CreateCashUniQrRequest.php b/src/Sbp/Requests/DigitalRuble/CashLink/CreateCashUniQrRequest.php index bc5d82b..d126621 100644 --- a/src/Sbp/Requests/DigitalRuble/CashLink/CreateCashUniQrRequest.php +++ b/src/Sbp/Requests/DigitalRuble/CashLink/CreateCashUniQrRequest.php @@ -18,7 +18,6 @@ use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; //
@@ -26,7 +25,7 @@ use Saloon\Traits\Body\HasJsonBody; // class CreateCashUniQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,40 +56,40 @@ class CreateCashUniQrRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'ReqCashUniQr', 'TermNo' => $this->data->TermNo, ]; if ($this->data->messageID !== null) { - $body['messageID'] = $this->data->messageID; + $bodyArray['messageID'] = $this->data->messageID; } if ($this->data->redirectUrl !== null) { - $body['redirectUrl'] = $this->data->redirectUrl; + $bodyArray['redirectUrl'] = $this->data->redirectUrl; } if ($this->data->paymentPageUrl !== null) { - $body['paymentPageUrl'] = $this->data->paymentPageUrl; + $bodyArray['paymentPageUrl'] = $this->data->paymentPageUrl; } if ($this->data->mediaType !== null) { - $body['mediaType'] = $this->data->mediaType; + $bodyArray['mediaType'] = $this->data->mediaType; } if ($this->data->width !== null) { - $body['width'] = $this->data->width; + $bodyArray['width'] = $this->data->width; } if ($this->data->height !== null) { - $body['height'] = $this->data->height; + $bodyArray['height'] = $this->data->height; } if ($this->data->qrcId !== null) { - $body['qrcId'] = $this->data->qrcId; + $bodyArray['qrcId'] = $this->data->qrcId; } if ($this->data->notificationUrl !== null) { - $body['queryData'] = ['notificationUrl' => $this->data->notificationUrl]; + $bodyArray['queryData'] = ['notificationUrl' => $this->data->notificationUrl]; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/DigitalRuble/CashLink/GetCashUniQrStatusRequest.php b/src/Sbp/Requests/DigitalRuble/CashLink/GetCashUniQrStatusRequest.php index 18f9d25..ebd62b6 100644 --- a/src/Sbp/Requests/DigitalRuble/CashLink/GetCashUniQrStatusRequest.php +++ b/src/Sbp/Requests/DigitalRuble/CashLink/GetCashUniQrStatusRequest.php @@ -18,7 +18,6 @@ use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; //
@@ -26,7 +25,7 @@ use Saloon\Traits\Body\HasJsonBody; // class GetCashUniQrStatusRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,9 +56,9 @@ class GetCashUniQrStatusRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'GetCashUniQrStatus', 'TermNo' => $this->data->TermNo, 'uniQrId' => $this->data->uniQrId, @@ -67,13 +66,13 @@ class GetCashUniQrStatusRequest extends Request implements HasBody ]; if ($this->data->messageID !== null) { - $body['messageID'] = $this->data->messageID; + $bodyArray['messageID'] = $this->data->messageID; } if ($this->data->payrrn !== null) { - $body['payrrn'] = $this->data->payrrn; + $bodyArray['payrrn'] = $this->data->payrrn; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/DigitalRuble/CreateUniQrRequest.php b/src/Sbp/Requests/DigitalRuble/CreateUniQrRequest.php index 9a24fdb..dba56ce 100644 --- a/src/Sbp/Requests/DigitalRuble/CreateUniQrRequest.php +++ b/src/Sbp/Requests/DigitalRuble/CreateUniQrRequest.php @@ -6,15 +6,16 @@ namespace Apoloz\AlfaBank\Sbp\Requests\DigitalRuble; use Apoloz\AlfaBank\Sbp\Data\DigitalRuble\CreateUniQrRequestData; use Apoloz\AlfaBank\Sbp\Data\DigitalRuble\UniQrResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; class CreateUniQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; protected Method $method = Method::POST; @@ -32,40 +33,40 @@ class CreateUniQrRequest extends Request implements HasBody return UniQrResponseData::from($response->json()); } - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'ReqUniQr', 'TermNo' => $this->data->TermNo, 'uniQrType' => $this->data->uniQrType, ]; if ($this->data->amount !== null) { - $body['amount'] = $this->data->amount; + $bodyArray['amount'] = $this->data->amount; } if ($this->data->paymentPurpose !== null) { - $body['paymentPurpose'] = $this->data->paymentPurpose; + $bodyArray['paymentPurpose'] = $this->data->paymentPurpose; } if ($this->data->redirectUrl !== null) { - $body['redirectUrl'] = $this->data->redirectUrl; + $bodyArray['redirectUrl'] = $this->data->redirectUrl; } if ($this->data->paymentPageUrl !== null) { - $body['paymentPageUrl'] = $this->data->paymentPageUrl; + $bodyArray['paymentPageUrl'] = $this->data->paymentPageUrl; } if ($this->data->mediaType !== null) { - $body['mediaType'] = $this->data->mediaType; + $bodyArray['mediaType'] = $this->data->mediaType; } if ($this->data->width !== null) { - $body['width'] = $this->data->width; + $bodyArray['width'] = $this->data->width; } if ($this->data->height !== null) { - $body['height'] = $this->data->height; + $bodyArray['height'] = $this->data->height; } if ($this->data->qrTtl !== null) { - $body['qrTtl'] = $this->data->qrTtl; + $bodyArray['qrTtl'] = $this->data->qrTtl; } if ($this->data->messageID !== null) { - $body['messageID'] = $this->data->messageID; + $bodyArray['messageID'] = $this->data->messageID; } $queryData = []; @@ -83,9 +84,9 @@ class CreateUniQrRequest extends Request implements HasBody } if (! empty($queryData)) { - $body['queryData'] = $queryData; + $bodyArray['queryData'] = $queryData; } - return $body; + return CmsSigner::canonicalize($bodyArray); } } diff --git a/src/Sbp/Requests/DigitalRuble/GetUniQrStatusRequest.php b/src/Sbp/Requests/DigitalRuble/GetUniQrStatusRequest.php index b4648ec..622a3d2 100644 --- a/src/Sbp/Requests/DigitalRuble/GetUniQrStatusRequest.php +++ b/src/Sbp/Requests/DigitalRuble/GetUniQrStatusRequest.php @@ -12,20 +12,21 @@ namespace Apoloz\AlfaBank\Sbp\Requests\DigitalRuble; //
// +use Apoloz\AlfaBank\Sbp\Data\DigitalRuble\GetUniQrStatusResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class GetUniQrStatusRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -49,21 +50,23 @@ class GetUniQrStatusRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): \Apoloz\AlfaBank\Sbp\Data\DigitalRuble\GetUniQrStatusResponseData + public function createDtoFromResponse(Response $response): GetUniQrStatusResponseData { - return \Apoloz\AlfaBank\Sbp\Data\DigitalRuble\GetUniQrStatusResponseData::from($response->json()); + return GetUniQrStatusResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'GetUniQrStatus', 'TermNo' => $this->TermNo, 'uniQrIds' => $this->uniQrIds, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Management/BlockQrRequest.php b/src/Sbp/Requests/Management/BlockQrRequest.php index 9150ff1..2aa4a16 100644 --- a/src/Sbp/Requests/Management/BlockQrRequest.php +++ b/src/Sbp/Requests/Management/BlockQrRequest.php @@ -13,20 +13,21 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Management; //
// use Apoloz\AlfaBank\Sbp\Data\Management\BlockQrRequestData; +use Apoloz\AlfaBank\Sbp\Data\Management\SbpManagementResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class BlockQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -49,20 +50,22 @@ class BlockQrRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): \Apoloz\AlfaBank\Sbp\Data\Management\SbpManagementResponseData + public function createDtoFromResponse(Response $response): SbpManagementResponseData { - return \Apoloz\AlfaBank\Sbp\Data\Management\SbpManagementResponseData::from($response->json()); + return SbpManagementResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'BlockQRcId'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Management/GetBlockedQrListRequest.php b/src/Sbp/Requests/Management/GetBlockedQrListRequest.php index 3236afd..724ab7a 100644 --- a/src/Sbp/Requests/Management/GetBlockedQrListRequest.php +++ b/src/Sbp/Requests/Management/GetBlockedQrListRequest.php @@ -12,20 +12,21 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Management; //
// +use Apoloz\AlfaBank\Sbp\Data\Management\GetBlockedQrListResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class GetBlockedQrListRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -48,20 +49,22 @@ class GetBlockedQrListRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): \Apoloz\AlfaBank\Sbp\Data\Management\GetBlockedQrListResponseData + public function createDtoFromResponse(Response $response): GetBlockedQrListResponseData { - return \Apoloz\AlfaBank\Sbp\Data\Management\GetBlockedQrListResponseData::from($response->json()); + return GetBlockedQrListResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'GetBlockedQRcIdList', 'TermNo' => $this->TermNo, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Management/UnblockQrRequest.php b/src/Sbp/Requests/Management/UnblockQrRequest.php index 34039a2..adcdd93 100644 --- a/src/Sbp/Requests/Management/UnblockQrRequest.php +++ b/src/Sbp/Requests/Management/UnblockQrRequest.php @@ -13,20 +13,21 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Management; //
// use Apoloz\AlfaBank\Sbp\Data\Management\BlockQrRequestData; +use Apoloz\AlfaBank\Sbp\Data\Management\SbpManagementResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class UnblockQrRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -49,20 +50,22 @@ class UnblockQrRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): \Apoloz\AlfaBank\Sbp\Data\Management\SbpManagementResponseData + public function createDtoFromResponse(Response $response): SbpManagementResponseData { - return \Apoloz\AlfaBank\Sbp\Data\Management\SbpManagementResponseData::from($response->json()); + return SbpManagementResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'UnblockQRcId'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Registry/GetBankListRequest.php b/src/Sbp/Requests/Registry/GetBankListRequest.php index 9c6d5f6..c4d3318 100644 --- a/src/Sbp/Requests/Registry/GetBankListRequest.php +++ b/src/Sbp/Requests/Registry/GetBankListRequest.php @@ -13,11 +13,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Registry; //
// use Apoloz\AlfaBank\Sbp\Data\Registry\GetBankListResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -25,7 +26,7 @@ use Saloon\Traits\Body\HasJsonBody; // class GetBankListRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,20 +58,20 @@ class GetBankListRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'GetBankList', ]; if ($this->messageID !== null) { - $body['messageID'] = $this->messageID; + $bodyArray['messageID'] = $this->messageID; } if ($this->BankMemberIdFilter !== null) { - $body['BankMemberIdFilter'] = $this->BankMemberIdFilter; + $bodyArray['BankMemberIdFilter'] = $this->BankMemberIdFilter; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Reversal/GetQrcReversalDataRequest.php b/src/Sbp/Requests/Reversal/GetQrcReversalDataRequest.php index 57d587f..50d75b2 100644 --- a/src/Sbp/Requests/Reversal/GetQrcReversalDataRequest.php +++ b/src/Sbp/Requests/Reversal/GetQrcReversalDataRequest.php @@ -14,11 +14,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Reversal; // use Apoloz\AlfaBank\Sbp\Data\Reversal\GetQrcReversalDataRequestData; use Apoloz\AlfaBank\Sbp\Data\Reversal\GetQrcReversalDataResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -26,7 +27,7 @@ use Saloon\Traits\Body\HasJsonBody; // class GetQrcReversalDataRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,12 +58,14 @@ class GetQrcReversalDataRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'GetQRCreversalData'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Reversal/GetQrcReversalHistoryRequest.php b/src/Sbp/Requests/Reversal/GetQrcReversalHistoryRequest.php index 1b25da1..813216c 100644 --- a/src/Sbp/Requests/Reversal/GetQrcReversalHistoryRequest.php +++ b/src/Sbp/Requests/Reversal/GetQrcReversalHistoryRequest.php @@ -5,15 +5,16 @@ declare(strict_types=1); namespace Apoloz\AlfaBank\Sbp\Requests\Reversal; use Apoloz\AlfaBank\Sbp\Data\Reversal\ReversalHistoryResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; class GetQrcReversalHistoryRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; protected Method $method = Method::POST; @@ -32,12 +33,14 @@ class GetQrcReversalHistoryRequest extends Request implements HasBody return ReversalHistoryResponseData::from($response->json()); } - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'GetQRCreversalHistory', 'TermNo' => $this->TermNo, 'payrrn' => $this->payrrn, ]; + + return CmsSigner::canonicalize($bodyArray); } } diff --git a/src/Sbp/Requests/Reversal/GetQrcReversalStatusRequest.php b/src/Sbp/Requests/Reversal/GetQrcReversalStatusRequest.php index bcd3d0f..7634775 100644 --- a/src/Sbp/Requests/Reversal/GetQrcReversalStatusRequest.php +++ b/src/Sbp/Requests/Reversal/GetQrcReversalStatusRequest.php @@ -14,11 +14,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Reversal; // use Apoloz\AlfaBank\Sbp\Data\Reversal\GetQrcReversalStatusRequestData; use Apoloz\AlfaBank\Sbp\Data\Reversal\GetQrcReversalStatusResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -26,7 +27,7 @@ use Saloon\Traits\Body\HasJsonBody; // class GetQrcReversalStatusRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,12 +58,14 @@ class GetQrcReversalStatusRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'GetQRCreversalStatus'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Reversal/QrcReversalRequest.php b/src/Sbp/Requests/Reversal/QrcReversalRequest.php index 92847d9..1b75bc4 100644 --- a/src/Sbp/Requests/Reversal/QrcReversalRequest.php +++ b/src/Sbp/Requests/Reversal/QrcReversalRequest.php @@ -14,11 +14,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Reversal; // use Apoloz\AlfaBank\Sbp\Data\Reversal\QrcReversalRequestData; use Apoloz\AlfaBank\Sbp\Data\Reversal\QrcReversalResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -26,7 +27,7 @@ use Saloon\Traits\Body\HasJsonBody; // class QrcReversalRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,12 +58,14 @@ class QrcReversalRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'QRCreversal'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Status/GetQrcStatusRequest.php b/src/Sbp/Requests/Status/GetQrcStatusRequest.php index 353bd9f..f966928 100644 --- a/src/Sbp/Requests/Status/GetQrcStatusRequest.php +++ b/src/Sbp/Requests/Status/GetQrcStatusRequest.php @@ -14,11 +14,12 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Status; // use Apoloz\AlfaBank\Sbp\Data\Status\GetQrcStatusRequestData; use Apoloz\AlfaBank\Sbp\Data\Status\GetQrcStatusResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -26,7 +27,7 @@ use Saloon\Traits\Body\HasJsonBody; // class GetQrcStatusRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -57,12 +58,14 @@ class GetQrcStatusRequest extends Request implements HasBody //
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'GetQRCstatus'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Subscription/GetQrSubStatusRequest.php b/src/Sbp/Requests/Subscription/GetQrSubStatusRequest.php index 74dd176..77926d2 100644 --- a/src/Sbp/Requests/Subscription/GetQrSubStatusRequest.php +++ b/src/Sbp/Requests/Subscription/GetQrSubStatusRequest.php @@ -12,20 +12,21 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Subscription; //
// +use Apoloz\AlfaBank\Sbp\Data\Subscription\GetQrSubStatusResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Http\Response; +use Saloon\Traits\Body\HasStringBody; -// -// use Saloon\Http\Response; // Explicit import would be cleaner //
//
// class GetQrSubStatusRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -50,27 +51,27 @@ class GetQrSubStatusRequest extends Request implements HasBody //
// - public function createDtoFromResponse(\Saloon\Http\Response $response): \Apoloz\AlfaBank\Sbp\Data\Subscription\GetQrSubStatusResponseData + public function createDtoFromResponse(Response $response): GetQrSubStatusResponseData { - return \Apoloz\AlfaBank\Sbp\Data\Subscription\GetQrSubStatusResponseData::from($response->json()); + return GetQrSubStatusResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - $body = [ + $bodyArray = [ 'command' => 'GetQRCSubStatus', 'TermNo' => $this->TermNo, 'qrcId' => $this->qrcId, ]; if ($this->RQperiod !== null) { - $body['RQperiod'] = $this->RQperiod; + $bodyArray['RQperiod'] = $this->RQperiod; } - return $body; + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Subscription/QrcSubPayPetitionRequest.php b/src/Sbp/Requests/Subscription/QrcSubPayPetitionRequest.php index 1dc5347..c4818a4 100644 --- a/src/Sbp/Requests/Subscription/QrcSubPayPetitionRequest.php +++ b/src/Sbp/Requests/Subscription/QrcSubPayPetitionRequest.php @@ -12,11 +12,13 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Subscription; //
// +use Apoloz\AlfaBank\Sbp\Data\Subscription\QrcSubPayPetitionResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -24,7 +26,7 @@ use Saloon\Traits\Body\HasJsonBody; // class QrcSubPayPetitionRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -50,23 +52,25 @@ class QrcSubPayPetitionRequest extends Request implements HasBody //
// - public function createDtoFromResponse(Response $response): \Apoloz\AlfaBank\Sbp\Data\Subscription\QrcSubPayPetitionResponseData + public function createDtoFromResponse(Response $response): QrcSubPayPetitionResponseData { - return \Apoloz\AlfaBank\Sbp\Data\Subscription\QrcSubPayPetitionResponseData::from($response->json()); + return QrcSubPayPetitionResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - return [ + $bodyArray = [ 'command' => 'QRCSubPayPetition', 'TermNo' => $this->TermNo, 'subscriptionToken' => $this->subscriptionToken, 'SenderMemberId' => $this->SenderMemberId, 'qrcId' => $this->qrcId, ]; + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Sbp/Requests/Subscription/RegQrSubRequest.php b/src/Sbp/Requests/Subscription/RegQrSubRequest.php index d352a36..8a34e7a 100644 --- a/src/Sbp/Requests/Subscription/RegQrSubRequest.php +++ b/src/Sbp/Requests/Subscription/RegQrSubRequest.php @@ -13,11 +13,13 @@ namespace Apoloz\AlfaBank\Sbp\Requests\Subscription; //
// use Apoloz\AlfaBank\Sbp\Data\Subscription\RegQrSubRequestData; +use Apoloz\AlfaBank\Sbp\Data\Subscription\RegQrSubResponseData; +use Apoloz\AlfaBank\Utils\CmsSigner; use Saloon\Contracts\Body\HasBody; use Saloon\Enums\Method; use Saloon\Http\Request; use Saloon\Http\Response; -use Saloon\Traits\Body\HasJsonBody; +use Saloon\Traits\Body\HasStringBody; //
@@ -25,7 +27,7 @@ use Saloon\Traits\Body\HasJsonBody; // class RegQrSubRequest extends Request implements HasBody { - use HasJsonBody; + use HasStringBody; //
// @@ -48,20 +50,22 @@ class RegQrSubRequest extends Request implements HasBody //
// - public function createDtoFromResponse(Response $response): \Apoloz\AlfaBank\Sbp\Data\Subscription\RegQrSubResponseData + public function createDtoFromResponse(Response $response): RegQrSubResponseData { - return \Apoloz\AlfaBank\Sbp\Data\Subscription\RegQrSubResponseData::from($response->json()); + return RegQrSubResponseData::from($response->json()); } //
//
// - protected function defaultBody(): array + protected function defaultBody(): string { - return array_merge( + $bodyArray = array_merge( ['command' => 'RegQRcSub'], $this->data->toArray() ); + + return CmsSigner::canonicalize($bodyArray); } //
} diff --git a/src/Services/OpenSslCmsSigner.php b/src/Services/OpenSslCmsSigner.php index 6d308b7..2141100 100644 --- a/src/Services/OpenSslCmsSigner.php +++ b/src/Services/OpenSslCmsSigner.php @@ -55,15 +55,17 @@ class OpenSslCmsSigner implements SignerInterface @unlink($inFile); @unlink($outFile); - // Извлекаем Base64 тело подписи согласно примеру из документации Альфы - $parts = explode("\n\n", $signedData, 2); - if (isset($parts[1])) { - $signature = trim($parts[1]); - // Удаляем возможные PEM-завершители и переносы строк - $signature = str_replace(["-----BEGIN PKCS7-----", "-----END PKCS7-----", "\n", "\r", " "], '', $signature); - return $signature; + // Надежно извлекаем только Base64 блок подписи из S/MIME или PEM структуры + $parts = explode("\n\n", $signedData); + foreach ($parts as $part) { + // Очищаем часть от пробелов и переносов + $cleaned = str_replace(["\n", "\r", ' '], '', $part); + // Ищем блок, который выглядит как длинный Base64 (больше 128 символов) и не содержит S/MIME заголовков + if (preg_match('/^[a-zA-Z0-9\/+]+=*$/', $cleaned) && strlen($cleaned) > 128) { + return $cleaned; + } } - throw new SignerException("Failed to extract signature body from CMS container."); + throw new SignerException("Failed to extract signature body from CMS container. Output: " . substr($signedData, 0, 100)); } }