setAttributes($attributes); } /** * Return type name message. * * @return string */ public function getType(): string { return $this->type; } /** * @param string $type */ public function setType(string $type) { $this->type = $type; } /** * Magic getter. * * @param string $property * * @return mixed */ public function __get($property) { if (property_exists($this, $property)) { return $this->$property; } return $this->getAttribute($property); } /** * Magic setter. * * @param string $property * @param mixed $value * * @return Message */ public function __set($property, $value) { if (property_exists($this, $property)) { $this->$property = $value; } else { $this->setAttribute($property, $value); } return $this; } /** * @param array $appends * * @return array */ public function transformForJsonRequestWithoutType(array $appends = []) { return $this->transformForJsonRequest($appends, false); } /** * @param array $appends * @param bool $withType * * @return array * * @throws InvalidArgumentException */ public function transformForJsonRequest(array $appends = [], bool $withType = true): array { if (!$withType) { return $this->propertiesToArray([], $this->jsonAliases); } $messageType = $this->getType(); $data = array_merge(['msgtype' => $messageType], $appends); $data[$messageType] = array_merge($data[$messageType] ?? [], $this->propertiesToArray([], $this->jsonAliases)); return $data; } /** * @param array $appends * @param bool $returnAsArray * * @return string */ public function transformToXml(array $appends = [], bool $returnAsArray = false) { $data = array_merge(['MsgType' => $this->getType()], $this->toXmlArray(), $appends); return $returnAsArray ? $data : XML::build($data); } /** * @param array $data * @param array $aliases * * @return array * * @throws InvalidArgumentException */ protected function propertiesToArray(array $data, array $aliases = []): array { $this->checkRequiredAttributes(); foreach ($this->attributes as $property => $value) { if (is_null($value) && !$this->isRequired($property)) { continue; } $alias = array_search($property, $aliases, true); $data[$alias ?: $property] = $this->get($property); } return $data; } public function toXmlArray() { throw new \RuntimeException(sprintf('Class "%s" cannot support transform to XML message.', __CLASS__)); } }