service_user = $service_user; $fastchat_config = get_addon_config('fastchat'); $this->connection = @stream_socket_client('tcp://127.0.0.1:' . ($fastchat_config['register_port'] + 100)); if (!$this->connection) { $this->error = '内部推送通道连接失败,请确保Workerman服务已经启动!'; } } /** * 初始化 * @access public * @return Chat */ public static function init($service_user = 1) { if (is_null(self::$instance)) { self::$instance = new static($service_user); } return self::$instance; } public function user($data) { $this->user = $this->array_to_string($data); return $this; } /** * 解析数组为字符串,方便传输 * @access public * @return string */ public function array_to_string($data) { if (is_array($data)) { if (is_array(current($data))) { $this->error = '数组参数只能是一维数组!如 array(1,2,3)'; return ''; } else { $data = implode(',', $data); } } return trim($data, ','); } public function admin($data) { $this->admin = $this->array_to_string($data); return $this; } public function massager($data) { $this->massager = $this->array_to_string($data); return $this; } public function user_group($data) { $this->user_group = $this->array_to_string($data); return $this; } public function admin_group($data) { $this->admin_group = $this->array_to_string($data); return $this; } public function send($content) { if ($this->error) { return array('errcode' => -1, 'errmsg' => $this->error); } $service_user = Db::name('fastchat_service_user') ->where('id', $this->service_user) ->where('status', '1') ->where('deletetime', NULL) ->find(); if (!$service_user) { return array('errcode' => -1, 'errmsg' => '服务账号不存在!'); } // 准备服务号访问令牌 $service_user['token'] = \fast\Random::uuid(); // 加密 token $config = \think\Config::get('token'); $token = hash_hmac($config['hashalgo'], $service_user['token'], $config['key']); Db::name('fastchat_service_user') ->where('id', $service_user['id']) ->update(['token' => $token]); $send_text = [ 'c' => 'Message', 'a' => 'push_message', 'data' => [ 'service_user' => $service_user['id'], 'content' => $content, 'user' => $this->user, 'admin' => $this->admin, 'massager' => $this->massager, 'user_group' => $this->user_group, 'admin_group' => $this->admin_group, 'token' => $service_user['token'] ] ]; $send_text = json_encode($send_text) . "\n"; if (fwrite($this->connection, $send_text) !== false) { fclose($this->connection); return array('errcode' => 0); } } }