Ankündigung

Einklappen
Keine Ankündigung bisher.

WooCommerce Bestellungen über API an XML-Schnittstelle von Afterbuy senden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • WooCommerce Bestellungen über API an XML-Schnittstelle von Afterbuy senden

    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.

    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->getnull, 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($urlnull$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);
            }   
        }   
    }
    Folgendes Format in XML wird von der afterbuy api akzeptiert:

    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>
    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?

  • #2
    Zitat von kutu Beitrag anzeigen
    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?
    Hast du es ausprobiert? Welche Alternativen von den genannten hast du ausprobiert? Bekommst du Fehlermeldungen oä? Hast du gegoogelt?
    (Die Streamvariante ist allgemeingültiger, curl verwendet man im http-Bereich, da hat man mitunter Vorteile die Dinge zu erledigen als mit Stream- oder Socketlösungen. Es gibt aber kein "richtiger", was funktioniert wird schon nicht verkehrt sein.)

    Du stellst eine Fachfrage zu einem Softwareprodukt, die beim Hersteller/Anbieter oder einem dedizierten Forum besser aufgehoben wäre - hast du dergleichen versucht?
    (Ich persönlich kenne diese API nicht, vermutlich geht es den meisten hier so. Je exotischer die Software ist, desto unwahrscheinlicher wirst du in einem Allgemeinforum Hilfe finden.)
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar

    Lädt...
    X