/** * Create event messages. If the message is reporting location, we use * eventKey to store coordinates in order to save estate. * * @param array $fields * @return Message|null */ protected function createEvent(array $fields) { $basic = $this->createBasic($fields); $event = new Event(); $extra = collect($fields)->filter(function ($val, $name) { return !in_array($name, $this->common); }); $event->event = Str::lower($extra->get('Event')); $event->ticket = $extra->get('Ticket'); // Weixin sent empty array for unsubscribe event $event->eventKey = $extra->get('EventKey') ?: null; if ($extra->has('Latitude')) { $event->eventKey = implode(';', $extra->only('Latitude', 'Longitude', 'Precision')->values()->toArray()); } $event->save(); $event->message()->save($basic); return $basic; }