wFirma problem ze skryptem


(northwest) #1

Witam serdecznie,

Ściągnąłem sobie skrypt ze strony wFirma.pl do fakturowania (i wysyłania faktury na maila). Mam problem z uruchomieniem go :confused: gdy próbuję go uruchomić skrypt twierdzi że nie ma danych (a są podane). Wiecie może dlaczego?

Kod wygląda tak:

<?php

$C = new SoapClient(null, array(

    'uri' => "http://api.wfirma.pl/",

    'location' => "http://api.wfirma.pl",

    'trace' => 1,

));


$r = $C->login('demo','demo');

if ($r['status'] == 'OK') {

    $sid = $r['response'];

    // tutaj wywołanie innych metod ...

} else {

    echo "Wystąpił błąd: {$r['status']}: {$r['response']}";

}

$invoiceHeader = array( 


    'date' => '2009-01-01', // data wystawienia, format (YYYY-MM-DD)


    'disposaldate' => '2009-01-01', // data sprzedaży, format (YYYY-MM-DD)


    'paymentdate' => '2009-01-15', // termin płatności, format (YYYY-MM-DD)


    'paymentmethod' => 'transfer', // metoda płatności, możliwe wartości to cash, 

                                        // transfer i compensation


    'paid' => 0, // opcjonalna flaga 0/1 czy faktura została

                                        // opłacona w całości, 0 jest wartością domyślną


    'description' => 'Tutaj moje uwagi', // opcjonalne uwagi na fakturze, (max.320 znaków)


    'auto_send' => '0', // opcjonalna flaga 0/1 czy wysłać fakturę na

                                        // adres email kontrahenta, 

                                        // domyślna wartość to 0


    'lump' => 'rate20', // opcjonalna stawka ryczałtu dla korzystających 

                                        // z pakietu Księgowość Premium, 

                                        // możliwe wartości to: rate 20

                                        // rate17, rate8_5, rate5_5, rate3, 

                                        // domyślna wartość, jeżeli nie zostanie

                                        // podana, to rate20


    'tax_evaluation_method' => 'netto', // określenie metody naliczania cen na fakturze, 

                                        // ceny w pozycjach faktury pozycji podawane

                                        // netto lub brutto, 

                                        // domyślna wartość to netto




    'type' => 'normal', // opcjonalnie type faktury, możliwe wartości:

                                        // normal - faktura VAT (wartość domyślna)

                                        // proforma - faktura proforma

);


// dane nabywcy

$contractorDetails = array( 

    "name" => "Jan Kowalski", // nazwa pełna kontrahenta


    "nip" => "1231231212", // NIP kontrahenta, bez spacji i kresek


    "street" => "Kwiatowa 5", // Ulica, nr domu i lokalu


    'zip' => '59-413', // kod pocztowy


    'city' => 'Wrocław', // miejscowość


    'email' => 'jan@kowalski-test.com',// opcjonalnie adres email


    'add' => 1 // flaga 0/1 czy dopisać kontrahenta do katalogu

                                       // (dopasowanie po NIP, jeśli taki kontrahent

                                       // już jest to nie zostanie 

                                       // dodany ani zaktualizowany) 

);


// pozycje towarów i usług na fakturze

$invoiceContents = array(

    array(       

        'name' => 'Mysz komputerowa', // nazwa towaru, max. 1024 znaki


        'price' => '35,12', // cenna netto lub brutto w zależności 

                                       // od ustawienia tax_evaluation_method w

                                       // invoiceHeader, format NUMERIC(15,2)


        'unit' => 'szt.', // jednostka, max 64 znaki


        'count' => '1', // ilość towaru lub usługi, format NUMERIC(15,4) 

                                       // max. 15 cyfr i dwie cyfry po przecniku


        'vatcode' => '22', // opcjonalnie stawka VAT, 

                                       // możliwe wartości to

                                       // 22, 7, 3, 0, WDT, EXP, NP, ZW, 

                                       // domyślna wartość: 22


        'classification' => '', // opcjonalnie kod PKWiU dla obniżonych 

                                       // stawek VAT


        'discount' => '25,00' // opcjonalnie rabat w pozycji faktury, 

                                       // format NUMERIC(2,2)

    ) 

);



