Woocommerce Live PHP Order Feed в XML - PullRequest
       19

Woocommerce Live PHP Order Feed в XML

0 голосов
/ 14 ноября 2018

Хорошо, поэтому я пытался разобраться с API последние пару часов и, похоже, тоже не могу, кажется, это единственный способ вывести детали заказа в определенном порядке или в наименее похожий ... это JSON, но он мне нужен в XML.

Это формат, который мне нужен:

<xml>
  <order>
    <billingInfo>
      <method>Paypal</method>
      <firstName>Paul</firstName>
      <lastName>Smith</lastName>
      <company/>
      <address>Address</address>
      <address2/>
      <city>City</city>
      <state>State</state>
      <postcode>A12 3BC</postcode>
      <country>GB</country>
      <email>JohnSmith@email.com</email>
      <phone>07123456789</phone>
    </billingInfo>
    <shippingInfo>
      <firstName>Paul</firstName>
      <lastName>Smith</lastName>
      <company/>
      <address>Address</address>
      <address2/>
      <city>City</city>
      <state>State</state>
      <postcode>A12 3BC</postcode>
      <country>GB</country>
      <shippingTotal>123</shippingTotal>
      <shippingTax>12</shippingTax>
      <shippingMethod>Shipping Method</shippingMethod>
    </shippingInfo>
    <customerInfo>
      <email/>
      <firstName/>
      <lastName/>
      <username/>
      <taxExempt>true/false</taxExempt>
    </customerInfo>
    <orderInfo>
      <orderId>1234</orderId>
      <transactionId/>
      <customerIp>1.234.56.789</customerIp>
      <datePaid/>
      <taxTotal>100</taxTotal>
      <grandTotal>500.00</grandTotal>
      <customerNote/>
      <taxMethod>VAT 20%</taxMethod>
      <lineItems>
        <item>
          <productId>1234</productId>
          <quantity>1</quantity>
          <name>
            Product Name
          </name>
          <subtotal>500</subtotal>
          <subtotalTax>100</subtotalTax>
        </item>
      </lineItems>
    </orderInfo>
  </order>

Конечная цель - запустить этот скрипт на задании CRON ежечасно, чтобы получить все заказы.

Спасибо за любую помощь / совет.

1 Ответ

0 голосов
/ 16 ноября 2018

Итак, я понял, вот мое решение для любого другого в будущем, кому может понадобиться помощь в получении данных заказа Woocommerce через XML.

Вот базовый пример того, какого рода данные вы можете получить:

<?php


header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

    include(__DIR__ . "/../wp-load.php");
    global $woocommerce;

    $filters = array(
        'post_status' => 'any',
        'post_type' => 'shop_order',
        'posts_per_page' => -1,
        'paged' => 1,
        'orderby' => 'modified',
        'order' => 'ASC'
    );

    $loop = new WP_Query($filters);

    while ($loop->have_posts()) {

        $loop->the_post();

        $order = new WC_Order(get_the_ID());
        $customer = new WC_Customer($order->get_order_number());        

        foreach ($order->get_items() as $key => $lineItem) {

            $output .= '<xml>';
            $output .= '<paymentInfo>';
            $output .= '<method>' . $order->payment_method . '</method>';
            $output .= '</paymentInfo>';
            $output .= '<personalDetails>';
            $output .= '<firstName>' . $order->billing_first_name . '</firstName>';
            $output .= '<lastName>' . $order->billing_last_name . '</lastName>';
            $output .= '</personalDetails>';

            $output .= '<item>';
            $output .= '<productId>' . $lineItem['product_id'] . '</productId>';
            $output .= '<quantity>' . $lineItem['quantity'] . '</quantity>';
            $output .= '<name>' . $lineItem['name'] . '</name>';
            $output .= '<subtotal>' . $order->cart_tax . '</subtotal>';
            $output .= '<subtotalTax>' . $order->total_tax . '</subtotalTax>';
            $output .= '</item>';

           $output .= '</xml>';

           echo $output;

        }
    }
?>

А на выходе:

<xml>
  <paymentInfo>
    <method>other</method>
  </paymentInfo>
  <personalDetails>
    <firstName>first K</firstName>
    <lastName>second K</lastName>
  </personalDetails>
  <item>
    <productId>561</productId>
    <quantity>1</quantity>
    <name>
      Woodlets Premium Wood Pellets - Full Pallet - 980kg
    </name>
    <subtotal>0</subtotal>
    <subtotalTax>0</subtotalTax>
  </item>
</xml>
...