我正在收集表单上的数据并通过POST将数据发送到收集和分发表单主管的外部服务器。外部服务器将XML响应发送回我的服务器。
我已将响应的重定向URL设置为我的响应php脚本。我希望脚本解析XML响应并触发其中一个字段中提供的像素。我也希望系统在每次收到回复时都给我发电子邮件。
如果我手动输入XML响应并将其加载到我的系统中,系统就可以工作 浏览器。发送响应时,它不会执行脚本 背景。
使用tshark
我一直在监控流量,每次提交表单时都会遇到php脚本,但没有执行任何操作。
<?php
//Example Post from Lead Server
$server_output2=
'<?xml version="1.0" encoding="UTF-8"?>
<response>
<status>Unmatched</status>
<lead_id>69</lead_id>
<tracking_pixel>https://demo.leadportal.com/genericPostlead.php?TYPE=79&amp;SRC=pixeltestingforcege</tracking_pixel>
</response>';
//Live Server Response
$server_output = file_get_contents('php://input');
if (!empty($server_output)) {
$xml = simplexml_load_string($server_output) or die("Error: Cannot create object");
}
//XML Parse of Lead Server Response
$status=$xml->status;
$lead_id=$xml->lead_id;
$pixel=$xml->tracking_pixel;
?>
<!-- This is the HTML Section to test and Display the Status and LeadID -->
The status is <span style="font-weight:bold;color:red;"><?php if(!empty($status)) echo $status; else{echo "n/a";} ?></span> and the lead id is <span style="font-weight:bold;color:red;"><?php if(!empty($lead_id)) echo $lead_id; else{echo "n/a";} ?></span>
<br>
<!-- This is the Pixel Fire from the Response-->
<h3>Pixel Here!
<iframe src="<?php echo $pixel; ?>" height="1" width="1" frameborder="1" style="border:medium double red"></iframe></h3>
<?php
$to = "email@gmail.com";
$subject = "XML Response";
$message ="
Hello
$xml
$server_output
$server_output2
";
$headers = 'From: webmaster@gmail.com' . "\r\n" .
'Reply-To: no-reply@gmail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to,$subject,$message,$headers);
?>
答案 0 :(得分:0)
由于第三方服务器和我们使用带有忍者形式的wordpress,我最终在这个项目中遇到了很多限制。
基本上,第三方服务无法将其响应发送到特定位置。它只是回复了原始数据发布的发布回复。
除非在调试模式下,否则Ninja表单无法捕获响应。在调试模式下,它创建了一个必须解析的数组
我创建了一个插件来点击Ninja Forms Web Hooks插件并从中拉出响应。
然后我将XML响应解析为Log并获取必要的值,包括像素URL。
我最终使用cURL来激发像素
<?php
public function fire_pixel ( $response ) {
$filename = './webhook.log';
$xml_array = $response['body'];
if (!empty($xml_array)) {
$xml = simplexml_load_string($xml_array) or die("Error: Cannot create object");
$xml_status = $xml->status;
$lead_id = $xml->lead_id;
$pixel = $xml->tracking_pixel;
$xml_error = $xml->error;
if ($xml_error == ''){
$xml_error = "No Error";
}
if ($lead_id == ''){
$lead_id = "Error";
}
if ($pixel == ''){
$pixel_message = "No Tracking Pixel";
}
else {
$pixel_message = '';
}
$log = "Date: ".date("F j, Y, g:i a").PHP_EOL.
"Status: ".$xml_status.PHP_EOL.
"Lead ID: ".$lead_id.PHP_EOL.
"Pixel: ".$pixel.$pixel_message.PHP_EOL.
"Error: ".$xml_error.PHP_EOL.
"-------------------------".PHP_EOL;
file_put_contents($filename, $log, FILE_APPEND);
if (!empty($pixel)) {
$pixel_results = file_get_contents($pixel);
$date = date(DATE_RFC2822);
$current = file_get_contents($filename);
$current .= $date;
$current .= $pixel_results;
$current .= " : cURL : cURL STARTED | cURL started\n";
file_put_contents($filename, $current);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $pixel);
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$current = file_get_contents($filename);
$current .= $date . " : cURL : cURL STATUS | " . $http_code . "\n";
file_put_contents($filename, $current);
curl_close($ch);
}
}
}
?>