Hallo liebe PHP-Community,
ich arbeite für einen Online-Versand dessen Seite nun mit WooCommerce betrieben werden soll. Dabei soll für die Bestellabwicklung und WaWi die Platform Afterbuy genutzt werden. Dafür sollen die Bestellungen aus dem WooCommerce API and die XML-Schnittstelle von Afterbuy gesendet werden.
WooCommerce-API Doku: http://woocommerce.github.io/woocomm.../#introduction
Afterbuy-API Doku:http://xmldoku.afterbuy.de/dokued/
Mein bisheriger Code ruft alle Bestellungen ab und speichert sie in einem JSON format welches dann in XML (Zeile 21) konvertiert wird.
Folgendes Format in XML wird von der afterbuy api akzeptiert:
Mein Problem nun: Funktioniert das so wie ich es mir denke? Wie bekomme ich die XML meiner Bestellungen in das von afterbuy akzeptierte Format? Funktioniert das mit der API ansprechen einfach so mit den Streams oder ist es mit cURL besser bzw. richtiger?
ich arbeite für einen Online-Versand dessen Seite nun mit WooCommerce betrieben werden soll. Dabei soll für die Bestellabwicklung und WaWi die Platform Afterbuy genutzt werden. Dafür sollen die Bestellungen aus dem WooCommerce API and die XML-Schnittstelle von Afterbuy gesendet werden.
WooCommerce-API Doku: http://woocommerce.github.io/woocomm.../#introduction
Afterbuy-API Doku:http://xmldoku.afterbuy.de/dokued/
Mein bisheriger Code ruft alle Bestellungen ab und speichert sie in einem JSON format welches dann in XML (Zeile 21) konvertiert wird.
PHP-Code:
<?php
require_once( 'lib/woocommerce-api.php' );
$options = array(
'debug' => true,
'return_as_array' => false,
'validate_url' => false,
'timeout' => 30,
'ssl_verify' => false,
);
try{
//In WP API aktivieren und API-Key erzeugen
$client = new WC_API_Client( 'http://ekershop.de', 'api_key', 'api_pw', $options );
//Bestellungen aus WooCommerce
//Müssen noch verarbeitet werden
$orderXML = new SimpleXMLElement('<rootTag/>');
to_xml($orderXML, $client->orders->get( null, array( 'status' => 'completed' ) ));
//XML mit PHP Stream senden
$xml_str = $orderXML;
$url = 'https://api.afterbuy.de/afterbuy/ABInterface.aspx';
$post_data = array('xml' => $xml_str);
$stream_options = array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: text/xml\r\n",
'content' => http_build_query($post_data)));
$context = stream_context_create($stream_options);
$response = file_get_contents($url, null, $context);
} catch(WP_API_Client_Exception $e){
echo $e->getMessage() . PHP_EOL;
echo $e->getCode() . PHP_EOL;
if ( $e instanceof WC_API_Client_HTTP_Exception ) {
print_r( $e->get_request() );
print_r( $e->get_response() );
}
}
function to_xml(SimpleXMLElement $object, array $data)
{
foreach ($data as $key => $value) {
if (is_array($value)) {
$new_object = $object->addChild($key);
to_xml($new_object, $value);
} else {
$object->addChild($key, $value);
}
}
}
HTML-Code:
<?xml version="1.0" encoding="utf-8"?> <Request> ---- Globale Tags <AfterbuyGlobal> <PartnerID> Integer </PartnerID> <PartnerPassword> String </PartnerPassword> <UserID> String </UserID> <UserPassword> String </UserPassword> <CallName> UpdateSoldItems </CallName> <DetailLevel> 0 </DetailLevel> <ErrorLanguage> String </ErrorLanguage> </AfterbuyGlobal> ---- Aufrufspezifische Tags <Orders> <Order> <OrderID> Integer </OrderID> <ItemID> Integer </ItemID> <UserDefinedFlag> Integer </UserDefinedFlag> <AdditionalInfo> String </AdditionalInfo> <MailDate> Date </MailDate> <ReminderMailDate> Date </ReminderMailDate> <UserComment> String </UserComment> <OrderMemo> String </OrderMemo> <InvoiceMemo> String </InvoiceMemo> <InvoiceNumber> Integer </InvoiceNumber> <OrderExported> Boolean </OrderExported> <InvoiceDate> Date </InvoiceDate> <HideOrder> Boolean </HideOrder> <Reminder1Date>Date </Reminder1Date> <Reminder2Date> Date </Reminder2Date> <FeedbackDate> Date </FeedbackDate> <XmlDate> Date </XmlDate> <BuyerInfo> <ShippingAddress> <UseShippingAddress> Integer </UseShippingAddress> <FirstName> String </FirstName> <LastName>String </LastName> <Company> String </Company> <Street> String </Street> <PostalCode> String </PostalCode> <City> String </City> <Country> String </Country> </ShippingAddress> </BuyerInfo> <PaymentInfo> <PaymentMethod> String </PaymentMethod> <PaymentDate> Date </PaymentDate> <AlreadyPaid> Float </AlreadyPaid> <PaymentAadditionalCost> Float </PaymentAadditionalCost> <SendPaymentMail> Boolean </SendPaymentMail> </PaymentInfo> <ShippingInfo> <ShippingMethod> String </ShippingMethod> <ShippingGroup> String </ShippingGroup> <ShippingCost> Float </ShippingCost> <DeliveryDate> Date </DeliveryDate> <eBayShippingCost> Float </eBayShippingCost> <SendShippingMail> Boolean </SendShippingMail> </ShippingInfo> <VorgangsInfo> <VorgangsInfo1> String </VorgangsInfo1> <VorgangsInfo2> String </VorgangsInfo2> <VorgangsInfo3> String </VorgangsInfo3> </VorgangsInfo> </Order> </Orders> </Request>
Kommentar