public function verifyNotification($jsonString)
    {
        if (!$jsonString) {
            throw new CallbackJsonMissingException();
        }

        $json = json_decode($jsonString, true);

        if (!is_array($json)) {
            throw new CallbackInvalidJsonException();
        }

        if (!array_key_exists('posData', $json)) {
            throw new CallbackPosDataMissingException();
        }

        $posData = json_decode($json['posData'], true);
        if ($posData['hash'] != $this->generateHash(serialize($posData['posData']))) {
            throw new CallbackBadHashException();
        }

        $json['posData'] = $posData['posData'];

        return Invoice::fromArray($json);
    }