如何在收到POST响应时运行php?

时间:2016-05-12 21:51:47

标签: php xml api post response

我正在收集表单上的数据并通过POST将数据发送到收集和分发表单主管的外部服务器。外部服务器将XML响应发送回我的服务器。

我已将响应的重定向URL设置为我的响应php脚本。我希望脚本解析XML响应并触发其中一个字段中提供的像素。我也希望系统在每次收到回复时都给我发电子邮件。

How the system is layed out

我的问题

如果我手动输入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;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);
?>

1 个答案:

答案 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);
        }
    } 
}
    ?>