public function event($title, $text, array $optionalMetadatas = array()) { static $validOptionalMetadatas = ['d' => 'date_happened', 'h' => 'hostname', 'k' => 'aggregation_key', 'p' => 'priority', 's' => 'source_type_name', 't' => 'alert_type', '#' => 'tags']; static $validLongOptionalMetadatas = array(); if (!$validLongOptionalMetadatas) { $validLongOptionalMetadatas = array_flip($validOptionalMetadatas); } $datagram = '_e{' . strlen($title) . ',' . strlen($text) . '}:' . $title . '|' . $text; foreach ($optionalMetadatas as $optionalMetadataKey => $optionalMetadata) { if (!isset($validOptionalMetadatas[$optionalMetadataKey]) && !isset($validLongOptionalMetadatas[$optionalMetadataKey])) { throw new \InvalidArgumentException("They key name provided {$optionalMetadataKey} is not supported"); } $key = strlen($optionalMetadataKey) == 1 ? $optionalMetadataKey : $validLongOptionalMetadatas[$optionalMetadataKey]; switch ($key) { case 'd': if (!is_numeric($optionalMetadata)) { throw new \InvalidArgumentException('date_happened must be a number'); } break; case 'h': case 'k': case 's': if (strlen($optionalMetadata) > 0) { throw new \InvalidArgumentException("{$validOptionalMetadatas[$key]} must be a string"); } break; case 'p': if (!in_array($optionalMetadata, ['normal', 'low'])) { throw new \InvalidArgumentException('priority must be one of "normal" or "low"'); } break; case 't': if (!in_array($optionalMetadata, ['error', 'warning', 'info', 'success'])) { throw new \InvalidArgumentException('alert_type must be one of "error", "warning", "info", or "success"'); } break; case '#': if (is_array($optionalMetadata)) { $datagramTags = []; foreach ($optionalMetadata as $i => $tag) { if (is_array($tag)) { $datagramTags[] = array_keys($tag)[0] . ":" . array_values($tag)[0]; } elseif (is_string($i) && !is_numeric($i)) { $datagramTags[] = $i . ':' . $tag; } else { $datagramTags[] = $tag; } } $optionalMetadata = implode(",", $datagramTags); } break; } $datagram .= "|{$key}:{$optionalMetadata}"; } $this->sender->send($datagram); }
/** * 发送验证码 * @param string $mobile * @param string $bag */ public function send($mobile, $bag = 'default') { // 取缓存 $code = $this->getCodeFromCache($mobile, $bag, function () use($mobile, $bag) { $code = $this->generateCode(); // 保存缓存, 在这儿缓存, 有效期按第一次发送时开始计时 $this->putCodeToCache($mobile, $code, $bag); return $code; }); return $this->sender->send($mobile, $this->buildCodeMessage($code)); }