Plugin Fedex pro WooCommerce

Pluginů na propojení WooCommerce a Fedex existuje několik. Eshopu lighttoys.cz, který denně posílá do zahraničí několik balíků, ale žádný z nich nevyhovoval, a tak mě oslovili, abych pro ně vytvořil plugin, který by uměl vše, co od automatického propojení WooCommerce a Fedex očekávali.

Fedex má XML Api, přes které je možné do systému automaticky nahrávat dokumenty a zadávat zásilky.  Existuje také šikovný PHP Wrapper, který obsahuje třídy pro jednotlivé metody API (automaticky vygenerované dle WSDL specifikace).

Co tedy plugin umí?

  • v seznamu objednávek přibylo tlačítko „Request Fedex Shipment
  • po kliknutí se zobrazí předvyplněné údaje z objednávky, kde je možné veškeré údaje měnit. Velikosti balíků, způsoby dopravy a další parametry je možné předem definovat.
  • po kliknutí na Order shipment se nejprve přes API nahraje faktura (buď z WooCommerce, nebo zvolený dokument), následně se pošle příkaz na zadání nové dopravy do systému Fedex.
  • po dokončení se zobrazí odkaz na stažení PDF se štítkem a k objednávce se uloží Fedex tracking code
  • je možné také soubor přímo vytisknout na Fedex tiskárně ve formátu ZPL II

Tímto způsobem se do systému Fedex nahrávají během dne jednotlivé zásilky.

Na konci dne administrátor může odeslat Pickup request – požadavek na vyzvednutí balíků. Plugin obsahuje také stránku s nastavením, kde je možné definovat API klíče a další možnosti.

 

Pokud by vás zajímala ukázka kódu, třída, která zajišťuje nahrání faktury přes API do systému Fedex vypadá cca takto:


<?php namespace WOO_FEDEX; use FedEx\UploadDocumentService\Request; use FedEx\UploadDocumentService\ComplexType; use FedEx\UploadDocumentService\SimpleType; class Fedex_Document_Upload extends Fedex { public $upload_request; public $request; public $reply; /** * Fedex_Document_Upload constructor. */ function __construct() { parent::__construct(); // Add empty request $this->request = new Request();

        $this->upload_request = new ComplexType\UploadDocumentsRequest();
        // Set credentials

        $userCredential = new ComplexType\WebAuthenticationCredential();
        $userCredential
            ->setKey($this->key)
            ->setPassword($this->password);
        $webAuthenticationDetail = new ComplexType\WebAuthenticationDetail();
        $webAuthenticationDetail->setUserCredential($userCredential);



        $clientDetail = new ComplexType\ClientDetail();
        $clientDetail
            ->setAccountNumber($this->account_number)
            ->setMeterNumber($this->meter_number);
        $version = new ComplexType\VersionId();
        $version
            ->setMajor(11)
            ->setIntermediate(0)
            ->setMinor(0)
            ->setServiceId('cdus');


        $this->upload_request->WebAuthenticationDetail->UserCredential->Key = $this->key;
        $this->upload_request->WebAuthenticationDetail->UserCredential->Password = $this->password;
        $this->upload_request->ClientDetail->AccountNumber = $this->account_number;
        $this->upload_request->ClientDetail->MeterNumber = $this->meter_number;

        // Set transaction Detail
        $transactionDetail = new ComplexType\TransactionDetail();
        $transactionDetail->setCustomerTransactionId(rand());
        $this->upload_request->setTransactionDetail($transactionDetail);

        $this->upload_request->setWebAuthenticationDetail($webAuthenticationDetail);
        $this->upload_request->setClientDetail($clientDetail);
        $this->upload_request->setOriginCountryCode(Init::$settings['company_country_code']);
        $this->upload_request->setDestinationCountryCode('US');
        $this->upload_request->setUsage(SimpleType\DocumentUsageType::_ELECTRONIC_TRADE_DOCUMENTS);
        $this->upload_request->setVersion($version);

    }

    /**
     * Add document to the Documents array
     * @param $file
     */
    public function add_document($file) {
        $document = new ComplexType\UploadDocumentDetail();
        $document->setLineNumber(1);
        $document->setDocumentType('COMMERCIAL_INVOICE');
        $document->setFileName('5.pdf');
        $document->setDocumentContent(file_get_contents($file));
        $this->upload_request->setDocuments([$document]);
    }

    /**
     * Upload documents
     */
    public function upload() {
        return $this->request->getUploadDocumentsReply($this->upload_request);
    }
}



Pokud potřebujete propojit WooCommerce s Fedex nebo vytvořit jinou funkcionalitu pro WordPress nebo WooCommerce, neváhejte mě kontaktovat

Přidat komentář