Fatura Kalemleri ve Ödemeler
Fatura kalemlerini düzenleyen, bölen ve ödeme kayıtlarını tutan dört uç.
Genel Bakış
Bu dört uç faturanın para tarafını yürütür. İkisi kalemlerle ilgilenir: düzenlemek ve bir kısmını ayrı bir faturaya taşımak. İkisi de ödeme kayıtlarıyla.
Kalem yazma ucu toplu çalışır: aynı çağrıda kalem eklenir, güncellenir ve silinir. Bittiğinde toplamlar baştan hesaplanır, yani ara toplam, vergi ve genel toplam elle yazılmaz.
Ödeme kaydı faturanın durumuna tek yönlü etki eder: bakiye kapanınca fatura ödenmiş olur, ama bir ödemeyi silmek durumu geri çevirmez.
Referans
Kalemleri Yazma
Faturanın kalemlerini tek çağrıda ekler, günceller ve siler.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/invoices/1212/items' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"items":[{"item_id":2811,"description":"Hosting","quantity":1,"amount":12.5}],"deleted_ids":[2812]}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/invoices/${id}/items`, {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
items: [
{ item_id: 2811, description: 'Hosting Plan', quantity: 1, amount: 12.5 },
{ description: 'Setup Fee', quantity: 1, amount: 5 },
],
deleted_ids: [2812],
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/invoices/' . $id . '/items');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'items' => [
['item_id' => 2811, 'description' => 'Hosting Plan', 'quantity' => 1, 'amount' => 12.5],
['description' => 'Setup Fee', 'quantity' => 1, 'amount' => 5],
],
'deleted_ids' => [2812],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Gondermediginiz mevcut kalem SILINMEZ; silmek icin numarasini silinecekler listesine koyun.
Api::Invoices()->UpdateInvoiceItems([
'id' => $id,
'items' => [['item_id' => 2811, 'description' => 'Hosting', 'quantity' => 1, 'amount' => 12.5]],
'deleted_ids' => [2812],
]);Kalemleri Bölme
Seçtiğiniz kalemleri yeni bir faturaya taşır.
curl -X POST 'https://panel.ornek.com/api/v1/admin/invoices/1228/items/split' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"item_ids":[2835]}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/invoices/${id}/items/split`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ item_ids: [2835] }),
});
const { data } = await res.json();
console.log(data.new_invoice_id);$ch = curl_init('https://panel.ornek.com/api/v1/admin/invoices/' . $id . '/items/split');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['item_ids' => [2835]]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Yeni fatura ODENMEMIS acilir ve musteriye kendiliginden BILDIRILMEZ.
$r = Api::Invoices()->SplitInvoiceItems(['id' => $id, 'item_ids' => $picked])['data'];
Api::Invoices()->SendInvoiceNotification([
'id' => $r['new_invoice_id'], 'template' => 'invoice-created',
]);Ödeme Kaydetme
Faturaya elle bir ödeme kaydı ekler.
curl -X POST 'https://panel.ornek.com/api/v1/admin/invoices/1212/payments' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"amount":12.5,"payment_method":"Balance","transaction_id":"TXN-1042"}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/invoices/${id}/payments`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: 12.5,
payment_method: 'Balance',
currency_id: 840,
transaction_id: 'TXN-1042',
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/invoices/' . $id . '/payments');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'amount' => 12.5,
'payment_method' => 'Balance',
'transaction_id' => 'TXN-1042',
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Islem numarasi MUKERRERI onler; ag hatasinda cagriyi tekrarlamak ikinci kayit acmaz.
Api::Invoices()->AddInvoicePayment([
'id' => $id,
'amount' => 12.5,
'payment_method' => 'Balance',
'transaction_id' => $txn,
]);Ödemeyi Silme
Bir ödeme kaydını faturadan kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/invoices/1212/payments/31' \
-H "Authorization: Bearer $API_KEY"const res = await fetch(`https://panel.ornek.com/api/v1/admin/invoices/${id}/payments/${paymentId}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/invoices/' . $id . '/payments/' . $paymentId);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Fatura ODENMIS kalir: bakiye geri acilsa da durumu ayrica siz cevirmelisiniz.
Api::Invoices()->DeleteInvoicePayment(['id' => $id, 'payment_id' => $pid]);
Api::Invoices()->UpdateInvoiceStatus(['id' => $id, 'status' => 'unpaid']);Tuzaklar
Kalem yazma çağrısında göndermediğiniz mevcut bir kalem yerinde kalır. Silmek için numarasını silinecekler listesine koymanız gerekir. Faturanın kalem setini olduğu gibi gönderen bir betik, kaldırılan kalemleri kaldırmaz; iki listeyi karşılaştırıp farkı silinecekler listesine yazın.
Hem kalem yazma hem bölme çağrısı, sonunda faturada en az bir kalem kalmasını ister. Bütün kalemleri silmeye ya da hepsini bölmeye çalışmak hata verir. Faturayı tümüyle kaldırmak istiyorsanız kalemlerini değil faturanın kendisini silin ya da iptal edin.
Kalem yazma çağrısı bittiğinde ara toplam, vergi ve genel toplam yeniden hesaplanır. Aynı anda fatura düzenleme ucundan toplam yazmaya çalışmak, iki kaynağın çekiştiği bir kayda yol açar. Toplamlar kalemlerden çıkar; onları değiştirmenin yolu kalemleri değiştirmektir.
Bakiye kapanınca fatura kendiliğinden ödenmiş olur, ama ödemeyi silmek aynı yolu geri yürümez: ödenmiş tutar ve bakiye yeniden hesaplanır, durum ödenmiş kalır. Yanlış girilmiş bir ödemeyi geri alırken durumu ayrıca ödenmemişe çevirmeniz gerekir.
Bölme çağrısı ödenmemiş yeni bir fatura açar ve müşteriye bundan kendiliğinden haber vermez. Yani müşterinin haberi olmadan bir borcu daha olur. Bölmeden sonra yeni faturanın numarasını alıp bildirim gönderin; kaynak faturanın toplamı da düşeceği için iki belge de değişmiştir.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.