From 80746a2bcf8d0b501b523b89e0d8cc79e91f6fe2 Mon Sep 17 00:00:00 2001 From: jyrmo Date: Tue, 11 Mar 2014 15:29:23 +0200 Subject: [PATCH 1/3] Changed account number length. Updated MAC calculating algorithm to account for differences in how banks calculate the length of the value. Change-Id: Ia34057030088157b3f454602a3b5a3c34d116e07 --- src/BitWeb/BankLink/BankLink.php | 4 +++- src/BitWeb/BankLink/Constants.php | 6 +++--- src/BitWeb/BankLink/Parameter.php | 5 +---- src/BitWeb/BankLink/Swedbank/Constants.php | 2 ++ src/BitWeb/BankLink/Swedbank/SwedBank.php | 7 +++++++ 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/BitWeb/BankLink/BankLink.php b/src/BitWeb/BankLink/BankLink.php index 3e02154..5f8dbbe 100755 --- a/src/BitWeb/BankLink/BankLink.php +++ b/src/BitWeb/BankLink/BankLink.php @@ -2,6 +2,7 @@ namespace BitWeb\BankLink; +use BitWeb\BankLink\Swedbank\SwedBank; /** * Main BankLink class that represents actions for bank links * @@ -605,7 +606,8 @@ private function getMacSource() if (null === $value) { throw new Exception('"' . $order . '" has to be setted'); } - $data .= str_pad(strlen($value), 3, '0', STR_PAD_LEFT) . $value; + $length = $this instanceof SwedBank ? mb_strlen($value, 'UTF-8') : strlen($value); + $data .= str_pad($length, 3, '0', STR_PAD_LEFT) . $value; } return $data; } diff --git a/src/BitWeb/BankLink/Constants.php b/src/BitWeb/BankLink/Constants.php index 14d2464..039654c 100755 --- a/src/BitWeb/BankLink/Constants.php +++ b/src/BitWeb/BankLink/Constants.php @@ -50,7 +50,7 @@ abstract class Constants * Saaja konto number */ const ACC = 'VK_ACC'; - const ACC_LENGTH = 16; + const ACC_LENGTH = 20; /** * Maksekorralduse viitenumber @@ -74,13 +74,13 @@ abstract class Constants * Saaja konto number */ const REC_ACC = 'VK_REC_ACC'; - const REC_ACC_LENGTH = 16; + const REC_ACC_LENGTH = 20; /** * Maksja konto number */ const SND_ACC = 'VK_SND_ACC'; - const SND_ACC_LENGTH = 16; + const SND_ACC_LENGTH = 20; /** * Maksekorralduse kuupäev diff --git a/src/BitWeb/BankLink/Parameter.php b/src/BitWeb/BankLink/Parameter.php index c7acdf7..0cf8343 100755 --- a/src/BitWeb/BankLink/Parameter.php +++ b/src/BitWeb/BankLink/Parameter.php @@ -52,10 +52,7 @@ public function getField() public function getFormattedValue() { - if (strstr($this->value, 'õ') || strstr($this->value, 'Ü')) { - return (string)trim(substr($this->value, 0, $this->length - 1)); - } - return (string)trim(substr($this->value, 0, $this->length)); + return (string)trim(mb_substr($this->value, 0, $this->length)); } public function getValue() diff --git a/src/BitWeb/BankLink/Swedbank/Constants.php b/src/BitWeb/BankLink/Swedbank/Constants.php index 2b8889e..4e6d90c 100755 --- a/src/BitWeb/BankLink/Swedbank/Constants.php +++ b/src/BitWeb/BankLink/Swedbank/Constants.php @@ -26,4 +26,6 @@ abstract class Constants extends BankLink\Constants const SND_NAME_LENGTH = 40; const RETURN_URL_LENGTH = 60; const BANK_ID = 'HP'; + const ENCODING = 'VK_ENCODING'; + const ENCODING_LENGTH = 10; } diff --git a/src/BitWeb/BankLink/Swedbank/SwedBank.php b/src/BitWeb/BankLink/Swedbank/SwedBank.php index ae0db1f..3cbb4da 100755 --- a/src/BitWeb/BankLink/Swedbank/SwedBank.php +++ b/src/BitWeb/BankLink/Swedbank/SwedBank.php @@ -28,6 +28,11 @@ final class SwedBank extends BankLink * @var string */ protected $bankId = Constants::BANK_ID; + + /** + * @var string + */ + private $encoding = 'UTF-8'; /* (non-PHPdoc) * @see BankLink/BankLink#setSpecificParameters() @@ -35,6 +40,7 @@ final class SwedBank extends BankLink protected function setSpecificParameters() { $this->addParameter(Constants::MAC, Constants::MAC_LENGTH); + $this->addParameter(Constants::ENCODING, Constants::ENCODING_LENGTH, $this->encoding); } /** @@ -100,6 +106,7 @@ protected function create1101() $this->addMacParameter(Constants::T_DATE, Constants::T_DATE_LENGTH); $this->addParameter(Constants::LANG, Constants::LANG_LENGTH, $this->langauge); $this->addParameter(Constants::AUTO, Constants::AUTO_LENGTH); + $this->addParameter(Constants::ENCODING, Constants::ENCODING_LENGTH, $this->encoding); } /** From 28a3874aff9c6c16092d80192dc212623e0711f2 Mon Sep 17 00:00:00 2001 From: jyrmo Date: Tue, 11 Mar 2014 15:32:08 +0200 Subject: [PATCH 2/3] Updated gitignore. Change-Id: Ic47af1dc57cde2b98f9dc5c79c4d0e291c71a109 --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 18ff966..fdc7e1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /.idea .idea +/.buildpath +/.project +/.settings From 3e9be93c614d7c6b9152322de648bf63170760f4 Mon Sep 17 00:00:00 2001 From: Rain Ramm Date: Mon, 25 Aug 2014 23:33:53 +0300 Subject: [PATCH 3/3] Move string length calculation to separate method --- src/BitWeb/BankLink/BankLink.php | 7 ++++++- src/BitWeb/BankLink/Swedbank/SwedBank.php | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/BitWeb/BankLink/BankLink.php b/src/BitWeb/BankLink/BankLink.php index b965112..b5098dd 100755 --- a/src/BitWeb/BankLink/BankLink.php +++ b/src/BitWeb/BankLink/BankLink.php @@ -606,12 +606,17 @@ private function getMacSource() if (null === $value) { throw new Exception('"' . $order . '" has to be setted'); } - $length = $this instanceof SwedBank ? mb_strlen($value, 'UTF-8') : strlen($value); + $length = $this->getValueStringLength($value); $data .= str_pad($length, 3, '0', STR_PAD_LEFT) . $value; } return $data; } + protected function getValueStringLength($value) + { + return strlen($value); + } + /** * Load values from request. And sets into parameters * @param array $data Where to load values. Default is $_REQUEST diff --git a/src/BitWeb/BankLink/Swedbank/SwedBank.php b/src/BitWeb/BankLink/Swedbank/SwedBank.php index 3cbb4da..d848196 100755 --- a/src/BitWeb/BankLink/Swedbank/SwedBank.php +++ b/src/BitWeb/BankLink/Swedbank/SwedBank.php @@ -156,4 +156,8 @@ protected function create4001() $this->addMacParameter(Constants::TIME, Constants::TIME_LENGTH); } + protected function getValueStringLength($value) + { + return mb_strlen($value, 'UTF-8'); + } }