// zmienne $sid, $invoiceHeader i $contractorDetails i $invoiceContents z poprzednich przykładów


// wystawienie faktury

$r = $C->addInvoice($sid, $invoiceHeader, $contactorDetails, $invoiceContents);


if ($r['status']=='OK') {

    $invoice_id = $r['response'];

    $id_faktury = $r['object_id']; 

    // id faktury mozna wykorzystac np do wysyłania 

    // faktury na email lub pobrania PDF z fakturą

    // (patrz metody sendInvoice() i downloadInvoice())

} else {

    // coś poszło nie tak

    print_r($r['status']);

    print_r($r['response']);

}    



// $sid - id sesji zwrócony przez metodę login()

// $invoice_id - ID faktury zwrócony przez metodę addInvoice();


// dodatkowe ustawienia (opcjonalne)

$options = array(

    'page' => 'invoice', // którą stronę faktury załączyć, możliwe wartości to:

                                    // invoice - oryginał

                                    // invoicecopy - kopia

                                    // all - wszystkie, wartość domyślna


    'leaflet' => 0, // flaga 0/1 czy dołączyć druczek przelewu

                                    // działa tylko dla metody płatności przelew, 

                                    // domyślnie 0


    'duplicate' => 0, // flaga 0/1 czy nadrukować słowo duplikat 

                                    // z aktualną datą, 

                                    // domyślnie 0

);



// generujemy plik PDF z wydrukiem

$response = $C->sendInvoice($sid, $invoice_id, $option);


if ($r['status'] == 'OK') {

    // w odpowiedzi przychodzi URL do pliku PDF, URL jest ważny przez 10 minut

    $url_pliku_pdf = $r['response'];

} else {

    // coś poszło nie tak

    switch ($r['status']) {

        case 'ERR':

            echo "Nieprawidłowwy ID faktury";

            break;

        case 'FATAL_ERROR':

            echo "Błąd usługi - skontaktuj się z administratorem";

            break;

    }

}



// $sid - id sesji zwrócony przez metodę login()

// $invoice_id - ID faktury zwrócony przez metodę addInvoice();


// dodatkowe ustawienia (opcjonalne)

$options = array(

    'subject' => 'Wystawiono fakturę',  

                                    // Temat wiadomości email, domyślnie 'Faktura od NAZWA_FIRMY'


    'page' => 'invoice', // którą stronę faktury załączyć, możliwe wartości to:

                                    // invoice - oryginał

                                    // invoicecopy - kopia

                                    // all - wszystkie, wartość domyślna


    'leaflet' => 0, // flaga 0/1 czy dołączyć druczek przelewu

                                    // działa tylko dla metody płatności przelew, 

                                    // domyślnie 0


    'duplicate' => 0, // flaga 0/1 czy nadrukować słowo duplikat 

                                    // z aktualną datą, 

                                    // domyślnie 0


    'cc' => '', // opcjonalnie adres email DW

    'bcc' => '', // opcjonalnie adres email UDW


    'body' => 'Przesyłam fakturę. Pozdrowienia'

                                    // treść wiadomości email, jeśli nie będzie wpisana to 

                                    // zostanie użyta treść zdefiniowana w ustawieniach firmy

);


$response = $C->sendInvoice($sid, $invoice_id, 'spam@mediait.pl');


switch ($r['response']) {

    case 'OK': // faktura wysłana

        break;

    case 'ERR': // nie ma takiej faktury, sprawdź $invoice_id

        break;

    case 'FATAL_ERROR': // coś poszło nie tak - skontaktuj się z nami

        break;

}


