Ukázka práce s FlexiBee REST API v jazyce PHP

Pokud máte vytvořen vlastní internetový obchod nebo jen jednoduchý objednávkový formulář a rádi byste jej propojili s FlexiBee, můžete využít technologii FlexiBee Sync.

Společný kód

Aby byly jednotlivé ukázky jednodušší, připravíme si společný kód, který nám připraví prostředí:

// konfigurace serveru
$host = "https://demo.flexibee.eu:5434";
$firma = "demo";

require_once "HTTP/Request.php";
$req =& new HTTP_Request();
// Nastavení autorizačních údajů (jméno a heslo)
$req->setBasicAuth("winstrom", "winstrom");

A případně i vypíše chyby:

// Následující kód již jen vizualizuje, zda se operace povedla
if (PEAR::isError($response)) {
  printf ("Při komunikaci se serverem nastala síťová chyba: %s", $response->getMessage());
} else {
  // HTTP požadavek uspěl:

  if ($req->getResponseCode() != 200) {
    // Součástí odpovědi je JSON zpráva, která obsahuje důvod selhání
    $error = json_decode($req->getResponseBody(), true);
    printf ("Při operaci nastala chyba (HTTP %d: %s): %s", 
      $req->getResponseCode(), 
      $req->getResponseReason(), 
      $error["winstrom"]["message"]);
  } else {
    echo "Operace provedena";
  }
}

Vytvoření dokladu

Doklad můžete vytvořit odesláním jednoduchého XML (ve formátu FlexiBee XML), které zařídí založení dokladu.

// Požadavek odešleme ve formátu XML
$req->setURL($host."/c/".$firma."/faktura-vydana.xml");
// Nastavení samotné operace
$req->setMethod(PUT);

// Nastavení parametrů pro založení jednoduché faktury
$req->setBody('
<winstrom version="1.0">
  <faktura-vydana>
    <typDokl>code:FAKTURA</typDokl>
    <firma>code:WINSTROM</firma>
    <popis>Moje faktura v PHP</popis>
    <sumZklZakl>1000.0</sumZklZakl>
    <bezPolozek>true</bezPolozek>
  </faktura-vydana>
</winstrom>
');

// Proveď samotnou operaci
$response = $req->sendRequest();

Identifikátor vytvořené faktury je předán několika způsoby (více viz podporované HTTP operace):

  • HTTP Hlavičkou Location: http://demo.flexibee.eu:5434/c/demo/faktura-vydana/105
  • Součást odpovědi ve formátu FlexiBee XML:
    <winstrom version="1.0">
      <success>true</success>
      <result>
        <id>105</id>
      </result>
    </winstrom>
    

To samé můžete provést i ve formátu JSON:

// Požadavek odešleme ve formátu JSON
$req->setURL($host."/c/".$firma."/faktura-vydana.json");
// Nastavení samotné operace
$req->setMethod(PUT);

// Nastavení parametrů pro založení jednoduché faktury
$faktura = array(
    "winstrom" => array (
        "faktura-vydana" => array(
            "typDokl" => "code:FAKTURA",
            "firma" => "code:WINSTROM",
            "popis" => "Moje Faktura v PHP",
            "sumDphZakl" => "1000.0",
            "bezPolozek" => "true",
        )
    )
);

$req->setBody(json_encode($faktura));

// Proveď samotnou operaci
$response = $req->sendRequest();

Pokud bychom tedy chtěli nově vytvořenou fakturu převést do PDF, stačí nám k tomu tento kód:

// po založení záznamu je v hlavičce Location adresa nově vytvořeného dokumentu.
// Když na konec tohoto URL přidáme .pdf a provedeme na něj dotaz GET, dostaneme PDF formu faktury.
$url = $req->getResponseHeader("Location").".pdf";

$req->setURL($url);
$req->setMethod(GET);
$req->sendRequest();

// nastavíme, že posíláme PDF a pošleme jej.
header("Content-type: application/pdf");
print ($req->getResponseBody());

Export faktury do ISDOC

Doklad můžete přečíst v mnoha formátech včetně XML, JSON, PDF či ISDOC (přehled podporovaných formátů):


// Požadavek chceme ve formátu ISDOCX
$req->setURL($host."/c/".$firma."/faktura-vydana/19.isdocx");
// Nastavení samotné operace
$req->setMethod(GET);

// Proveď samotnou operaci
$response = $req->sendRequest();

// Odešleme výsledek do prohlížeče uživatele
header("Content-Type: application/x-isdocx");
print ($req->getResponseBody());

Smazání dokladu

Pokud chcete smazat doklad, stačí nad ním vyvolat HTTP operaci DELETE:

// Nastavení URL. JSON na konci je proto, abychom dostali případnou 
// chybovou odpověď ve formát JSON.
$req->setURL($host."/c/".$firma."/faktura-vydana/19.json");
// Nastavení samotné operace
$req->setMethod(DELETE);

// Proveď samotnou operaci
$response = $req->sendRequest();