pzs / nav-online-invoice

PHP interface for Online Invoice Data Reporting System of Hungarian Tax Office (NAV)
MIT License
147 stars 53 forks source link

convertToXml $removeNamespaces hiányosság #63

Closed MosaicZoli closed 1 year ago

MosaicZoli commented 1 year ago

Szia. A queryTaxpayer osztályban használod a $removeNamespaces változót, viszont a queryInvoiceData és InvoiceOperations-ön belül a convertToXml függvényben nem veszi figyelembe (ps2: névteret figyelmen kívül hagyta, értékkel együtt kitörölte). Ezért beletettük, viszont a következő jövőbeli frissítések miatt, jó lenne, ha te is bele tudnád tenni, így nem íródik felül a mi általunk módosított változat.

/**
     * Számla dekódolása (base64 és opcionálisan gzip)
     *
     * @param  string  $base64data
     * @param  boolean $isCompressed
     * @return \SimpleXMLElement
     */

public static function convertToXml($base64data, $isCompressed = false, $removeNamespaces = false) {
        $isCompressed = ($isCompressed === true or (string)$isCompressed === 'true');

        $data = base64_decode($base64data);

        if ($isCompressed) {
            $data = gzdecode($data);
        }

        if($removeNamespaces) {
            $data = XmlUtil::removeNamespacesFromXmlString($data);
        }

        return simplexml_load_string($data);
    }

    /**
     * queryInvoiceData operáció (1.8.5 fejezet)
     *
     * A /queryInvoiceData egy számlaszám alapján működő lekérdező operáció, amely a számlán szereplő kiállító és a vevő
     * oldaláról is használható. Az operáció a megadott számlaszám teljes adattartalmát adja vissza a válaszban.
     *
     * @param  array             $invoiceNumberQuery     Az invoiceNumberQuery-nek megfelelően összeállított lekérdezési adatok
     * @param  boolean           [$returnDecodedInvoiceData = false]  invoiceDataResult helyett a dekódolt számla XML-t adja vissza a metódus
     * @return \SimpleXMLElement  $invoiceDataResultXml A válasz XML invoiceDataResult része vagy a dekódolt számla XML
     */
    public function queryInvoiceData($invoiceNumberQuery, $returnDecodedInvoiceData = false, $removeNamespaces = false) {
        $requestXml = new QueryInvoiceDataRequestXml($this->config, $invoiceNumberQuery);
        $responseXml = $this->connector->post("/queryInvoiceData", $requestXml);

        $result = $responseXml->invoiceDataResult;

        if ($returnDecodedInvoiceData) {
            if (empty($result->invoiceData)) {
                return null;
            }
            $isCompressed = $result->compressedContentIndicator;
            return InvoiceOperations::convertToXml($result->invoiceData, $isCompressed, $removeNamespaces);
        }

        return $result;
    }
pzs commented 1 year ago

Szia, Köszi a visszajelzést. A modul fejlesztésekor alapfelvetésem az volt, hogy csak a modul csak a kommunikációban segít, de a szakmai (adat) XML összeállítása, vagy visszaolvasás teljes mértékben a modult használó hatásköre, így azon szigorúan semmi módosítást nem hajt végre (azaz namespace-eket se törli), viszont lehetőség van a biztosított util használatára. A queryTaxpayer-nél a namespace törlés amiatt van jelen, mert az nem szakmai xml, hanem még az API része. Ennek a végén írtam erről pár sort: https://github.com/pzs/nav-online-invoice/blob/master/docs/xml_namespaces.md Esetleg a 3. paraméter helyett használhatod a következő sort is:

$invoice = $reporter->queryInvoiceData($invoiceNumberQuery, true);
$invoice = XmlUtil::removeNamespaces($invoice);

Ezt viszont a jövőben beleteszem a dokumentációba is.