PayU integration by Krzysztof Gzocha
  • Namespace
  • Class

Namespaces

  • Team3
    • PayU
      • Annotation
      • Communication
        • CurlRequestBuilder
        • HttpStatusParser
        • Notification
        • Process
          • NotificationProcess
          • ResponseDeserializer
        • Request
          • Model
        • Response
          • Model
        • Sender
      • Configuration
        • Credentials
      • Order
        • Autocomplete
          • Strategy
        • Model
          • Buyer
          • Money
          • Products
          • ShippingMethods
          • Traits
        • Transformer
          • UserOrder
            • Strategy
              • Product
              • ShippingMethod
      • PropertyExtractor
        • Reader
      • Serializer
      • SignatureCalculator
        • Encoder
          • Algorithms
          • Strategy
        • ParametersSorter
        • Validator
      • ValidatorBuilder

Classes

  • Team3\PayU\ValidatorBuilder\ValidatorBuilder

Interfaces

  • Team3\PayU\ValidatorBuilder\ValidatorBuilderInterface
  1 <?php
  2 /**
  3  * @author Krzysztof Gzocha <krzysztof.gzocha@xsolve.pl>
  4  */
  5 namespace Team3\PayU\SignatureCalculator\Validator;
  6 
  7 use Team3\PayU\Configuration\Credentials\CredentialsInterface;
  8 use Team3\PayU\SignatureCalculator\Encoder\Algorithms\AlgorithmInterface;
  9 use Team3\PayU\SignatureCalculator\Encoder\Algorithms\AlgorithmsProviderInterface;
 10 use Team3\PayU\SignatureCalculator\SignatureCalculatorException;
 11 use Team3\PayU\SignatureCalculator\SignatureCalculatorInterface;
 12 
 13 /**
 14  * {@inheritdoc}
 15  *
 16  * Class SignatureValidator
 17  * @package Team3\PayU\SignatureCalculator\Validator
 18  */
 19 class SignatureValidator implements SignatureValidatorInterface
 20 {
 21     /**
 22      * @var SignatureCalculatorInterface
 23      */
 24     private $signatureCalculator;
 25 
 26     /**
 27      * @var AlgorithmExtractorInterface
 28      */
 29     private $algorithmExtractor;
 30 
 31     /**
 32      * @var AlgorithmsProviderInterface
 33      */
 34     private $algorithmsProvider;
 35 
 36     /**
 37      * @param SignatureCalculatorInterface $signatureCalculator
 38      * @param AlgorithmExtractorInterface  $algorithmExtractor
 39      * @param AlgorithmsProviderInterface  $algorithmsProvider
 40      */
 41     public function __construct(
 42         SignatureCalculatorInterface $signatureCalculator,
 43         AlgorithmExtractorInterface $algorithmExtractor,
 44         AlgorithmsProviderInterface $algorithmsProvider
 45     ) {
 46         $this->signatureCalculator = $signatureCalculator;
 47         $this->algorithmExtractor = $algorithmExtractor;
 48         $this->algorithmsProvider = $algorithmsProvider;
 49     }
 50 
 51     /**
 52      * @param string               $data
 53      * @param string               $signatureHeader
 54      * @param CredentialsInterface $credentials
 55      *
 56      * @return bool
 57      * @throws SignatureCalculatorException
 58      */
 59     public function isSignatureValid(
 60         $data,
 61         $signatureHeader,
 62         CredentialsInterface $credentials
 63     ) {
 64         $calculatedSignature = $this
 65             ->signatureCalculator
 66             ->calculate(
 67                 json_decode($data, true),
 68                 $credentials,
 69                 $this->extractAlgorithm($signatureHeader)
 70             );
 71 
 72         return $this->compareSignatureStrings(
 73             $calculatedSignature,
 74             $this->extractSignature($signatureHeader)
 75         );
 76     }
 77 
 78     /**
 79      * @param string $signature
 80      *
 81      * @return string
 82      * @throws SignatureValidatorException
 83      */
 84     private function extractSignature($signature)
 85     {
 86         $matches = [];
 87         preg_match('/signature=([a-zA-Z0-9]+);/', $signature, $matches);
 88         if (!array_key_exists(1, $matches)) {
 89             throw new SignatureValidatorException(sprintf(
 90                 'Could not extract signature from string %s',
 91                 $signature
 92             ));
 93         }
 94 
 95         return $matches[1];
 96     }
 97 
 98     /**
 99      * @param string $signature
100      *
101      * @return AlgorithmInterface
102      */
103     private function extractAlgorithm($signature)
104     {
105         return $this
106             ->algorithmExtractor
107             ->extractAlgorithm($signature, $this->algorithmsProvider->getAlgorithms());
108     }
109 
110     /**
111      * @param string $firstSignature
112      * @param string $secondSignature
113      *
114      * @return bool
115      */
116     private function compareSignatureStrings($firstSignature, $secondSignature)
117     {
118         return 0 === strcasecmp($firstSignature, $secondSignature);
119     }
120 }
121 
PayU integration by Krzysztof Gzocha API documentation generated by ApiGen