Php Omniture API中断请求fast

Php Omniture API中断请求fast,php,adobe-analytics,Php,Adobe Analytics,我使用AdobeDigitalMarketing API()进行API调用以获取Omniture数据 此脚本工作正常: define('OMNITURE_USERNAME', 'XXX'); define('OMNITURE_SECRET', 'XXX'); define('ROOT', dirname(__FILE__)); require_once(ROOT.'/lib/AdobeDigitalMarketing/Autoloader.php'); Adobe

我使用AdobeDigitalMarketing API()进行API调用以获取Omniture数据

此脚本工作正常:

   define('OMNITURE_USERNAME', 'XXX');
   define('OMNITURE_SECRET', 'XXX');
   define('ROOT', dirname(__FILE__));

   require_once(ROOT.'/lib/AdobeDigitalMarketing/Autoloader.php');
   AdobeDigitalMarketing_Autoloader::register();

   $adm = new AdobeDigitalMarketing_Client();
   $adm->authenticate(OMNITURE_USERNAME, OMNITURE_SECRET);

   echo $adm->getCompanyApi()->getEndpoint('Ford EU');

   $reportApi = $adm->getReportApi();


   $response = $reportApi->queueRanked(array(
      'reportSuiteID' => 'fmeuesprod',
      'date'     => date('Y-m-d', strtotime("-1 day")),
      'metrics'  => array(
          array('id' => 'instances'),
      ),
      'elements' => array(
          array('id' => 'prop11'),
      ),
      'segments' => array(
         array('id' => 'prop11', 'selected' => array('brand:vehicle:brochures:interactive'))
      ),
      'segment_id' => 'dw:80632'

   ));

   $reportId = $response['reportID'];
   //echo $reportId;

   //$reportId = '67854594';

   do {
       $report = $reportApi->getReport($reportId);
       sleep(2);
   } while ($report['status'] == 'not ready');

   print_r($report['report']); 
但如果我打过几次电话,请回复:

Fatal error: Uncaught exception 'AdobeDigitalMarketing_Api_ReportError' with message 'A system error has occurred' in /var/www/OmnitureAPI/lib/AdobeDigitalMarketing/Api/Report.php:202 Stack trace: #0 /var/www/OmnitureAPI/lib/AdobeDigitalMarketing/Api/Report.php(84): AdobeDigitalMarketing_Api_Report->returnResponse(Array) #1 /var/www/OmnitureAPI/test.php(43): AdobeDigitalMarketing_Api_Report->getReport(67856255) #2 {main} thrown in /var/www/OmnitureAPI/lib/AdobeDigitalMarketing/Api/Report.php on line 202
如果我等待大约5分钟,然后按F5,脚本将工作,如果再次按F5,则返回错误。。。 API的文档并没有显示任何关于这个问题的信息,我每次都需要用不同的日期调用这个脚本

有办法解决这个问题吗

谢谢

我发现了问题:

API 1.3现在已“过时”,如果在登录前更改API,所有工作:

    $adm = new AdobeDigitalMarketing_Client();

    $adm->getHttpClient()->setOption('api_version', '1.4');

    $adm->authenticate(OMNITURE_USERNAME, OMNITURE_SECRET);

谢谢大家的帮助和评论

我有直接使用Adobe的API编写自己的脚本的经验,但我对您发布的框架没有任何经验,因此我没有多少帮助,但是。。API PoV中的错误实际上没有多大帮助,因为它没有显示Adobe返回的实际错误。既然你说它是有效的,但如果你以后做得太早,那就不行了,我猜为请求生成的
Nonce
值会有问题。基本上,Adobe API的结构要求任何人、任何地方、任何时候发出的每个请求都有一个唯一的id。如果发生冲突,Adobe API将以错误响应。尽管如此,我认为这在Adobe方面还是有问题的,因为通常我会对
当前值
执行类似
$companyName.''.''.$randomString.''.'.dechex(time())
的操作,但有时我还是会遇到这个错误。但不管怎么说,这只是我的第一个猜测,因为你提到了它有时是如何工作的,但有时不是。我建议作为第一步,你更新库中的代码,从Adobe API调用中输出原始响应,这样你就可以看到Adobe实际返回的错误消息。@crayron->nonce是WSSE用户令牌的一部分,当与当前z时间一起使用时,如果有人能够在稍后某个点破坏SSL加密,则这一点非常重要,以防止重播攻击。如果您看到的错误不是因为这个原因,我们不会检查冲突,如果调用方决定进行不太安全的调用,我们无法完全阻止它们,我认为您可能会将其与我们用于数据收集的cache buster url方案相关联。如果您看到错误,请发布它们,我很乐意查看。@Zenth->此脚本的运行方式是它进行调用,然后进入一个循环,等待报告准备就绪。除非第一次调用失败,否则不需要重新运行它。该脚本不应被视为生产就绪,它是开始使用API的起点。您仍然需要管理拐角故障案例并正确记录。这个脚本比较旧,可能有一个新的,但是它使用了这里记录的旧的1.3API