code: def get_product_access_tokens(self, app_ids=[], package_ids=[]):
          
          if not app_ids and not package_ids: return
  
          resp = self.send_job_and_wait(MsgProto(EMsg.ClientPICSAccessTokenRequest),
                                        {
                                         'appids': map(int, app_ids),
                                         'packageids': map(int, package_ids),
                                        },
                                        timeout=15
                                       )
  
          if resp:
              return {'apps': dict(map(lambda app: (app.appid, app.access_token), resp.app_access_tokens)),
                      'packages': dict(map(lambda pkg: (pkg.appid, pkg.access_token), resp.package_access_tokens)),
                     }
docs: Get access tokens
  
          :param app_ids: list of app ids
          :type app_ids: :class:`list`
          :param package_ids: list of package ids
          :type package_ids: :class:`list`
          :return: dict with ``apps`` and ``packages`` containing their access tokens, see example below
          :rtype: :class:`dict`, :class:`None`
  
          .. code:: python
  
              {'apps':     {123: 'token', ...},
               'packages': {456: 'token', ...}
              }