Class: AdvancedBilling::InvoicesController
- Inherits:
-
BaseController
- Object
- BaseController
- AdvancedBilling::InvoicesController
- Defined in:
- lib/advanced_billing/controllers/invoices_controller.rb
Overview
InvoicesController
Constant Summary
Constants inherited from BaseController
Instance Attribute Summary
Attributes inherited from BaseController
Instance Method Summary collapse
-
#create_invoice(subscription_id, body: nil) ⇒ InvoiceResponse
This endpoint will allow you to create an ad hoc invoice.
-
#issue_invoice(uid, body: nil) ⇒ Invoice
This endpoint allows you to issue an invoice that is in “pending” status.
-
#list_credit_notes(options = {}) ⇒ ListCreditNotesResponse
Credit Notes are like inverse invoices.
-
#list_invoice_events(options = {}) ⇒ ListInvoiceEventsResponse
This endpoint returns a list of invoice events.
-
#list_invoice_segments(options = {}) ⇒ ConsolidatedInvoice
Invoice segments returned on the index will only include totals, not detailed breakdowns for ‘line_items`, `discounts`, `taxes`, `credits`, `payments`, or `custom_fields`.
-
#list_invoices(options = {}) ⇒ ListInvoicesResponse
By default, invoices returned on the index will only include totals, not detailed breakdowns for ‘line_items`, `discounts`, `taxes`, `credits`, `payments`, `custom_fields`, or `refunds`.
-
#preview_customer_information_changes(uid) ⇒ CustomerChangesPreviewResponse
Customer information may change after an invoice is issued which may lead to a mismatch between customer information that are present on an open invoice and actual customer information.
-
#read_credit_note(uid) ⇒ CreditNote
Use this endpoint to retrieve the details for a credit note.
-
#read_invoice(uid) ⇒ Invoice
Use this endpoint to retrieve the details for an invoice.
-
#record_external_payment_for_invoices(body: nil) ⇒ MultiInvoicePaymentResponse
This API call should be used when you want to record an external payment against multiple invoices.
-
#record_payment_for_invoice(uid, body: nil) ⇒ Invoice
This API call should be used when you want to record a payment of a given type against a specific invoice.
-
#record_payment_for_subscription(subscription_id, body: nil) ⇒ PaymentResponse
Record an external payment made against a subscription that will pay partially or in full one or more invoices.
-
#refund_invoice(uid, body: nil) ⇒ Invoice
Refund an invoice, segment, or consolidated invoice.
-
#reopen_invoice(uid) ⇒ Invoice
This endpoint allows you to reopen any invoice with the “canceled” status.
-
#send_invoice(uid, body: nil) ⇒ void
This endpoint allows for invoices to be programmatically delivered via email.
-
#update_customer_information(uid) ⇒ Invoice
This endpoint updates customer information on an open invoice and returns the updated invoice.
-
#void_invoice(uid, body: nil) ⇒ Invoice
This endpoint allows you to void any invoice with the “open” or “canceled” status.
Methods inherited from BaseController
#initialize, #new_api_call_builder, #new_parameter, #new_request_builder, #new_response_handler, user_agent, user_agent_parameters
Constructor Details
This class inherits a constructor from AdvancedBilling::BaseController
Instance Method Details
#create_invoice(subscription_id, body: nil) ⇒ InvoiceResponse
This endpoint will allow you to create an ad hoc invoice. ### Basic Behavior You can create a basic invoice by sending an array of line items to this endpoint. Each line item, at a minimum, must include a title, a quantity and a unit price. Example: “‘json {
"invoice": {
"line_items": [
{
"title": "A Product",
"quantity": 12,
"unit_price": "150.00"
}
]
}
} “‘ ### Catalog items Instead of creating custom products like in above example, You can pass existing items like products, components. “`json {
"invoice": {
"line_items": [
{
"product_id": "handle:gold-product",
"quantity": 2,
}
]
}
} “‘ The price for each line item will be calculated as well as a total due amount for the invoice. Multiple line items can be sent. ### Line items types When defining line item, You can choose one of 3 types for one line item: #### Custom item Like in basic behavior example above, You can pass `title` and `unit_price` for custom item. #### Product id Product handle (with handle: prefix) or id from the scope of current subscription’s site can be provided with ‘product_id`. By default `unit_price` is taken from product’s default price point, but can be overwritten by passing ‘unit_price` or `product_price_point_id`. If `product_id` is used, following fields cannot be used: `title`, `component_id`. #### Component id Component handle (with handle: prefix) or id from the scope of current subscription’s site can be provided with ‘component_id`. If `component_id` is used, following fields cannot be used: `title`, `product_id`. By default `unit_price` is taken from product’s default price point, but can be overwritten by passing ‘unit_price` or `price_point_id`. At this moment price points are supportted only for quantity based, on/off and metered components. For prepaid and event based billing components `unit_price` is required. ### Coupons When creating ad hoc invoice, new discounts can be applied in following way: “`json {
"invoice": {
"line_items": [
{
"product_id": "handle:gold-product",
"quantity": 1
}
],
"coupons": [
{
"code": "COUPONCODE",
"percentage": 50.0
}
]
}
} “‘ If You want to use existing coupon for discount creation, only `code` and optional `product_family_id` is needed “`json …
"coupons": [
{
"code": "FREESETUP",
"product_family_id": 1
}
]
… “‘ ### Coupon options #### Code Coupon `code` will be displayed on invoice discount section. Coupon code can only contain uppercase letters, numbers, and allowed special characters. Lowercase letters will be converted to uppercase. It can be used to select an existing coupon from the catalog, or as an ad hoc coupon when passed with `percentage` or `amount`. #### Percentage Coupon `percentage` can take values from 0 to 100 and up to 4 decimal places. It cannot be used with `amount`. Only for ad hoc coupons, will be ignored if `code` is used to select an existing coupon from the catalog. #### Amount Coupon `amount` takes number value. It cannot be used with `percentage`. Used only when not matching existing coupon by `code`. #### Description Optional `description` will be displayed with coupon `code`. Used only when not matching existing coupon by `code`. #### Product Family id Optional `product_family_id` handle (with handle: prefix) or id is used to match existing coupon within site, when codes are not unique. #### Compounding Strategy Optional `compounding_strategy` for percentage coupons, can take values `compound` or `full-price`. For amount coupons, discounts will be always calculated against the original item price, before other discounts are applied. `compound` strategy: Percentage-based discounts will be calculated against the remaining price, after prior discounts have been calculated. It is set by default. `full-price` strategy: Percentage-based discounts will always be calculated against the original item price, before other discounts are applied. ### Line Item Options #### Period Date Range A custom period date range can be defined for each line item with the `period_range_start` and `period_range_end` parameters. Dates must be sent in the `YYYY-MM-DD` format. `period_range_end` must be greater or equal `period_range_start`. #### Taxes The `taxable` parameter can be sent as `true` if taxes should be calculated for a specific line item. For this to work, the site should be configured to use and calculate taxes. Further, if the site uses Avalara for tax calculations, a `tax_code` parameter should also be sent. For existing catalog items: products/components taxes cannot be overwritten. #### Price Point Price point handle (with handle: prefix) or id from the scope of current subscription’s site can be provided with ‘price_point_id` for components with `component_id` or `product_price_point_id` for products with `product_id` parameter. If price point is passed `unit_price` cannot be used. It can be used only with catalog items products and components. #### Description Optional `description` parameter, it will overwrite default generated description for line item. ### Invoice Options #### Issue Date By default, invoices will be created with a issue date set to today. `issue_date` parameter can be send to alter that. Only dates in the past can be send. `issue_date` should be send in `YYYY-MM-DD` format. #### Net Terms By default, invoices will be created with a due date matching the date of invoice creation. If a different due date is desired, the `net_terms` parameter can be sent indicating the number of days in advance the due date should be. #### Addresses The seller, shipping and billing addresses can be sent to override the site’s defaults. Each address requires to send a ‘first_name` at a minimum in order to work. Please see below for the details on which parameters can be sent for each address object. #### Memo and Payment Instructions A custom memo can be sent with the `memo` parameter to override the site’s default. Likewise, custom payment instructions can be sent with the ‘payment_instrucions` parameter. #### Status By default, invoices will be created with open status. Possible alternative is `draft`. subscription
793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 793 def create_invoice(subscription_id, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions/{subscription_id}/invoices.json', Server::DEFAULT) .template_param(new_parameter(subscription_id, key: 'subscription_id') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(InvoiceResponse.method(:from_hash)) .local_error('401', 'Unauthorized', APIException) .local_error('422', 'Unprocessable Entity (WebDAV)', NestedErrorResponseException)) .execute end |
#issue_invoice(uid, body: nil) ⇒ Invoice
This endpoint allows you to issue an invoice that is in “pending” status. For example, you can issue an invoice that was created when allocating new quantity on a component and using “accrue charges” option. You cannot issue a pending child invoice that was created for a member subscription in a group. For Remittance subscriptions, the invoice will go into “open” status and payment won’t be attempted. The value for ‘on_failed_payment` would be rejected if sent. Any prepayments or service credits that exist on subscription will be automatically applied. Additionally, if setting is on, an email will be sent for issued invoice. For Automatic subscriptions, prepayments and service credits will apply to the invoice and before payment is attempted. On successful payment, the invoice will go into “paid” status and email will be sent to the customer (if setting applies). When payment fails, the next event depends on the `on_failed_payment` value:
-
‘leave_open_invoice` - prepayments and credits applied to invoice;
invoice status set to “open”; email sent to the customer for the issued invoice (if setting applies); payment failure recorded in the invoice history. This is the default option.
-
‘rollback_to_pending` - prepayments and credits not applied; invoice
remains in “pending” status; no email sent to the customer; payment failure recorded in the invoice history.
-
‘initiate_dunning` - prepayments and credits applied to the invoice;
invoice status set to “open”; email sent to the customer for the issued invoice (if setting applies); payment failure recorded in the invoice history; subscription will most likely go into “past_due” or “canceled” state (depending upon net terms and dunning settings). invoice, this does not refer to the public facing invoice number.
851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 851 def issue_invoice(uid, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/issue.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash)) .local_error('401', 'Unauthorized', APIException) .local_error('404', 'Not Found', APIException) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |
#list_credit_notes(options = {}) ⇒ ListCreditNotesResponse
Credit Notes are like inverse invoices. They reduce the amount a customer owes. By default, the credit notes returned by this endpoint will exclude the arrays of ‘line_items`, `discounts`, `taxes`, `applications`, or `refunds`. To include these arrays, pass the specific field as a key in the query with a value set to `true`. Chargify id pages. By default, the first page of results is displayed. The page parameter specifies a page number of results to fetch. You can start navigating through the pages to consume the results. You do this by passing in a page parameter. Retrieve the next page by adding ?page=2 to the query string. If there are no results to return, then an empty result set will be returned. Use in query `page=1`. many records to fetch in each request. Default value is 20. The maximum allowed values is 200; any per_page value over 200 will be changed to 200. Use in query `per_page=200`. line items data discounts data data refunds data applications data
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 60 def list_credit_notes( = {}) new_api_call_builder .request(new_request_builder(HttpMethodEnum::GET, '/credit_notes.json', Server::DEFAULT) .query_param(new_parameter(['subscription_id'], key: 'subscription_id')) .query_param(new_parameter(['page'], key: 'page')) .query_param(new_parameter(['per_page'], key: 'per_page')) .query_param(new_parameter(['line_items'], key: 'line_items')) .query_param(new_parameter(['discounts'], key: 'discounts')) .query_param(new_parameter(['taxes'], key: 'taxes')) .query_param(new_parameter(['refunds'], key: 'refunds')) .query_param(new_parameter(['applications'], key: 'applications')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(ListCreditNotesResponse.method(:from_hash))) .execute end |
#list_invoice_events(options = {}) ⇒ ListInvoiceEventsResponse
This endpoint returns a list of invoice events. Each event contains event “data” (such as an applied payment) as well as a snapshot of the ‘invoice` at the time of event completion. Exposed event types are: + issue_invoice + apply_credit_note + apply_payment + refund_invoice + void_invoice + void_remainder + backport_invoice + change_invoice_status + change_invoice_collection_method + remove_payment Invoice events are returned in ascending order. If both a `since_date` and `since_id` are provided in request parameters, the `since_date` will be used. Note - invoice events that occurred prior to 09/05/2018 __will not__ contain an `invoice` snapshot. `YYYY-MM-DD T HH:MM:SS Z`, or `YYYY-MM-DD`(in this case, it returns data from the beginning of the day). of the event from which you want to start the search. All the events before the `since_date` timestamp are not returned in the response. which you want to start the search(ID is not included. e.g. if ID is set to 2, then all events with ID 3 and more will be shown) This parameter is not used if since_date is defined. pages. By default, the first page of results is displayed. The page parameter specifies a page number of results to fetch. You can start navigating through the pages to consume the results. You do this by passing in a page parameter. Retrieve the next page by adding ?page=2 to the query string. If there are no results to return, then an empty result set will be returned. Use in query `page=1`. many records to fetch in each request. Default value is 100. The maximum allowed values is 200; any per_page value over 200 will be changed to 200. allows for scoping of the invoice events to a single invoice or credit note. parameter if you want to fetch also invoice events with change_invoice_status type. results by event_type. Supply a comma separated list of event types (listed above). Use in query: `event_types=void_invoice,void_remainder`.
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 571 def list_invoice_events( = {}) new_api_call_builder .request(new_request_builder(HttpMethodEnum::GET, '/invoices/events.json', Server::DEFAULT) .query_param(new_parameter(['since_date'], key: 'since_date')) .query_param(new_parameter(['since_id'], key: 'since_id')) .query_param(new_parameter(['page'], key: 'page')) .query_param(new_parameter(['per_page'], key: 'per_page')) .query_param(new_parameter(['invoice_uid'], key: 'invoice_uid')) .query_param(new_parameter(['with_change_invoice_status'], key: 'with_change_invoice_status')) .query_param(new_parameter(['event_types'], key: 'event_types')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth')) .array_serialization_format(ArraySerializationFormat::CSV)) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(ListInvoiceEventsResponse.method(:from_hash))) .execute end |
#list_invoice_segments(options = {}) ⇒ ConsolidatedInvoice
Invoice segments returned on the index will only include totals, not detailed breakdowns for ‘line_items`, `discounts`, `taxes`, `credits`, `payments`, or `custom_fields`. the consolidated invoice pages. By default, the first page of results is displayed. The page parameter specifies a page number of results to fetch. You can start navigating through the pages to consume the results. You do this by passing in a page parameter. Retrieve the next page by adding ?page=2 to the query string. If there are no results to return, then an empty result set will be returned. Use in query `page=1`. many records to fetch in each request. Default value is 20. The maximum allowed values is 200; any per_page value over 200 will be changed to 200. Use in query `per_page=200`. returned segments.
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 192 def list_invoice_segments( = {}) new_api_call_builder .request(new_request_builder(HttpMethodEnum::GET, '/invoices/{invoice_uid}/segments.json', Server::DEFAULT) .template_param(new_parameter(['invoice_uid'], key: 'invoice_uid') .is_required(true) .should_encode(true)) .query_param(new_parameter(['page'], key: 'page')) .query_param(new_parameter(['per_page'], key: 'per_page')) .query_param(new_parameter(['direction'], key: 'direction')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(ConsolidatedInvoice.method(:from_hash))) .execute end |
#list_invoices(options = {}) ⇒ ListInvoicesResponse
By default, invoices returned on the index will only include totals, not detailed breakdowns for ‘line_items`, `discounts`, `taxes`, `credits`, `payments`, `custom_fields`, or `refunds`. To include breakdowns, pass the specific field as a key in the query with a value set to `true`. YYYY-MM-DD) with which to filter the date_field. Returns invoices with a timestamp at or after midnight (12:00:00 AM) in your site’s time zone on the date specified. YYYY-MM-DD) with which to filter the date_field. Returns invoices with a timestamp up to and including 11:59:59PM in your site’s time zone on the date specified. invoice. Allowed Values: draft, open, paid, pending, voided ID. subscription group you want to fetch consolidated invoices for. This will return a paginated list of consolidated invoices for the specified group. pages. By default, the first page of results is displayed. The page parameter specifies a page number of results to fetch. You can start navigating through the pages to consume the results. You do this by passing in a page parameter. Retrieve the next page by adding ?page=2 to the query string. If there are no results to return, then an empty result set will be returned. Use in query `page=1`. many records to fetch in each request. Default value is 20. The maximum allowed values is 200; any per_page value over 200 will be changed to 200. Use in query `per_page=200`. returned invoices. line items data discounts data data credits data payments data custom fields data refunds data filter you would like to apply to your search. Use in query `date_field=issue_date`. (format YYYY-MM-DD HH:MM:SS) with which to filter the date_field. Returns invoices with a timestamp at or after exact time provided in query. You can specify timezone in query - otherwise your site’s time zone will be used. If provided, this parameter will be used instead of start_date. Allowed to be used only along with date_field set to created_at or updated_at. (format YYYY-MM-DD HH:MM:SS) with which to filter the date_field. Returns invoices with a timestamp at or before exact time provided in query. You can specify timezone in query - otherwise your site’s time zone will be used. If provided, this parameter will be used instead of end_date. Allowed to be used only along with date_field set to created_at or updated_at. invoices with matching customer id based on provided values. Use in query ‘customer_ids=1,2,3`. with matching invoice number based on provided values. Use in query `number=1234,1235`. invoices with matching line items product ids based on provided values. Use in query `product_ids=23,34`. the order of the returned list. Use in query `sort=total_amount`.
485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 485 def list_invoices( = {}) new_api_call_builder .request(new_request_builder(HttpMethodEnum::GET, '/invoices.json', Server::DEFAULT) .query_param(new_parameter(['start_date'], key: 'start_date')) .query_param(new_parameter(['end_date'], key: 'end_date')) .query_param(new_parameter(['status'], key: 'status')) .query_param(new_parameter(['subscription_id'], key: 'subscription_id')) .query_param(new_parameter(['subscription_group_uid'], key: 'subscription_group_uid')) .query_param(new_parameter(['page'], key: 'page')) .query_param(new_parameter(['per_page'], key: 'per_page')) .query_param(new_parameter(['direction'], key: 'direction')) .query_param(new_parameter(['line_items'], key: 'line_items')) .query_param(new_parameter(['discounts'], key: 'discounts')) .query_param(new_parameter(['taxes'], key: 'taxes')) .query_param(new_parameter(['credits'], key: 'credits')) .query_param(new_parameter(['payments'], key: 'payments')) .query_param(new_parameter(['custom_fields'], key: 'custom_fields')) .query_param(new_parameter(['refunds'], key: 'refunds')) .query_param(new_parameter(['date_field'], key: 'date_field')) .query_param(new_parameter(['start_datetime'], key: 'start_datetime')) .query_param(new_parameter(['end_datetime'], key: 'end_datetime')) .query_param(new_parameter(['customer_ids'], key: 'customer_ids')) .query_param(new_parameter(['number'], key: 'number')) .query_param(new_parameter(['product_ids'], key: 'product_ids')) .query_param(new_parameter(['sort'], key: 'sort')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth')) .array_serialization_format(ArraySerializationFormat::CSV)) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(ListInvoicesResponse.method(:from_hash))) .execute end |
#preview_customer_information_changes(uid) ⇒ CustomerChangesPreviewResponse
Customer information may change after an invoice is issued which may lead to a mismatch between customer information that are present on an open invoice and actual customer information. This endpoint allows to preview these differences, if any. The endpoint doesn’t accept a request body. Customer information differences are calculated on the application side. invoice, this does not refer to the public facing invoice number.
930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 930 def preview_customer_information_changes(uid) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/customer_information/preview.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(CustomerChangesPreviewResponse.method(:from_hash)) .local_error('404', 'Not Found', ErrorListResponseException) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |
#read_credit_note(uid) ⇒ CreditNote
Use this endpoint to retrieve the details for a credit note. credit note
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 86 def read_credit_note(uid) new_api_call_builder .request(new_request_builder(HttpMethodEnum::GET, '/credit_notes/{uid}.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(CreditNote.method(:from_hash))) .execute end |
#read_invoice(uid) ⇒ Invoice
Use this endpoint to retrieve the details for an invoice. invoice, this does not refer to the public facing invoice number.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 13 def read_invoice(uid) new_api_call_builder .request(new_request_builder(HttpMethodEnum::GET, '/invoices/{uid}.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash))) .execute end |
#record_external_payment_for_invoices(body: nil) ⇒ MultiInvoicePaymentResponse
This API call should be used when you want to record an external payment against multiple invoices.
In order apply a payment to multiple invoices, at minimum, specify the
‘amount` and `applications` (i.e., `invoice_uid` and `amount`) details. “` {
"payment": {
"memo": "to pay the bills",
"details": "check number 8675309",
"method": "check",
"amount": "250.00",
"applications": [
{
"invoice_uid": "inv_8gk5bwkct3gqt",
"amount": "100.00"
},
{
"invoice_uid": "inv_7bc6bwkct3lyt",
"amount": "150.00"
}
]
}
} “‘ Note that the invoice payment amounts must be greater than 0. Total amount must be greater or equal to invoices payment amount sum. Example:
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 345 def record_external_payment_for_invoices(body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/payments.json', Server::DEFAULT) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(MultiInvoicePaymentResponse.method(:from_hash)) .local_error('422', 'Unprocessable Entity', ErrorListResponseException)) .execute end |
#record_payment_for_invoice(uid, body: nil) ⇒ Invoice
This API call should be used when you want to record a payment of a given type against a specific invoice. If you would like to apply a payment across multiple invoices, you can use the Bulk Payment endpoint. ## Create a Payment from the existing payment profile In order to apply a payment to an invoice using an existing payment profile, specify ‘type` as `payment`, the amount less than the invoice total, and the customer’s ‘payment_profile_id`. The ID of a payment profile might be retrieved via the Payment Profiles API endpoint. “` {
"type": "payment",
"payment": {
"amount": 10.00,
"payment_profile_id": 123
}
} “‘ ## Create a Payment from the Subscription’s Prepayment Account In order apply a prepayment to an invoice, specify the ‘type` as `prepayment`, and also the `amount`. “` {
"type": "prepayment",
"payment": {
"amount": 10.00
}
} “‘ Note that the `amount` must be less than or equal to the Subscription’s Prepayment account balance. ## Create a Payment from the Subscription’s Service Credit Account In order to apply a service credit to an invoice, specify the ‘type` as `service_credit`, and also the `amount`: “` {
"type": "service_credit",
"payment": {
"amount": 10.00
}
} “‘ Note that Chargify will attempt to fully pay the invoice’s ‘due_amount` from the Subscription’s Service Credit account. At this time, partial payments from a Service Credit Account are only allowed for consolidated invoices (subscription groups). Therefore, for normal invoices the Service Credit account balance must be greater than or equal to the invoice’s ‘due_amount`. invoice, this does not refer to the public facing invoice number.
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 295 def record_payment_for_invoice(uid, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/payments.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash))) .execute end |
#record_payment_for_subscription(subscription_id, body: nil) ⇒ PaymentResponse
Record an external payment made against a subscription that will pay partially or in full one or more invoices. Payment will be applied starting with the oldest open invoice and then next oldest, and so on until the amount of the payment is fully consumed. Excess payment will result in the creation of a prepayment on the Invoice Account. Only ungrouped or primary subscriptions may be paid using the “bulk” payment request. subscription
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 115 def record_payment_for_subscription(subscription_id, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions/{subscription_id}/payments.json', Server::DEFAULT) .template_param(new_parameter(subscription_id, key: 'subscription_id') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(PaymentResponse.method(:from_hash)) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |
#refund_invoice(uid, body: nil) ⇒ Invoice
Refund an invoice, segment, or consolidated invoice. ## Partial Refund for Consolidated Invoice A refund less than the total of a consolidated invoice will be split across its segments. A $50.00 refund on a $100.00 consolidated invoice with one $60.00 and one $40.00 segment, the refunded amount will be applied as 50% of each ($30.00 and $20.00 respectively). invoice, this does not refer to the public facing invoice number.
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 223 def refund_invoice(uid, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/refunds.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash))) .execute end |
#reopen_invoice(uid) ⇒ Invoice
This endpoint allows you to reopen any invoice with the “canceled” status. Invoices enter “canceled” status if they were open at the time the subscription was canceled (whether through dunning or an intentional cancellation). Invoices with “canceled” status are no longer considered to be due. Once reopened, they are considered due for payment. Payment may then be captured in one of the following ways:
-
Reactivating the subscription, which will capture all open invoices (See
note below about automatic reopening of invoices.)
-
Recording a payment directly against the invoice
A note about reactivations: any canceled invoices from the most recent active period are automatically opened as a part of the reactivation process. Reactivating via this endpoint prior to reactivation is only necessary when you wish to capture older invoices from previous periods during the reactivation. ### Reopening Consolidated Invoices When reopening a consolidated invoice, all of its canceled segments will also be reopened. invoice, this does not refer to the public facing invoice number.
386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 386 def reopen_invoice(uid) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/reopen.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash)) .local_error('404', 'Not Found', APIException) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |
#send_invoice(uid, body: nil) ⇒ void
This method returns an undefined value.
This endpoint allows for invoices to be programmatically delivered via email. This endpoint supports the delivery of both ad-hoc and automatically generated invoices. Additionally, this endpoint supports email delivery to direct recipients, carbon-copy (cc) recipients, and blind carbon-copy (bcc) recipients. Please note that if no recipient email addresses are specified in the request, then the subscription’s default email configuration will be used. For example, if ‘recipient_emails` is left blank, then the invoice will be delivered to the subscription’s customer email address. On success, a 204 no-content response will be returned. Please note that this does not indicate that email(s) have been delivered, but instead indicates that emails have been successfully queued for delivery. If any invalid or malformed email address is found in the request body, the entire request will be rejected and a 422 response will be returned. invoice, this does not refer to the public facing invoice number.
899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 899 def send_invoice(uid, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/deliveries.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .is_response_void(true) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |
#update_customer_information(uid) ⇒ Invoice
This endpoint updates customer information on an open invoice and returns the updated invoice. If you would like to preview changes that will be applied, use the ‘/invoices/uid/customer_information/preview.json` endpoint before. The endpoint doesn’t accept a request body. Customer information differences are calculated on the application side. invoice, this does not refer to the public facing invoice number.
602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 602 def update_customer_information(uid) new_api_call_builder .request(new_request_builder(HttpMethodEnum::PUT, '/invoices/{uid}/customer_information.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash)) .local_error('404', 'Not Found', ErrorListResponseException) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |
#void_invoice(uid, body: nil) ⇒ Invoice
This endpoint allows you to void any invoice with the “open” or “canceled” status. It will also allow voiding of an invoice with the “pending” status if it is not a consolidated invoice. invoice, this does not refer to the public facing invoice number.
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/advanced_billing/controllers/invoices_controller.rb', line 146 def void_invoice(uid, body: nil) new_api_call_builder .request(new_request_builder(HttpMethodEnum::POST, '/invoices/{uid}/void.json', Server::DEFAULT) .template_param(new_parameter(uid, key: 'uid') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .body_param(new_parameter(body)) .header_param(new_parameter('application/json', key: 'accept')) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_nullify404(true) .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(Invoice.method(:from_hash)) .local_error('404', 'Not Found', APIException) .local_error('422', 'Unprocessable Entity (WebDAV)', ErrorListResponseException)) .execute end |