Проблема обратной передачи XML - PullRequest
0 голосов
/ 11 июня 2010

У меня есть сценарий, предназначенный для синтаксического анализа постбэков XML от Ultracart, сейчас он просто выгружает его в таблицу MySQL.Сценарий работает нормально, если я указываю на XML-файл на моем локальном хосте, но, используя 'php: // input', он, похоже, ничего не захватывает.Мои журналы показывают, что apache возвращает 200 после сообщения, поэтому я понятия не имею, что может быть не так или как решить эту проблему .. вот код:

  $doc = new DOMDocument();
  $doc->loadXML($page);

  $handle = fopen("test2/".time().".xml", "w+");
  fwrite($handle,trim($page)); // it doesn't save this either :'(
  fclose();

  require_once('includes/database.php');

  $db = new Database('localhost', 'user', 'password', 'db_name');
  $data = array();

   $exports = $doc->getElementsByTagName("export");
   foreach ($exports as $export) {
     $orders = $export->getElementsByTagName("order");
     foreach($orders as $order) {
        $data['order_id'] = $order->getElementsByTagName("order_id")->item(0)->nodeValue;
        $data['payment_status'] = $order->getElementsByTagName("payment_status")->item(0)->nodeValue;
        $date_array = explode(" ",$order->getElementsByTagName("payment_date_time")->item(0)->nodeValue);

            if ($date_array[1] == 'JAN') { $date_array[1] = '01'; }
            if ($date_array[1] == 'FEB') { $date_array[1] = '02'; }
            if ($date_array[1] == 'MAR') { $date_array[1] = '03'; }
            if ($date_array[1] == 'APR') { $date_array[1] = '04'; }
            if ($date_array[1] == 'MAY') { $date_array[1] = '05'; }        // converts Ultracart date to
            if ($date_array[1] == 'JUN') { $date_array[1] = '06'; }        // MySQL date
            if ($date_array[1] == 'JUL') { $date_array[1] = '07'; }
            if ($date_array[1] == 'AUG') { $date_array[1] = '08'; }
            if ($date_array[1] == 'SEP') { $date_array[1] = '09'; }
            if ($date_array[1] == 'OCT') { $date_array[1] = '10'; }
            if ($date_array[1] == 'NOV') { $date_array[1] = '11'; }
            if ($date_array[1] == 'DEC') { $date_array[1] = '12'; }

        $data['payment_date'] = $date_array[2]."-".$date_array[1]."-".$date_array[0];
        $data['payment_time'] = $date_array[3];

        //... we'll skip this, there are 80 some elements

        $data['discount'] = $order->getElementsByTagName("discount")->item(0)->nodeValue;
        $data['distribution_center_code'] = $order->getElementsByTagName("distribution_center_code")->item(0)->nodeValue;
            }
        }
    }
        $db->insert('order_history',$data);
} else die('ERROR: Token Check Failed!');

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

Не видя код выше этой точки, я бы посоветовал вам сразу вывести вывод и посмотреть, действительно ли вы получаете XML. Я сомневаюсь, что проблема в вашем разборе, но в получении обратной передачи. Глядя на документацию по ультракартам, мне кажется, что они не передают тело xml как параметр post, а, вероятно, как HTTP PUT, что довольно странно.

http://php.net/manual/en/features.file-upload.put-method.php

Я бы сделал ставку на большинстве хостингов и т. Д., Поддержка PUT довольно ограничена или не поддерживается по умолчанию. Я бы посмотрел там первым.

Josh

0 голосов
/ 11 июня 2010

Сценарий работает нормально, если я указываю его на файл XML на моем локальном хосте, но с помощью 'php: // input' он, похоже, ничего не захватывает.

Почему быВы ожидаете, что php://input "что-нибудь захватит"?Вы можете использовать php://input только для чтения из стандартного ввода, если PHP запускается из командной строки, или для извлечения данных запроса (например, данных запроса POST или PUT HTTP), за исключением нескольких частей POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...