validateRequiredKeys($data, self::$requiredKeys); if ($data['Type'] === 'SubscriptionConfirmation' || $data['Type'] === 'UnsubscribeConfirmation' ) { $this->validateRequiredKeys($data, ['SubscribeURL', 'Token']); } $this->data = $data; } public function getIterator() { return new \ArrayIterator($this->data); } public function offsetExists($key) { return isset($this->data[$key]); } public function offsetGet($key) { return isset($this->data[$key]) ? $this->data[$key] : null; } public function offsetSet($key, $value) { $this->data[$key] = $value; } public function offsetUnset($key) { unset($this->data[$key]); } /** * Get all the message data as a plain array. * * @return array */ public function toArray() { return $this->data; } private function validateRequiredKeys(array $data, array $keys) { foreach ($keys as $key) { if (!isset($data[$key])) { throw new \InvalidArgumentException( "\"{$key}\" is required to verify the SNS Message." ); } } } }