/**
  * @param $method
  * @param $uri
  * @param array $nameValuePairs either headers or request params in format [ key => value ]
  * @param string $body
  * @throws Exception
  */
 public function validateSignature($method, $uri, array $nameValuePairs, $body = "")
 {
     $expectedSignature = $nameValuePairs["signature"];
     $actualSignature = $this->createSignature($method, $uri, PaymentHighwayUtility::parseSphParameters($nameValuePairs), $body);
     if ($expectedSignature != $actualSignature) {
         throw new Exception("Response signature mismatch!");
     }
 }
 /**
  * @param string $uri
  * @param array $sphNameValuePairs
  * @return string formatted signature
  */
 private function createSecureSign($uri, $sphNameValuePairs = array())
 {
     $parsedSphParameters = PaymentHighwayUtility::parseSphParameters($sphNameValuePairs);
     $secureSigner = new SecureSigner($this->signatureKeyId, $this->signatureSecret);
     return $secureSigner->createSignature($this->method, $uri, $parsedSphParameters);
 }
 /**
  * @dataProvider provider
  * @test
  * @param array $values
  */
 public function arrayFilteringIsWorkingCorrectly($values, $expectedRows)
 {
     $filtered = PaymentHighwayUtility::parseSphParameters($values);
     $this->assertCount($expectedRows, $filtered);
 }