getProductAccessToken(apps, packages, callback) {
		let args = ['appTokens', 'packageTokens', 'appDeniedTokens', 'packageDeniedTokens'];
		return StdLib.Promises.timeoutCallbackPromise(10000, args, callback, (resolve, reject) => {
			this._send(EMsg.ClientPICSAccessTokenRequest, {
				packageids: packages,
				appids: apps
			}, (body) => {
				let appTokens = {};
				let packageTokens = {};

				(body.app_access_tokens || []).forEach((app) => {
					appTokens[app.appid] = app.access_token;
				});

				(body.package_access_tokens || []).forEach((pkg) => {
					packageTokens[pkg.packageid] = pkg.access_token;
				});

				resolve({
					appTokens,
					packageTokens,
					appDeniedTokens: body.app_denied_tokens || [],
					packageDeniedTokens: body.package_denied_tokens || []
				});
			});
		});
	}
Get access tokens for some apps and/or packages
@param {int[]} apps - Array of appids
@param {int[]} packages - Array of packageids
@param {function} [callback] - First arg is an object of (appid => access token), second is the same for packages, third is array of appids for which tokens are denied, fourth is the same for packages
@returns {Promise<{appTokens: Object<string, string>, packageTokens: Object<string, string>, appDeniedTokens: number[], packageDeniedTokens: number[]}>}