Ежемесячные счета для аккаунта Google Рекламы можно получить с помощью InvoiceService
.
Предварительные условия
- Включите ежемесячное выставление счетов для аккаунта Google Рекламы. Ознакомьтесь с руководствами по настройке платежных аккаунтов и бюджетам , чтобы узнать, как управлять выставлением счетов с помощью API Google Рекламы.
- Если этот параметр установлен,
login-customer-id
должен указывать идентификатор клиента управляющего аккаунта, который управляет аккаунтом Google Рекламы, для которого вы получаете счета. Это отмечено у менеджера по платежам в пользовательском интерфейсе Google Рекламы.
Получение счетов-фактур
Чтобы получить счета, вам необходимо запросить метод InvoiceService.ListInvoices
, задав все обязательные поля в ListInvoicesRequest
: customer_id
, billing_setup
, issue_year
и issue_month
.
Вот пример:
Ява
// Issues the request. ListInvoicesResponse response = invoiceServiceClient.listInvoices( String.valueOf(customerId), ResourceNames.billingSetup(customerId, billingSetupId), String.valueOf(oneMonthAgo.getYear()), MonthOfYear.valueOf(oneMonthAgo.getMonth().toString()));
С#
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))) ) );
Питон
# 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(), )
Руби
# 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, )
Перл
# Issue the request. my $response = $api_client->InvoiceService()->list({ customerId => $customer_id, billingSetup => Google::Ads::GoogleAds::V17::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\_бюджет\_overdelivery$ |
invalid_activity_amount_micros | $account\_budget\_invalid\_activity$ |
subtotal_amount_micros | $account\_бюджет\_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 аккаунт\_биллинг\_коррекция\_pretax_i + $ $\sum_{i=1}^n аккаунт\_купон\_adjustment\_pretax_i + $ $\sum_{i=1}^n аккаунт\_excess\_credit\_adjustment\_pretax_i$ |
regulatory_costs_subtotal_amount_micros | $\sum_{i=1}^n аккаунт\_regulatory\_costs\_pretax_i$ |
export_charge_subtotal_amount_micros | $\sum_{i=1}^n аккаунт\_export\_charge\_pretax_i$ |
adjustments_tax_amount_micros | $\sum_{i=1}^n аккаунт\_биллинг\_коррекция\_tax_i + $ $\sum_{i=1}^n аккаунт\_купон\_adjustment\_tax_i + $ $\sum_{i=1}^n аккаунт\_excess\_credit\_adjustment\_tax_i$ |
regulatory_costs_tax_amount_micros | $\sum_{i=1}^n аккаунт\_regulatory\_costs\_tax_i$ |
export_charge_tax_amount_micros | $\sum_{i=1}^n аккаунт\_export\_charge\_tax_i$ |
adjustments_total_amount_micros | $корректировки\_pretax + $ $корректировки\_tax$ |
regulatory_costs_total_amount_micros | $регуляторные\_затраты\_доналог + $ $регуляторные\_затраты\_налог$ |
export_charge_total_amount_micros | $export\_charge\_pretax + $ $export\_charge\_tax$ |
subtotal_amount_micros | $корректировки\_pretax + $ $\sum_{i=1}^n аккаунт\_бюджет\_pretax_i$ |
tax_amount_micros | $корректировки\_tax + $ $регуляторные\_затраты\_налог + $ $экспорт\_заряд\_налог + $ $\sum_{i=1}^n аккаунт\_бюджет\_tax_i$ |
total_amount_micros | $до уплаты налогов + $ $регуляторные\_затраты\_доналог + $ $export\_charge\_pretax + $ $налог$ |
Вот пример того, как можно повторять полученные счета:
Ява
// 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())); } }
С#
// 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()) ); } }
Питон
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)}' """ )
Руби
# 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
Перл
# 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, которая использовалась для получения счета; то есть в заголовке запроса 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 |