אפשר לאחזר חשבוניות חודשיות של חשבון Google Ads באמצעות הפונקציה InvoiceService
.
דרישות מוקדמות
- חיוב חודשי מוגדר בחשבון Google Ads. במדריכים בנושא הגדרות חיוב ותקציבים מוסבר איך לנהל את החיוב באמצעות Google Ads API.
- אם ההגדרה מוגדרת, בשדה
login-customer-id
צריך לציין את מספר הלקוח של חשבון הניהול שמנהל את חשבון Google Ads שעבורו רוצים לאחזר חשבוניות. הוא מסומן בתור חשבון הניהול שדרכו מתבצע התשלום בממשק המשתמש של Google Ads.
אחזור חשבוניות
כדי לאחזר חשבוניות, צריך לבצע בקשה לשיטה InvoiceService.ListInvoices
ולהגדיר את כל השדות הנדרשים ב-ListInvoicesRequest
: customer_id
, billing_setup
, issue_year
ו-issue_month
.
לדוגמה:
Java
// Issues the request. ListInvoicesResponse response = invoiceServiceClient.listInvoices( String.valueOf(customerId), ResourceNames.billingSetup(customerId, billingSetupId), String.valueOf(oneMonthAgo.getYear()), MonthOfYear.valueOf(oneMonthAgo.getMonth().toString()));
C#
ListInvoicesResponse response = invoiceServiceClient.ListInvoices(customerId.ToString(), ResourceNames.BillingSetup(customerId, billingSetupId), // Year must be 2019 or later. lastMonthDateTime.Year.ToString("yyyy"), lastMonth);
PHP
// Issues the request. $response = $googleAdsClient->getInvoiceServiceClient()->listInvoices( ListInvoicesRequest::build( $customerId, ResourceNames::forBillingSetup($customerId, $billingSetupId), // The year needs to be 2019 or later. date('Y', $lastMonth), MonthOfYear::value(strtoupper(date('F', $lastMonth))) ) );
Python
# Issues a request to list invoices. response = client.get_service("InvoiceService").list_invoices( customer_id=customer_id, billing_setup=client.get_service("GoogleAdsService").billing_setup_path( customer_id, billing_setup_id ), # The year needs to be 2019 or later, per the docs: # https://developers.google.com/google-ads/api/docs/billing/invoice?hl=en#retrieving_invoices issue_year=str(last_month.year), issue_month=last_month.strftime("%B").upper(), )
Ruby
# Issues a request to list invoices. response = client.service.invoice.list_invoices( customer_id: customer_id, billing_setup: client.path.billing_setup(customer_id, billing_setup_id), # The year needs to be 2019 or later. issue_year: last_month.year.to_s, # '%^B' option returns the uppercased full month name (e.g. 'JANUARY'). issue_month: last_month.strftime("%^B").to_sym, )
Perl
# Issue the request. my $response = $api_client->InvoiceService()->list({ customerId => $customer_id, billingSetup => Google::Ads::GoogleAds::V18::Utils::ResourceNames::billing_setup( ($customer_id, $billing_setup_id) ), # The year needs to be 2019 or later. issueYear => strftime("%Y", @last_month), issueMonth => uc(strftime("%B", @last_month))});
התשובה היא אובייקט ListInvoicesResponse
שמכיל את רשימת הInvoices
התואמים, שכל אחד מהם מכיל קבוצה גדולה של שדות, כמו:
- מזהי:
payments_account_id
,payments_profile_id
. - זמן:
issue_date
, due_date
, service_date_range
. - סכומים:
subtotal_amount_micros
,tax_amount_micros
,total_amount_micros
. - קובץ PDF:
pdf_url
. הוראות מפורטות זמינות במאמר הורדת קובץ PDF של חשבונית. - היסטוריה:
corrected_invoice
,replaced_invoices
.
הוא מכיל גם שדות ספציפיים אחרים במקרים הרלוונטיים:
- התאמות:
adjustments_subtotal_amount_micros
,adjustments_tax_amount_micros
,adjustments_total_amount_micros
. - עלויות רגולטוריות:
regulatory_costs_subtotal_amount_micros
,regulatory_costs_tax_amount_micros
,regulatory_costs_total_amount_micros
. - חיובים על ייצוא:
export_charge_subtotal_amount_micros
,export_charge_tax_amount_micros
,export_charge_total_amount_micros
.
הצגת פרטי התקציב
Invoice
מספק מידע מפורט על תקציבי החשבון הקשורים, כרשימה של אובייקטים מסוג AccountBudgetSummary
בשדה account_budget_summaries
:
- המזהים:
customer
, account_budget
, purchase_order_number
. - מועד:
billable_activity_date_range
. - סכומים:
subtotal_amount_micros
,tax_amount_micros
,total_amount_micros
,invalid_activity_amount_micros
,billed_amount_micros
,served_amount_micros
,overdelivery_amount_micros
.
קבלת פרטי החשבון
Invoice
מספק מידע על חשבונות קשורים כרשימה של אובייקטים מסוג AccountSummary
בשדה account_summaries
. הוא כולל פרטים על תיקוני חיוב, התאמות, חיובים על ייצוא ועלויות רגולטוריות.
הסבר על הסכומים
כל הסכומים שצוינו באובייקטים AccountBudgetSummary
, AccountSummary
ו-Invoice
משויכים לתקופות השירות שלהם, והם נמדדים לפי הכללים הבאים:
AccountBudgetSummary |
כלל הערכה |
---|---|
served_amount_micros |
$account\_budget\_served$ |
billed_amount_micros |
$account\_budget\_billed$ |
overdelivery_amount_micros |
$account\_budget\_overdelivery$ |
invalid_activity_amount_micros |
$account\_budget\_invalid\_activity$ |
subtotal_amount_micros |
$account\_budget\_pretax$ |
tax_amount_micros |
$account\_budget\_tax$ |
total_amount_micros |
$account\_budget\_pretax + $ $account\_budget\_tax$ |
AccountSummary |
כלל הערכה |
---|---|
billing_correction_subtotal_amount_micros |
$account\_billing\_correction\_pretax$ |
coupon_adjustment_subtotal_amount_micros |
$account\_coupon\_adjustment\_pretax$ |
excess_credit_adjustment_subtotal_amount_micros |
$account\_excess\_credit\_adjustment\_pretax$ |
regulatory_costs_subtotal_amount_micros |
$account\_regulatory\_costs\_pretax$ |
export_charge_subtotal_amount_micros |
$account\_export\_charge\_pretax$ |
billing_correction_tax_amount_micros |
$account\_billing\_correction\_tax$ |
coupon_adjustment_tax_amount_micros |
$account\_coupon\_adjustment\_tax$ |
excess_credit_adjustment_tax_amount_micros |
$account\_excess\_credit\_adjustment\_tax$ |
regulatory_costs_tax_amount_micros |
$account\_regulatory\_costs\_tax$ |
export_charge_tax_amount_micros |
$account\_export\_charge\_tax$ |
billing_correction_total_amount_micros |
$account\_billing\_correction\_pretax + $ $account\_billing\_correction\_tax$ |
coupon_adjustment_total_amount_micros |
$account\_coupon\_adjustment\_pretax + $ $account\_coupon\_adjustment\_tax$ |
excess_credit_adjustment_total_amount_micros |
$account\_excess\_credit\_adjustment\_pretax + $ $account\_excess\_credit\_adjustment\_tax$ |
regulatory_costs_total_amount_micros |
$account\_regulatory\_costs\_pretax + $ $account\_regulatory\_costs\_tax$ |
export_charge_total_amount_micros |
$account\_export\_charge\_pretax + $ $account\_export\_charge\_tax$ |
subtotal_amount_micros |
$account\_pretax$ |
tax_amount_micros |
$account\_tax$ |
total_amount_micros |
$account\_pretax + $ $account\_tax$ |
Invoice |
כלל הערכה |
---|---|
adjustments_subtotal_amount_micros |
$\sum_{i=1}^n account\_billing\_correction\_pretax_i + $ $\sum_{i=1}^n account\_coupon\_adjustment\_pretax_i + $ $\sum_{i=1}^n account\_excess\_credit\_adjustment\_pretax_i$ |
regulatory_costs_subtotal_amount_micros |
$\sum_{i=1}^n account\_regulatory\_costs\_pretax_i$ |
export_charge_subtotal_amount_micros |
$\sum_{i=1}^n account\_export\_charge\_pretax_i$ |
adjustments_tax_amount_micros |
$\sum_{i=1}^n account\_billing\_correction\_tax_i + $ $\sum_{i=1}^n account\_coupon\_adjustment\_tax_i + $ $\sum_{i=1}^n account\_excess\_credit\_adjustment\_tax_i$ |
regulatory_costs_tax_amount_micros |
$\sum_{i=1}^n account\_regulatory\_costs\_tax_i$ |
export_charge_tax_amount_micros |
$\sum_{i=1}^n account\_export\_charge\_tax_i$ |
adjustments_total_amount_micros |
$adjustments\_pretax + $ $adjustments\_tax$ |
regulatory_costs_total_amount_micros |
$regulatory\_costs\_pretax + $ $regulatory\_costs\_tax$ |
export_charge_total_amount_micros |
$export\_charge\_pretax + $ $export\_charge\_tax$ |
subtotal_amount_micros |
$adjustments\_pretax + $ $\sum_{i=1}^n account\_budget\_pretax_i$ |
tax_amount_micros |
$adjustments\_tax + $ $regulatory\_costs\_tax + $ $export\_charge\_tax + $ $\sum_{i=1}^n account\_budget\_tax_i$ |
total_amount_micros |
$pretax + $ $regulatory\_costs\_pretax + $ $export\_charge\_pretax + $ $tax$ |
דוגמה לאופן שבו אפשר להריץ חזרה את החשבוניות שאוחזרו:
Java
// Iterates over all invoices retrieved and prints their information. for (Invoice invoice : response.getInvoicesList()) { System.out.printf( "- Found the invoice '%s':\n" + " ID (also known as Invoice Number): '%s'\n" + " Type: %s\n" + " Billing setup ID: '%s'\n" + " Payments account ID (also known as Billing Account Number): '%s'\n" + " Payments profile ID (also known as Billing ID): '%s'\n" + " Issue date (also known as Invoice Date): %s\n" + " Due date: %s\n" + " Currency code: %s\n" + " Service date range (inclusive): from %s to %s\n" + " Adjustments: subtotal '%.2f', tax '%.2f', total '%.2f'\n" + " Regulatory costs: subtotal '%.2f', tax '%.2f', total '%.2f'\n" + " Replaced invoices: '%s'\n" + " Amounts: subtotal '%.2f', tax '%.2f', total '%.2f'\n" + " Corrected invoice: '%s'\n" + " PDF URL: '%s'\n" + " Account budgets: ", invoice.getResourceName(), invoice.getId(), invoice.getType(), invoice.getBillingSetup(), invoice.getPaymentsAccountId(), invoice.getPaymentsProfileId(), invoice.getIssueDate(), invoice.getDueDate(), invoice.getCurrencyCode(), invoice.getServiceDateRange().getStartDate(), invoice.getServiceDateRange().getEndDate(), convertMicrosToCurrency(invoice.getAdjustmentsSubtotalAmountMicros()), convertMicrosToCurrency(invoice.getAdjustmentsTaxAmountMicros()), convertMicrosToCurrency(invoice.getAdjustmentsTotalAmountMicros()), convertMicrosToCurrency(invoice.getRegulatoryCostsSubtotalAmountMicros()), convertMicrosToCurrency(invoice.getRegulatoryCostsTaxAmountMicros()), convertMicrosToCurrency(invoice.getRegulatoryCostsTotalAmountMicros()), invoice.getReplacedInvoicesList(), convertMicrosToCurrency(invoice.getSubtotalAmountMicros()), convertMicrosToCurrency(invoice.getTaxAmountMicros()), convertMicrosToCurrency(invoice.getTotalAmountMicros()), invoice.getCorrectedInvoice(), invoice.getPdfUrl()); for (AccountBudgetSummary accountBudgetSummary : invoice.getAccountBudgetSummariesList()) { System.out.printf( " - Account budget '%s':\n" + " Name (also known as Account Budget): '%s'\n" + " Customer (also known as Account ID): '%s'\n" + " Customer descriptive name (also known as Account): '%s'\n" + " Purchase order number (also known as Purchase Order): '%s'\n" + " Billing activity date range (inclusive): from %s to %s\n" + " Amounts: subtotal '%.2f', tax '%.2f', total '%.2f'\n", accountBudgetSummary.getAccountBudget(), accountBudgetSummary.getAccountBudgetName(), accountBudgetSummary.getCustomer(), accountBudgetSummary.getCustomerDescriptiveName(), accountBudgetSummary.getPurchaseOrderNumber(), accountBudgetSummary.getBillableActivityDateRange().getStartDate(), accountBudgetSummary.getBillableActivityDateRange().getEndDate(), convertMicrosToCurrency(accountBudgetSummary.getSubtotalAmountMicros()), convertMicrosToCurrency(accountBudgetSummary.getTaxAmountMicros()), convertMicrosToCurrency(accountBudgetSummary.getTotalAmountMicros())); } }
C#
// information. foreach (Invoice invoice in response.Invoices) { Console.WriteLine( "- Found the invoice '{0}':\n" + " ID (also known as Invoice Number): '{1}'\n" + " Type: {2}\n" + " Billing setup ID: '{3}'\n" + " Payments account ID (also known as Billing Account Number): '{4}'\n" + " Payments profile ID (also known as Billing ID): '{5}'\n" + " Issue date (also known as Invoice Date): {6}\n" + " Due date: {7}\n" + " Currency code: {8}\n" + " Service date range (inclusive): from {9} to {10}\n" + " Adjustments: subtotal '{11}', tax '{12}', total '{13}'\n" + " Regulatory costs: subtotal '{14}', tax '{15}', total '{16}'\n" + " Replaced invoices: '{17}'\n" + " Amounts: subtotal '{18}', tax '{19}', total '{20}'\n" + " Corrected invoice: '{21}'\n" + " PDF URL: '{22}'\n" + " Account budgets:\n", invoice.ResourceName, invoice.Id, invoice.Type.ToString(), invoice.BillingSetup, invoice.PaymentsAccountId, invoice.PaymentsProfileId, invoice.IssueDate, invoice.DueDate, invoice.CurrencyCode, invoice.ServiceDateRange.StartDate, invoice.ServiceDateRange.EndDate, FormatMicros(invoice.AdjustmentsSubtotalAmountMicros), FormatMicros(invoice.AdjustmentsTaxAmountMicros), FormatMicros(invoice.AdjustmentsTotalAmountMicros), FormatMicros(invoice.RegulatoryCostsSubtotalAmountMicros), FormatMicros(invoice.RegulatoryCostsTaxAmountMicros), FormatMicros(invoice.RegulatoryCostsTotalAmountMicros), invoice.ReplacedInvoices.Count > 0 ? string.Join("', '", invoice.ReplacedInvoices) : "none", FormatMicros(invoice.SubtotalAmountMicros), FormatMicros(invoice.TaxAmountMicros), FormatMicros(invoice.TotalAmountMicros), string.IsNullOrEmpty(invoice.CorrectedInvoice) ? invoice.CorrectedInvoice : "none", invoice.PdfUrl); foreach (AccountBudgetSummary accountBudgetSummary in invoice.AccountBudgetSummaries) { Console.WriteLine( "\t- Account budget '{0}':\n" + "\t Name (also known as Account Budget): '{1}'\n" + "\t Customer (also known as Account ID): '{2}'\n" + "\t Customer descriptive name (also known as Account): '{3}'\n" + "\t Purchase order number (also known as Purchase Order): '{4}'\n" + "\t Billing activity date range (inclusive): from {5} to {6}\n" + "\t Amounts: subtotal '{7}', tax '{8}', total '{9}'\n", accountBudgetSummary.AccountBudget, accountBudgetSummary.AccountBudgetName ?? "none", accountBudgetSummary.Customer, accountBudgetSummary.CustomerDescriptiveName ?? "none", accountBudgetSummary.PurchaseOrderNumber ?? "none", accountBudgetSummary.BillableActivityDateRange.StartDate, accountBudgetSummary.BillableActivityDateRange.EndDate, FormatMicros(accountBudgetSummary.SubtotalAmountMicros), FormatMicros(accountBudgetSummary.TaxAmountMicros), FormatMicros(accountBudgetSummary.TotalAmountMicros)); } }
PHP
// Iterates over all invoices retrieved and prints their information. foreach ($response->getInvoices() as $invoice) { /** @var Invoice $invoice */ printf( "- Found the invoice '%s':" . PHP_EOL . " ID (also known as Invoice Number): '%s'" . PHP_EOL . " Type: %s" . PHP_EOL . " Billing setup ID: '%s'" . PHP_EOL . " Payments account ID (also known as Billing Account Number): '%s'" . PHP_EOL . " Payments profile ID (also known as Billing ID): '%s'" . PHP_EOL . " Issue date (also known as Invoice Date): %s" . PHP_EOL . " Due date: %s" . PHP_EOL . " Currency code: %s" . PHP_EOL . " Service date range (inclusive): from %s to %s" . PHP_EOL . " Adjustments: subtotal '%.2f', tax '%.2f', total '%.2f'" . PHP_EOL . " Regulatory costs: subtotal '%.2f', tax '%.2f', total '%.2f'" . PHP_EOL . " Replaced invoices: '%s'" . PHP_EOL . " Amounts: subtotal '%.2f', tax '%.2f', total '%.2f'" . PHP_EOL . " Corrected invoice: '%s'" . PHP_EOL . " PDF URL: '%s'" . PHP_EOL . " Account budgets:" . PHP_EOL, $invoice->getResourceName(), $invoice->getId(), InvoiceType::name($invoice->getType()), $invoice->getBillingSetup(), $invoice->getPaymentsAccountId(), $invoice->getPaymentsProfileId(), $invoice->getIssueDate(), $invoice->getDueDate(), $invoice->getCurrencyCode(), $invoice->getServiceDateRange()->getStartDate(), $invoice->getServiceDateRange()->getEndDate(), Helper::microToBase($invoice->getAdjustmentsSubtotalAmountMicros()), Helper::microToBase($invoice->getAdjustmentsTaxAmountMicros()), Helper::microToBase($invoice->getAdjustmentsTotalAmountMicros()), Helper::microToBase($invoice->getRegulatoryCostsSubtotalAmountMicros()), Helper::microToBase($invoice->getRegulatoryCostsTaxAmountMicros()), Helper::microToBase($invoice->getRegulatoryCostsTotalAmountMicros()), $invoice->getReplacedInvoices() ? implode( "', '", iterator_to_array($invoice->getReplacedInvoices()->getIterator()) ) : 'none', Helper::microToBase($invoice->getSubtotalAmountMicros()), Helper::microToBase($invoice->getTaxAmountMicros()), Helper::microToBase($invoice->getTotalAmountMicros()), $invoice->getCorrectedInvoice() ?: 'none', $invoice->getPdfUrl() ); foreach ($invoice->getAccountBudgetSummaries() as $accountBudgetSummary) { /** @var AccountBudgetSummary $accountBudgetSummary */ printf( " - Account budget '%s':" . PHP_EOL . " Name (also known as Account Budget): '%s'" . PHP_EOL . " Customer (also known as Account ID): '%s'" . PHP_EOL . " Customer descriptive name (also known as Account): '%s'" . PHP_EOL . " Purchase order number (also known as Purchase Order): '%s'" . PHP_EOL . " Billing activity date range (inclusive): from %s to %s" . PHP_EOL . " Amounts: subtotal '%.2f', tax '%.2f', total '%.2f'" . PHP_EOL, $accountBudgetSummary->getAccountBudget(), $accountBudgetSummary->getAccountBudgetName() ?: 'none', $accountBudgetSummary->getCustomer(), $accountBudgetSummary->getCustomerDescriptiveName() ?: 'none', $accountBudgetSummary->getPurchaseOrderNumber() ?: 'none', $accountBudgetSummary->getBillableActivityDateRange()->getStartDate(), $accountBudgetSummary->getBillableActivityDateRange()->getEndDate(), Helper::microToBase($accountBudgetSummary->getSubtotalAmountMicros()), Helper::microToBase($accountBudgetSummary->getTaxAmountMicros()), Helper::microToBase($accountBudgetSummary->getTotalAmountMicros()) ); } }
Python
for invoice in response.invoices: print( f""" - Found the invoice {invoice.resource_name} ID (also known as Invoice Number): '{invoice.id}' Type: {invoice.type_} Billing setup ID: '{invoice.billing_setup}' Payments account ID (also known as Billing Account Number): '{invoice.payments_account_id}' Payments profile ID (also known as Billing ID): '{invoice.payments_profile_id}' Issue date (also known as Invoice Date): {invoice.issue_date} Due date: {invoice.due_date} Currency code: {invoice.currency_code} Service date range (inclusive): from {invoice.service_date_range.start_date} to {invoice.service_date_range.end_date} Adjustments: subtotal {_micros_to_currency(invoice.adjustments_subtotal_amount_micros)} tax {_micros_to_currency(invoice.adjustments_tax_amount_micros)} total {_micros_to_currency(invoice.adjustments_total_amount_micros)} Regulatory costs: subtotal {_micros_to_currency(invoice.regulatory_costs_subtotal_amount_micros)} tax {_micros_to_currency(invoice.regulatory_costs_tax_amount_micros)} total {_micros_to_currency(invoice.regulatory_costs_total_amount_micros)} Replaced invoices: {invoice.replaced_invoices.join(", ") if invoice.replaced_invoices else "none"} Amounts: subtotal {_micros_to_currency(invoice.subtotal_amount_micros)} tax {_micros_to_currency(invoice.tax_amount_micros)} total {_micros_to_currency(invoice.total_amount_micros)} Corrected invoice: {invoice.corrected_invoice or "none"} PDF URL: {invoice.pdf_url} Account budgets: """ ) for account_budget_summary in invoice.account_budget_summaries: print( f""" - Account budget '{account_budget_summary.account_budget}': Name (also known as Account Budget): '{account_budget_summary.account_budget_name}' Customer (also known as Account ID): '{account_budget_summary.customer}' Customer descriptive name (also known as Account): '{account_budget_summary.customer_descriptive_name}' Purchase order number (also known as Purchase Order): '{account_budget_summary.purchase_order_number}' Billing activity date range (inclusive): from #{account_budget_summary.billable_activity_date_range.start_date} to #{account_budget_summary.billable_activity_date_range.end_date} Amounts: subtotal '{_micros_to_currency(account_budget_summary.subtotal_amount_micros)}' tax '{_micros_to_currency(account_budget_summary.tax_amount_micros)}' total '{_micros_to_currency(account_budget_summary.total_amount_micros)}' """ )
Ruby
# Iterates over all invoices retrieved and prints their information. response.invoices.each do |invoice| puts <<~OUTPUT - Found the invoice '#{invoice.resource_name}' ID (also known as Invoice Number): '#{invoice.id}' Type: #{invoice.type} Billing Setup ID: '#{invoice.billing_setup}' Payments account ID (also known as Billing Account Number): '#{invoice.payments_account_id}' Payments profile ID (also known as Billing ID): '#{invoice.payments_profile_id}' Issue date (also known as Invoice Date): #{invoice.issue_date} Due date: #{invoice.due_date} Currency code: #{invoice.currency_code} Service date range (inclusive): from #{invoice.service_date_range.start_date} to #{invoice.service_date_range.end_date} Adjustments: subtotal '#{micro_to_base(invoice.adjustments_subtotal_amount_micros)}' tax '#{micro_to_base(invoice.adjustments_tax_amount_micros)}' total '#{micro_to_base(invoice.adjustments_total_amount_micros)}' Regulatory costs: subtotal '#{micro_to_base(invoice.regulatory_costs_subtotal_amount_micros)}' tax '#{micro_to_base(invoice.regulatory_costs_tax_amount_micros)}' total '#{micro_to_base(invoice.regulatory_costs_total_amount_micros)}' Replaced invoices: '#{invoice.replaced_invoices ? invoice.replaced_invoices.join(", ") : 'none'}' Amounts: subtotal '#{micro_to_base(invoice.subtotal_amount_micros)}' tax '#{micro_to_base(invoice.tax_amount_micros)}' total '#{micro_to_base(invoice.total_amount_micros)}' Corrected invoice: '#{invoice.corrected_invoices ? invoice.corrected_invoices : 'none'}' PDF URL: '#{invoice.pdf_url}' Account budgets: OUTPUT invoice.account_budget_summaries.each do |account_budget_summary| puts <<~OUTPUT \tAccount budget '#{account_budget_summary.account_budget}': \t Name (also known as Account Budget): '#{account_budget_summary.account_budget_name}' \t Customer (also known as Account ID): '#{account_budget_summary.customer}' \t Customer descriptive name (also known as Account): '#{account_budget_summary.customer_descriptive_name}' \t Purchase order number (also known as Purchase Order): '#{account_budget_summary.purchase_order_number}' \t Billing activity date range (inclusive): \t from #{account_budget_summary.billable_activity_date_range.start_date} \t to #{account_budget_summary.billable_activity_date_range.end_date} \t Amounts: \t subtotal '#{micro_to_base(account_budget_summary.subtotal_amount_micros)}' \t tax '#{micro_to_base(account_budget_summary.tax_amount_micros)}' \t total '#{micro_to_base(account_budget_summary.total_amount_micros)}' OUTPUT end end
Perl
# Iterate over all invoices retrieved and print their information. foreach my $invoice (@$response) { printf "- Found the invoice '%s':\n" . " ID (also known as Invoice Number): '%s'\n" . " Type: %s\n" . " Billing setup ID: '%s'\n" . " Payments account ID (also known as Billing Account Number): '%s'\n" . " Payments profile ID (also known as Billing ID): '%s'\n" . " Issue date (also known as Invoice Date): %s\n" . " Due date: %s\n" . " Currency code: %s\n" . " Service date range (inclusive): from %s to %s\n" . " Adjustments: subtotal '%.2f', tax '%.2f', total '%.2f'\n" . " Regulatory costs: subtotal '%.2f', tax '%.2f', total '%.2f'\n" . " Replaced invoices: '%s'\n" . " Amounts: subtotal '%.2f', tax '%.2f', total '%.2f'\n" . " Corrected invoice: '%s'\n" . " PDF URL: '%s'\n" . " Account budgets:\n", $invoice->{resourceName}, $invoice->{id}, $invoice->{type}, $invoice->{billingSetup}, $invoice->{paymentsAccountId}, $invoice->{paymentsProfileId}, $invoice->{issueDate}, $invoice->{dueDate}, $invoice->{currencyCode}, $invoice->{serviceDateRange}{startDate}, $invoice->{serviceDateRange}{endDate}, micro_to_base($invoice->{adjustmentsSubtotalAmountMicros}), micro_to_base($invoice->{adjustmentsTaxAmountMicros}), micro_to_base($invoice->{adjustmentsTotalAmountMicros}), micro_to_base($invoice->{regulatoryCostsSubtotalAmountMicros}), micro_to_base($invoice->{regulatoryCostsTaxAmountMicros}), micro_to_base($invoice->{regulatoryCostsTotalAmountMicros}), $invoice->{replacedInvoices} ? join(',', @{$invoice->{replacedInvoices}}) : "none", micro_to_base($invoice->{subtotalAmountMicros}), micro_to_base($invoice->{taxAmountMicros}), micro_to_base($invoice->{totalAmountMicros}), $invoice->{correctedInvoice} ? $invoice->{correctedInvoice} : "none", $invoice->{pdfUrl}; foreach my $account_budget_summary (@{$invoice->{accountBudgetSummaries}}) { printf " - Account budget '%s':\n" . " Name (also known as Account Budget): '%s'\n" . " Customer (also known as Account ID): '%s'\n" . " Customer descriptive name (also known as Account): '%s'\n" . " Purchase order number (also known as Purchase Order): '%s'\n" . " Billing activity date range (inclusive): from %s to %s\n" . " Amounts: subtotal '%.2f', tax '%.2f', total '%.2f'\n", $account_budget_summary->{accountBudget}, $account_budget_summary->{accountBudgetName} ? $account_budget_summary->{accountBudgetName} : "none", $account_budget_summary->{customer}, $account_budget_summary->{customerDescriptiveName} ? $account_budget_summary->{customerDescriptiveName} : "none", $account_budget_summary->{purchaseOrderNumber} ? $account_budget_summary->{purchaseOrderNumber} : "none", $account_budget_summary->{billableActivityDateRange}{startDate}, $account_budget_summary->{billableActivityDateRange}{endDate}, $account_budget_summary->{subtotalAmountMicros}, $account_budget_summary->{taxAmountMicros}, $account_budget_summary->{totalAmountMicros}; } }
הורדת קובץ PDF של חשבונית
אפשר להוריד כל חשבונית כקובץ PDF. אחרי שאחזרתם את Invoice
, עליכם לשלוח בקשת HTTP לכתובת ה-URL ששמורה בשדה pdf_url
. צריך לאמת את הבקשה הזו באמצעות אותו חשבון Google שבו השתמשתם לאחזור החשבונית. כלומר, צריך לציין אסימון גישה מסוג OAuth שנוצר באמצעות חשבון Google בכותרת הבקשה Authorization: Bearer
:
curl --request GET \ --header "Authorization: Bearer access token" \ Invoice.pdf_url > filename.pdf
התוצאה היא תוכן של חשבונית בפורמט PDF שנשמר בקובץ filename.pdf.
קודי שגיאה נפוצים
תרחיש | קוד השגיאה |
---|---|
הגדרת החיוב, שנת הבעיה או חודש הבעיה חסרים או ריקים. | RequestError.REQUIRED_FIELD_MISSING
|
לא ניתן לנתח את הגדרת החיוב, שנת הבעיה או חודש הבעיה שצוינו. | FieldError.INVALID_VALUE
|
הבקשה היא לגבי חשבוניות שהונפקו לפני 1 בינואר 2019. | InvoiceError.YEAR_MONTH_TOO_OLD
|
הבקשה היא עבור לקוח שלא מקבל חשבוניות. | InvoiceError.NOT_INVOICED_CUSTOMER
|
למשתמש אין הרשאה להציג את החשבוניות של הגדרת החיוב. | AuthorizationError.ACTION_NOT_PERMITTED
|