Експорт на документи към онлайн магазин (OpenCart, WooCommerce и др.)
Чрез активиране на тази функция (налична във версия 8.12 на "Фактурник") можете да автоматизирате вашата дейност, като изпълнявате допълнителни действия във вашия уеб сайт или онлайн магазин след запис на документ във "Фактурник". Например след запис на документ можете да маркирате поръчката като платена, да съхраните номера и датата на фактурата към поръчката или да изпратите писмо към клиент и др. След попълване на полето "Callback URL" във "Фактурник" и след определено действие в софтуера данните се изпращат автоматично в JSON формат към посочения URL. Скриптът който се изпълнява след зареждането на този URL може да обработи входящите данни и да извърши желаното действие. Тази функция е полезна и в случаите когато част от данните се съдържат в повече от една системата и трябва да се синхронизират след промяна във "Фактурник".
Данни изпращани от Фактурник
Данните които се изпращат от Фактурник се предават чрез асоциативен масив, който съдържа други асоциативни масиви (operation - данни за операцията, header - главната информация за документа, customer - информация за клиента, seller - информация за издателя на фактурата и lines - съдържа редовете на документа):
Описание на предаваните данни в масива operation.
Ключ | Възможни стойности | Описание |
type | document-save | операция |
Описание на предаваните данни в масива header.
Ключ | Възможни стойности | Описание |
type | invoice, proforma, receipt, protocol, delivery | тип на документа - фактура, проформа, стокова разписка, протокол или доставка |
kind | 0, 1, 2 | Нормална фактура (0), кредитно известие (1), дебитно известие (2) |
id | цяло число | ID на документа във Фактурник |
number | цяло число | Номер на документа (10 цифри) |
object_id | цяло число | ID Търговски обект (номерация) във Фактурник - основен ТО (0) |
date_issued | текст (форм. YYYY-MM-DD) | Дата на издаване на документа |
date_tax_event | текст (форм. YYYY-MM-DD) | Дата на данъчно събитие |
transaction_place | текст | Място на сделката |
completed_by | текст | Съставител |
attached_doc_number | цяло число | Към проформа фактура номер |
attached_doc_date | текст (форм. YYYY-MM-DD) | Към проформа фактура от дата |
vat_percent | число | Данъчна ставка (%) |
subtotal | число | Данъчна основа |
vat_sum | число | ДДС сума |
total | число | Общо |
payment_method_id | цяло число | Код на начин на плащане |
payment_method_name | текст | Начин на плащане |
iban | текст | IBAN - при плащане по банка |
transaction_number | текст | № на транзакция при VPOS |
invoice_currency_id | цяло число | ID на валута при издаване на Invoice |
invoice_fixing | текст | Фиксинг за валута на Invoice |
notes | текст | Допълнителни бележки и пояснения |
note_reason | текст | Основание за кредитно/дебитно известие |
null_reason | текст | Основание за нулева ставка или неначисл. на ДДС |
cancel | 0, 1 | Анулиран (1), в противен случай (0) |
payment_status | 0, 1, 2 | Неплатен (0), Платен (1), Частично платен (2) |
eshop_id | цяло число | Код на онлайн магазин във Фактурник |
order_id | текст или число | Номер на поръчка |
order_date | текст (форм. YYYY-MM-DD) | Дата на поръчка |
courier_id | цяло число | Код на куриер |
waybill | текст | Номер на товарителница |
Описание на предаваните данни в масива customer.
Ключ | Възможни стойности | Описание |
id | цяло число | ID на клиент във Фактурник |
name | текст | Име на клиент |
company_number | текст | ЕИК/ЕГН на клиент |
vat_id | текст | Данъчен номер (ИН по ДДС) |
country_id | цяло число | Код на държава |
place | текст | Населено място от дан. адрес |
address | текст | Данъчен адрес (без нас. място) |
phone | текст | Телефон |
email | текст | Email |
director | текст | МОЛ |
recipient | текст | Получател |
Описание на предаваните данни в масива seller.
Ключ | Възможни стойности | Описание |
name | текст | Име на доставчик |
company_number | текст | ЕИК/ЕГН на доставчик |
vat_id | текст | Данъчен номер (ИН по ДДС) |
place | текст | Населено място от дан. адрес |
address | текст | Данъчен адрес (без нас. място) |
phone | текст | Телефон |
email | текст | Email |
director | текст | МОЛ |
Масивът lines е съставен от подмасиви, като всеки подмасив съдържа информация за съответния ред. Съдържание на първия подмасив в lines.
Ключ | Възможни стойности | Описание |
item_id | цяло число | ID на стока/услуга във Фактурник |
line_number | цяло число | Номер на ред в документ |
item_name | текст | Наименование на стока/услуга |
item_name_second | текст | Наименование на английски език на стока/услуга |
code | текст | Артикулен номер |
barcode | текст | Баркод номер |
measure_id | цяло число | ID на мерна единица |
measure | текст | Мерна единица |
price | число | Ед. цена без ДДС |
quantity | число | Количество |
discount_percent | число | Процент търговска отстъпка |
amount | число | Обща сума за реда |
item_consignment | число | Партида |
item_expiration | число | Срок на годност |
Данни предавани от "Фактурник"
Данните се предават в JSON формат (utf-8 кодировка) със заглавка от тип съдържание (ContentType) със стойност application/json. Това е един примерен отговор. В следващия раздел сме публикували примерен PHP скрипт, който обработва тези данни.
Array
(
[operation] => Array
(
[type] => document-save
)
[header] => Array
(
[type] => invoice
[kind] => 0
[id] => 1
[number] => 0000000001
[object_id] => 0
[date_issued] => YYYY-MM-DD
[date_tax_event] => YYYY-MM-DD
[transaction_place] => Бургас
[completed_by] => Име на създател
[attached_doc_number] => 1
[attached_doc_date] => YYYY-MM-DD
[vat_percent] => 0
[subtotal] => 60.00
[vat_sum] => 0.00
[total] => 60.00
[payment_method_id] => 2
[payment_method_name] => по банков път
[iban] => BG22FINV....................
[transaction_number] =>
[invoice_currency_id] => 0
[invoice_fixing] => 1
[notes] => плащане за ...
[note_reason] => основание за кр.известие
[null_reason] => основание за 0% ДДС
[cancel] => 0
[payment_status] => 1
[eshop_id] => 1
[order_id] => 1
[order_date] => YYYY-MM-DD
[courier_id] => 0
[waybill] =>
)
[customer] => Array
(
[id] => 1
[name] => Име на клиент
[company_number] => ЕИК
[vat_id] => ИН по ДДС
[country_id] => 17
[place] => Населено място от дан. адрес
[address] => Данъчен адрес (без нас. място)
[phone] => телефон
[email] => email
[director] => МОЛ
[recipient] => Получател
)
[seller] => Array
(
[name] => Име на доставчик
[company_number] => ЕИК
[vat_id] => ИН по ДДС
[place] => Населено място от дан. адрес
[address] => Данъчен адрес (без нас. място)
[phone] => телефон
[email] => email
[director] => МОЛ
)
[lines] => Array
(
[0] => Array
(
[item_id] => 0
[line_number] => 1
[item_name] => Наименование на стока/услуга
[item_name_second] =>
[code] => арт. номер
[barcode] => баркод
[measure_id] => 90
[measure] => год.
[price] => ед. цена без ДДС
[quantity] => к-во
[discount_percent] => % отстъпка
[amount] => Общо за реда
[item_consignment] => Партида
[item_expiration] => Срок на годност
)
)
)
Примерен код, който обработва резултата
<?php
error_reporting(E_ALL);
define('SOFTWARE_SECRET_KEY', 'тук въведете вашия ключ'); // Секретен ключ за "Callback URL" от Фактурник
if(isset($_SERVER['HTTP_APIAUTHENTICATION'])){
if($_SERVER['HTTP_APIAUTHENTICATION'] != SOFTWARE_SECRET_KEY){
$array = array('ok'=>'false', 'message'=>'Wrong API key!');
echo json_encode($array);
exit;
}
}
// Вместо 0.0.0.0 въведете вашето IP и откоментирайте кода ако желаете да защитите достъпа по IP адрес.
/*
define('ALLOWED_IPS', array('0.0.0.0'));
if(count(ALLOWED_IPS) > 0){
if(!in_array($_SERVER['REMOTE_ADDR'], ALLOWED_IPS)){
$array = array('ok'=>'false', 'message'=>'IP address '.$_SERVER['REMOTE_ADDR'].' is not allowed!');
echo json_encode($array);
exit;
}
}
*/
$json = file_get_contents('php://input');
$json = json_decode($json, true);
// Примерен достъп до данните
//$doc_type = $json['header']['type'];
//$customer_name = $json['customer']['name'];
//$item_name = $json['lines'][0]['item_name']; // Поставете във for цикъл ако стоките са повече от 1
// Oткоментирайте реда, за да се уверите, че получавате данни.
// След запис на фактура потърсете файл myfile.json в папката на скрипта.
// file_put_contents('myfile.json', json_encode($json));
// ако всичко е наред се изпраща отговор към Фактурник.
$array = array('ok'=>'true');
// ако има някакви проблеми се изпраща този ред вместо горния, като съобщението се визуализира във Фактурник
//$array = array('ok'=>'false', 'message'=>'Съобщение за грешка!');
echo json_encode($array);
?>