Php Omniture API中断请求fast
我使用AdobeDigitalMarketing API()进行API调用以获取Omniture数据 此脚本工作正常: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
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