/** * Creates a token for connecting to an OpenTok session. In order to authenticate a user * connecting to an OpenTok session, the client passes a token when connecting to the session. * <p> * For testing, you can also use the <a href="https://dashboard.tokbox.com/projects">OpenTok * dashboard</a> page to generate test tokens. * * @param string $sessionId The session ID corresponding to the session to which the user * will connect. * * @param array $options This array defines options for the token. This array includes the * following keys, all of which are optional: * * <ul> * * <li><code>'role'</code> (string) — One of the constants defined in the RoleConstants * class. The default role is publisher</li> * * <li><code>'expireTime'</code> (int) — The timestamp for when the token expires, * in milliseconds since the Unix epoch. The default expiration time is 24 hours * after the token creation time. The maximum expiration time is 30 days after the * token creation time.</li> * * <li><code>'data'</code> (string) — A string containing connection metadata * describing the end-user. For example, you can pass the user ID, name, or other data * describing the end-user. The length of the string is limited to 1000 characters. * This data cannot be updated once it is set.</li> * * </ul> * * @return string The token string. */ public function generateToken($sessionId, $options = array()) { // unpack optional arguments (merging with default values) into named variables $defaults = array('role' => Role::PUBLISHER, 'expireTime' => null, 'data' => null); $options = array_merge($defaults, array_intersect_key($options, $defaults)); list($role, $expireTime, $data) = array_values($options); // additional token data $createTime = time(); $nonce = microtime(true) . mt_rand(); // validate arguments Validators::validateSessionIdBelongsToKey($sessionId, $this->apiKey); Validators::validateRole($role); Validators::validateExpireTime($expireTime, $createTime); Validators::validateData($data); $dataString = "session_id={$sessionId}&create_time={$createTime}&role={$role}&nonce={$nonce}" . ($expireTime ? "&expire_time={$expireTime}" : '') . ($data ? "&connection_data=" . urlencode($data) : ''); $sig = $this->_sign_string($dataString, $this->apiSecret); return "T1==" . base64_encode("partner_id={$this->apiKey}&sig={$sig}:{$dataString}"); }