Я новичок по большей части в мире PHP. В настоящее время я пытаюсь связать API Silverpop с формами на наших страницах. Ниже приведен код, который у меня есть.Передача данных Silverpop через curl возвращает Сессия истек или недействительна
Проблема заключается в том, что, хотя аутентификация работает просто отлично, всякий раз, когда я пытаюсь выполнить POST XML, требуемый API, мне всегда возвращается ошибка, которая говорит: «Сессия истёк или недействительна». Я буду отмечать области в коде, где происходит ошибка.
Я провел последние пол дня, исследуя, и я не могу понять, что это такое, я делаю неправильно или то, что я могу потерять. Мне было сказано неопределенно, что это связано с выходом в браузере перед функцией заголовка PHP, например cURL, но это мало помогает, так как я тестирую это в чистом (без html) php-файле.
<?php
// Vars
$firstname = 'a';
$lastname = 'a';
$email = '[email protected]';
// cURL
function curl($url,$header,$postbody) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postbody);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
///# SILVERPOP API #///
// SILVERPOP API URLs
// get_token uses oauth to retrieve an access token (works just fine)
$get_token = 'https://api1.silverpop.com/oauth/token?*inforemoved*';
$xmlapi = 'https://api1.silverpop.com/XMLAPI?Authorization=';
// XML STRINGS
$xml_post = '<Envelope><Body><AddRecipient><LIST_ID>database#</LIST_ID><CREATED_FROM>1</CREATED_FROM><SEND_AUTOREPLY>true</SEND_AUTOREPLY><UPDATE_IF_FOUND>true</UPDATE_IF_FOUND><COLUMN><NAME>Name</NAME><VALUE>'.$firstname.'</VALUE></COLUMN><COLUMN><NAME>LastName</NAME><VALUE>'.$lastname.'</VALUE></COLUMN><COLUMN><NAME>Email</NAME><VALUE>'.$email.'</VALUE></COLUMN><COLUMN><NAME>Lead Source</NAME><VALUE>Lead_SqueezePage_5Questions</VALUE></COLUMN></AddRecipient></Body></Envelope>';
$xml_done = '<Envelope><Body><Logout/></Body></Envelope>';
// HEADER VALUES
$h_access = 'Content-Type:x-www-form-urlencoded';
$h_api = 'Content-Type:text/xml;charset=UTF-8';
// Get API Access token
$auth = curl($get_token,$h_access,'');
// Pull access_token from the return string
$auth = explode('"', $auth);
for ($i=0; $i < count($auth); $i++) {
if ($auth[$i] == "access_token") {
$access_token = $auth[$i + 2];
break;
}
}
//Append token to URL unless auth failed, then die
if ($access_token != NULL) {
$xmlapi .= $access_token;
} else {
// Logout API session - SESSION ERROR HERE
$logout = curl($xmlapi,$h_api,$xml_done);
//echo 'Authentication Failed!';
die;
}
// Send Customer Data - SESSION ERROR HERE
$inject = curl($xmlapi,$h_api,$xml_post);
// Logout API Session - SESSION ERROR HERE
$logout = curl($xmlapi,$h_api,$xml_done);
///# END SILVERPOP API #///
?>
Спасибо! Это было действительно полезно для быстрой и простой реализации контактной формы, где я не хотел добавлять Composer и совершенно новую библиотеку в очень простой проект ... – Jake