@@ -572,13 +572,16 @@ public function checkVatNumber($countryCode, $vatNumber, $requesterCountryCode =
572
572
return $ gatewayResponse ;
573
573
}
574
574
575
+ $ countryCodeForVatNumber = $ this ->_getCountryCodeForVatNumber ($ countryCode );
576
+ $ requesterCountryCodeForVatNumber = $ this ->_getCountryCodeForVatNumber ($ requesterCountryCode );
577
+
575
578
try {
576
579
$ soapClient = $ this ->_createVatNumberValidationSoapClient ();
577
580
578
581
$ requestParams = [];
579
- $ requestParams ['countryCode ' ] = $ countryCode ;
582
+ $ requestParams ['countryCode ' ] = $ countryCodeForVatNumber ;
580
583
$ requestParams ['vatNumber ' ] = str_replace ([' ' , '- ' ], ['' , '' ], $ vatNumber );
581
- $ requestParams ['requesterCountryCode ' ] = $ requesterCountryCode ;
584
+ $ requestParams ['requesterCountryCode ' ] = $ requesterCountryCodeForVatNumber ;
582
585
$ requestParams ['requesterVatNumber ' ] = str_replace ([' ' , '- ' ], ['' , '' ], $ requesterVatNumber );
583
586
584
587
// Send request to service
@@ -738,4 +741,18 @@ protected function _createVatNumberValidationSoapClient($trace = false)
738
741
{
739
742
return new SoapClient (self ::VAT_VALIDATION_WSDL_URL , ['trace ' => $ trace ]);
740
743
}
744
+
745
+ /**
746
+ * Returns the country code used in VAT number which can be different from the ISO-2 country code.
747
+ *
748
+ * @param string $countryCode
749
+ * @return string
750
+ */
751
+ protected function _getCountryCodeForVatNumber (string $ countryCode ): string
752
+ {
753
+ // Greece uses a different code for VAT validation than its ISO-2 country code.
754
+ // See: https://en.wikipedia.org/wiki/VAT_identification_number#European_Union_VAT_identification_numbers
755
+
756
+ return $ countryCode === 'GR ' ? 'EL ' : $ countryCode ;
757
+ }
741
758
}
0 commit comments