dbojdo / wFirma

wFirma SDK
MIT License
14 stars 15 forks source link

Call to a member function code() on null #50

Open Qrzysio opened 6 months ago

Qrzysio commented 6 months ago

Jest jakiś problem z instalacją zależności, który skutkuje błędem: Fatal error: Uncaught Error: Call to a member function code() on null in vendor\webit\w-firma-api\src\Entity\Infrastructure\ResponseValidator.php:26

Odpowiedź z API $response->status() jest null, a w ResponseValidator.php:26 mamy:

switch ($response->status()->code()) {

Replikacja

composer require webit/w-firma-api

Instalują się następujące zależności:

  - Installing doctrine/instantiator (2.0.0): Extracting archive
  - Installing doctrine/lexer (3.0.1): Extracting archive
  - Installing jms/metadata (2.8.0): Extracting archive
  - Installing psr/http-message (1.1): Extracting archive
  - Installing psr/http-client (1.0.3): Extracting archive
  - Installing php-http/promise (1.3.1): Extracting archive
  - Installing php-http/httplug (2.4.0): Extracting archive
  - Installing phpstan/phpdoc-parser (1.29.0): Extracting archive
  - Installing psr/http-factory (1.1.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.5.0): Extracting archive
  - Installing symfony/options-resolver (v6.4.7): Extracting archive
  - Installing psr/simple-cache (1.0.1): Extracting archive
  - Installing psr/log (3.0.0): Extracting archive
  - Installing nyholm/psr7 (1.8.1): Extracting archive
  - Installing kriswallsmith/buzz (1.2.1): Extracting archive
  - Installing jms/serializer (3.30.0): Extracting archive
  - Installing webit/w-firma-api (2.6.1): Extracting archive

Po instalacji próba wystawienia nowej faktury (używając kodu z README) kończy się błędem:

Fatal error:  Uncaught Error: Call to a member function code() on null in vendor\webit\w-firma-api\src\Entity\Infrastructure\ResponseValidator.php:26
Stack trace:
#0 vendor\webit\w-firma-api\src\Entity\Infrastructure\Buzz\BuzzRequestExecutor.php(75): Webit\WFirmaSDK\Entity\Infrastructure\ResponseValidator->validate(Object(Webit\WFirmaSDK\Entity\Request), Object(Webit\WFirmaSDK\Entity\Response))
#1 vendor\webit\w-firma-api\src\Entity\DefaultEntityApi.php(31): Webit\WFirmaSDK\Entity\Infrastructure\Buzz\BuzzRequestExecutor->execute(Object(Webit\WFirmaSDK\Entity\Request))
#2 vendor\webit\w-firma-api\src\Invoices\InvoicesApi.php(29): Webit\WFirmaSDK\Entity\DefaultEntityApi->add(Object(Webit\WFirmaSDK\Invoices\Invoice))
#3 wystawFakture.php(96): Webit\WFirmaSDK\Invoices\InvoicesApi->add(Object(Webit\WFirmaSDK\Invoices\Invoice))
#4 {main}
  thrown in vendor\webit\w-firma-api\src\Entity\Infrastructure\ResponseValidator.php on line 26

Rozwiązanie

Rozwiązaniem jest zainstalowanie doctrine/annotations

composer require doctrine/annotations

Instalują się następujące paczki:

  - Installing psr/cache (3.0.0): Extracting archive
  - Installing doctrine/annotations (2.0.1): Extracting archive

Teraz faktura wystawia się prawidłowo.

Kod źródłowy testu

use Webit\WFirmaSDK\Auth\ApiKeysAuth;
use Webit\WFirmaSDK\Entity\ModuleApiFactory;
use Webit\WFirmaSDK\Entity\EntityApiFactory;
use Webit\WFirmaSDK\Contractors\Contractor;
use Webit\WFirmaSDK\Contractors\InvoiceAddress;
use Webit\WFirmaSDK\Invoices\InvoicesContent;
use Webit\WFirmaSDK\Goods\GoodId;
use Webit\WFirmaSDK\Invoices\Payment;
use Webit\WFirmaSDK\Payments\PaymentMethod;
use Webit\WFirmaSDK\Invoices\Type;

try {
    $auth = new ApiKeysAuth(WFIRMA_ACCESS_KEY, WFIRMA_SECRET_KEY, WFIRMA_APP_KEY, WFIRMA_COMPANY_ID);
    $entityApiFactory = new EntityApiFactory();
    $entityApi = $entityApiFactory->create($auth);
    $apiFactory = new ModuleApiFactory($entityApi);
    $api = $apiFactory->invoicesApi();
} catch (\Exception $e) {
    var_dump("# Error catch 1", $e->getMessage());
}

try {
    $invoice = \Webit\WFirmaSDK\Invoices\Invoice::forContractor(
        new Contractor(
            'TEST TEST TEST client name',
            'SKROCONA NAZWA',
            '7582148393', // vat no
            null, // regon
            new InvoiceAddress(
                'ul. Mokra 12',
                '01-006',
                'Warszawa'
            )
        ),
        Payment::create(PaymentMethod::transfer()),
        Type::vat(),
        new Webit\WFirmaSDK\Series\SeriesId(WFIRMA_SERIA_ID),
    );
} catch (\Exception $e) {
    var_dump("# Error catch 2", $e->getMessage());
}

try {
    $invoice->addInvoiceContent(
        InvoicesContent::fromName(
            'TEST TEST',
            'szt.',
            3,
            123.32,
            23
        )
    );
} catch (\Exception $e) {
    var_dump("# Error catch 3", $e->getMessage());
}

try {
    var_dump("PROBA DODANIA");
    $invoice = $api->add($invoice);
    var_dump("Faktura dodana");
} catch (\Exception $e) {
    var_dump("# Error catch 4", $e->getMessage());
}