$C->logout($sid);

Skrypt nie wykrywa danych... Widzicie jakiś błąd?

Northwest


(Sitemaster) #2

Co konkretnie wyświetla? może wklej te komunikaty tutaj.

-na końcu brakuje ?>

-czy masz włączone rozszerzenie SOAP ?


(northwest) #3

to co podałem to jest cały plik php - więc jak coś to można go uruchomić...

Array ( [name] => Pole nie może być puste [street] => Pole nie może być puste [zip] => Pole nie może być puste [city] => Pole nie może być puste ) [invoiceContents] => Array ( ) )

http://wfirma.pl/artykul/api-interfejs-dla-programistow - przykład brałem z tego


(Sitemaster) #4

Tamten kod zawierał liczne błędy. Po paru poprawkach, oczyszczony z komentarzy ...i wygląda, że działa:

<?php

header('Content-Type: text/html; charset=utf-8');


$C = new SoapClient(null, array(

    'uri' => 'http://api.wfirma.pl/',

    'location' => 'http://api.wfirma.pl',

    'trace' => 1,

));


$r = $C->login('demo','demo');

if ($r['status'] == 'OK') $sid = $r['response'];

else echo "Wystąpił błąd: {$r['status']}: {$r['response']}";


$invoiceHeader = array( 

'date' => '2010-02-02',

'disposaldate' => '2009-01-01',

'paymentdate' => '2009-01-15',

'paymentmethod' => 'transfer',

'paid' => 0,

'description' => 'Tutaj moje uwagi',

'auto_send' => '0',

'lump' => 'rate20',                             

'tax_evaluation_method' => 'netto',                                        

'type' => 'normal'

);



$contractorDetails = array( 

'name' => 'Jan Kowalski',

'nip' => '1231231212',

'street' => 'Kwiatowa 5',

'zip' => '59-413',

'city' => 'Wrocław',

'email' => 'jan@kowalski-test.com',  

'add' => 1

);


$invoiceContents = array(

array(

'name' => 'Mysz komputerowa',

'price' => '35,12',

'unit' => 'szt.',

'count' => '1',

'vatcode' => '22',

'classification' => '',

'discount' => '25,00'

)

);


$r = $C->addInvoice($sid, $invoiceHeader, $contractorDetails, $invoiceContents);


if ($r['status']=='OK') {

    $invoice_id = $r['response'];

    $id_faktury = $r['object_id']; 

    // patrz metody sendInvoice() i downloadInvoice()

//downloadInvoice();

} else {

    print_r($r['status']);

    print_r($r['response']);

}    



$options = array(

'page' => 'invoice',                   

'leaflet' => 0,    

'duplicate' => 0

);


if(isset($invoice_id)){

$response = $C->sendInvoice($sid, $invoice_id, $options);


if ($r['status'] == 'OK') $url_pliku_pdf = $r['response'];

else switch ($r['status']) {

        case 'ERR':

            echo 'Nieprawidłowwy ID faktury';

            break;

        case 'FATAL_ERROR':

            echo 'Błąd usługi - skontaktuj się z administratorem';

            break;

}



$options = array(

'subject' => 'Wystawiono fakturę',

'page' => 'invoice',

'leaflet' => 0,

'duplicate' => 0,

'cc' => '',

'bcc' => '',

'body' => 'Przesyłam fakturę. Pozdrowienia'

);


$response = $C->sendInvoice($sid, $invoice_id, 'spam@mediait.pl');


switch ($r['response']) {

    case 'OK':

        break;

    case 'ERR': 

        break;

    case 'FATAL_ERROR':

        break;

}


}


$C->logout($sid);


?>

ps. kodowanie pliku ustaw na UTF-8 bez BOM


(Adam Rostoczynski) #5

dzieki za wytropienie bledow, dokumentacje na stronie poprawimy

Pozdrawiam

AR