Class: AdvancedBilling::SubscriptionsController
- Inherits:
-
BaseController
- Object
- BaseController
- AdvancedBilling::SubscriptionsController
- Defined in:
- lib/advanced_billing/controllers/subscriptions_controller.rb
Overview
SubscriptionsController
Constant Summary
Constants inherited from BaseController
Instance Attribute Summary
Attributes inherited from BaseController
Instance Method Summary collapse
-
#activate_subscription(subscription_id, body: nil) ⇒ SubscriptionResponse
Activates awaiting signup and trialing subscriptions.
-
#apply_coupons_to_subscription(subscription_id, code: nil, body: nil) ⇒ SubscriptionResponse
Applies one or more coupon codes to an existing subscription.
-
#create_subscription(body: nil) ⇒ SubscriptionResponse
Creates a Subscription for a customer and product.
-
#find_subscription(reference: nil) ⇒ SubscriptionResponse
Finds a subscription by its reference.
-
#list_subscriptions(options = {}) ⇒ Array[SubscriptionResponse]
Returns an array of subscriptions from a Site.
-
#override_subscription(subscription_id, body: nil) ⇒ void
Sets certain subscription fields that are usually managed automatically.
-
#preview_subscription(body: nil) ⇒ SubscriptionPreviewResponse
Previews a subscription by POSTing the same JSON or XML as for a subscription creation.
-
#purge_subscription(subscription_id, ack, cascade: nil) ⇒ SubscriptionResponse
Purges an individual subscription for sites in test mode.
-
#read_subscription(subscription_id, include: nil) ⇒ SubscriptionResponse
Retrieves subscription details.
-
#remove_coupon_from_subscription(subscription_id, coupon_code: nil) ⇒ String
Removes a coupon from an existing subscription.
-
#update_prepaid_subscription_configuration(subscription_id, body: nil) ⇒ PrepaidConfigurationResponse
Updates a subscription’s prepaid configuration.
-
#update_subscription(subscription_id, body: nil) ⇒ SubscriptionResponse
Updates one or more attributes of a subscription.
Methods inherited from BaseController
#initialize, #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
#activate_subscription(subscription_id, body: nil) ⇒ SubscriptionResponse
Activates awaiting signup and trialing subscriptions. This feature is only available on the Relationship Invoicing architecture. Subscriptions in a group may not be activated immediately. For details on how the activation works, and how to activate subscriptions through the application, see [activation](#). The ‘revert_on_failure` parameter controls the behavior upon activation failure.
-
If set to ‘true` and something goes wrong i.e. payment fails, then
Advanced Billing will not change the subscription’s state. The subscription’s billing period will also remain the same.
-
If set to ‘false` and something goes wrong i.e. payment fails, then
Advanced Billing will continue through with the activation and enter an end of life state. For trialing subscriptions, that will either be trial ended (if the trial is no obligation), past due (if the trial has an obligation), or canceled (if the site has no dunning strategy, or has a strategy that says to cancel immediately). For awaiting signup subscriptions, that will always be canceled. The default activation failure behavior can be configured per activation attempt, or you may set a default value under Config > Settings > Subscription Activation Settings. ## Activation Scenarios ### Activate Awaiting Signup subscription
-
Given you have a product without trial
-
Given you have a site without dunning strategy
“‘mermaid
flowchart LR
AS[Awaiting Signup] --> A{Activate}
A -->|Success| Active
A -->|Failure| ROF{revert_on_failure}
ROF -->|true| AS
ROF -->|false| Canceled
“‘
-
Given you have a product with trial
-
Given you have a site with dunning strategy
“‘mermaid
flowchart LR
AS[Awaiting Signup] --> A{Activate}
A -->|Success| Trialing
A -->|Failure| ROF{revert_on_failure}
ROF -->|true| AS
ROF -->|false| PD[Past Due]
“‘ ### Activate Trialing subscription You can read more about the behavior of trialing subscriptions [here](maxio.zendesk.com/hc/en-us/articles/24252155721869-Trialing -Subscriptions). When the `revert_on_failure` parameter is set to `true`, the subscription’s state will remain as Trialing, we will void the invoice from activation and return any prepayments and credits applied to the invoice back to the subscription. the subscription. description here
642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 642 def activate_subscription(subscription_id, body: nil) @api_call .request(new_request_builder(HttpMethodEnum::PUT, '/subscriptions/{subscription_id}/activate.json', Server::PRODUCTION) .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 .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .local_error_template('400', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', ErrorArrayMapResponseException)) .execute end |
#apply_coupons_to_subscription(subscription_id, code: nil, body: nil) ⇒ SubscriptionResponse
Applies one or more coupon codes to an existing subscription. An existing subscription can accommodate multiple discounts/coupon codes. This is only applicable if each coupon is stackable. For more information on stackable coupons, we recommend reviewing our [coupon documentation.](maxio.zendesk.com/hc/en-us/articles/24261259337101 -Coupons-and-Subscriptions#stackability-rules) ## Query Parameters vs Request Body Parameters Passing in a coupon code as a query parameter will add the code to the subscription, completely replacing all existing coupon codes on the subscription. For this reason, using this query parameter on this endpoint has been deprecated in favor of using the request body parameters as described below. When passing in request body parameters, the list of coupon codes will simply be added to any existing list of codes on the subscription. the subscription. be applied to a subscription here
530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 530 def apply_coupons_to_subscription(subscription_id, code: nil, body: nil) @api_call .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions/{subscription_id}/add_coupon.json', Server::PRODUCTION) .template_param(new_parameter(subscription_id, key: 'subscription_id') .is_required(true) .should_encode(true)) .header_param(new_parameter('application/json', key: 'Content-Type')) .query_param(new_parameter(code, key: 'code')) .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 .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .local_error_template('422', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', SubscriptionAddCouponErrorException)) .execute end |
#create_subscription(body: nil) ⇒ SubscriptionResponse
Creates a Subscription for a customer and product. Specify the product with ‘product_id` or `product_handle`. To set a specific product price point, use `product_price_point_handle` or `product_price_point_id`. Identify an existing customer with `customer_id` or `customer_reference`. Optionally, include an existing payment profile using `payment_profile_id`. To create a new customer, pass customer_attributes. Select an option from the **Request Examples** drop-down on the right side of the portal to see examples of common scenarios for creating subscriptions. See the [Subscription Signups](page:introduction/basic-concepts/subscription-signup) article for more information on working with subscriptions in Advanced Billing. ## Payment information Payment information may be required to create a subscription, depending on the options for the Product being subscribed. See [product options](docs.maxio.com/hc/en-us/articles/24261076617869-Edit-Prod ucts) for more information. See the [Payments Profile]($e/Payment%20Profiles/createPaymentProfile) endpoint for details on payment parameters. Do not use real card information for testing. See the Sites articles that cover [testing your site setup](docs.maxio.com/hc/en-us/articles/24250712113165-Testing-Ove rview#testing-overview-0-0) for more details on testing in your sandbox. Note that collecting and sending raw card details in production requires [PCI compliance](docs.maxio.com/hc/en-us/articles/24183956938381-PCI-Co mpliance#pci-compliance-0-0) on your end. If your business is not PCI compliant, use [Maxio.js (formerly Chargify.js)](docs.maxio.com/hc/en-us/articles/38163190843789-Char gify-js-Overview#chargify-js-overview-0-0) to collect credit card or bank account information. ## 3D Secure (3DS) Authentication post-authentication flow When a payment requires 3DS Authentication to adhere to Strong Customer Authentication (SCA), the request enters a post-authentication flow where a 422 Unprocessable Entity status is returned with an action_link that will direct the customer through 3DS Authentication. See the [3D Secure Post-Authentication Flow](docs.maxio.com/hc/en-us/articles/44277749524365-3D-Secure-Po st-Authentication-Flow) article in the product documentation to learn how to manage the redirect flow. description here
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 53 def create_subscription(body: nil) @api_call .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions.json', Server::PRODUCTION) .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 .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .local_error_template('422', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', ErrorListResponseException)) .execute end |
#find_subscription(reference: nil) ⇒ SubscriptionResponse
Finds a subscription by its reference.
364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 364 def find_subscription(reference: nil) @api_call .request(new_request_builder(HttpMethodEnum::GET, '/subscriptions/lookup.json', Server::PRODUCTION) .query_param(new_parameter(reference, key: 'reference')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .local_error_template('404', 'Not Found:\'{$response.body}\'', APIException)) .execute end |
#list_subscriptions(options = {}) ⇒ Array[SubscriptionResponse]
Returns an array of subscriptions from a Site. Pay close attention to query string filters and pagination in order to control responses from the server. ## Search for a subscription Use the query strings below to search for a subscription using the criteria available. The return value will be an array. ## Self-Service Page token Self-Service Page token for the subscriptions is not returned by default. If this information is desired, the include[]=self_service_page_token parameter must be provided with the request. 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`. state of the subscription subscription. (Note that the product handle cannot be used.) product price point. If supplied, product is required currently applied to the subscription. (This can be found in the URL when editing a coupon. Note that the coupon code cannot be used.) applied to the subscription filter you’d like to apply to your search. Allowed Values: , current_period_ends_at, current_period_starts_at, created_at, activated_at, canceled_at, expires_at, trial_started_at, trial_ended_at, updated_at YYYY-MM-DD) with which to filter the date_field. Returns subscriptions with a timestamp at or after midnight (12:00:00 AM) in your site’s time zone on the date specified. Use in query ‘start_date=2022-07-01`. YYYY-MM-DD) with which to filter the date_field. Returns subscriptions with a timestamp up to and including 11:59:59PM in your site’s time zone on the date specified. Use in query `end_date=2022-08-01`. time (format YYYY-MM-DD HH:MM:SS) with which to filter the date_field. Returns subscriptions 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. Use in query ‘start_datetime=2022-07-01 09:00:05`. (format YYYY-MM-DD HH:MM:SS) with which to filter the date_field. Returns subscriptions 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. Use in query ‘end_datetime=2022-08-01 10:00:05`. the metadata field specified in the parameter. Use in query `metadata=value&metadata=another_value`. in which results are returned. Use in query `direction=asc`. to sort including additional data in the response. Use in query: `include[]=self_service_page_token`.
141 142 143 144 145 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 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 141 def list_subscriptions( = {}) @api_call .request(new_request_builder(HttpMethodEnum::GET, '/subscriptions.json', Server::PRODUCTION) .query_param(new_parameter(['page'], key: 'page')) .query_param(new_parameter(['per_page'], key: 'per_page')) .query_param(new_parameter(['state'], key: 'state')) .query_param(new_parameter(['product'], key: 'product')) .query_param(new_parameter(['product_price_point_id'], key: 'product_price_point_id')) .query_param(new_parameter(['coupon'], key: 'coupon')) .query_param(new_parameter(['coupon_code'], key: 'coupon_code')) .query_param(new_parameter(['date_field'], key: 'date_field')) .query_param(new_parameter(['start_date'], key: 'start_date')) .query_param(new_parameter(['end_date'], key: 'end_date')) .query_param(new_parameter(['start_datetime'], key: 'start_datetime')) .query_param(new_parameter(['end_datetime'], key: 'end_datetime')) .query_param(new_parameter(['metadata'], key: 'metadata')) .query_param(new_parameter(['direction'], key: 'direction')) .query_param(new_parameter(['sort'], key: 'sort')) .query_param(new_parameter(['include'], key: 'include')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth')) .array_serialization_format(ArraySerializationFormat::UN_INDEXED)) .response(new_response_handler .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .is_response_array(true)) .execute end |
#override_subscription(subscription_id, body: nil) ⇒ void
This method returns an undefined value.
Sets certain subscription fields that are usually managed automatically. Some of the fields can be set via the normal Subscriptions Update API, but others can only be set using this endpoint. This endpoint is provided for cases where you need to “align” Advanced Billing data with data that happened in your system, perhaps before you started using Advanced Billing. For example, you may choose to import your historical subscription data, and would like the activation and cancellation dates in Advanced Billing to match your existing historical dates. Advanced Billing does not backfill historical events (i.e. from the Events API), but some static data can be changed via this API. Why are some fields only settable from this endpoint, and not the normal subscription create and update endpoints? Because we want users of this endpoint to be aware that these fields are usually managed by Advanced Billing, and using this API means **you are stepping out on your own.** Changing these fields will not affect any other attributes. For example, adding an expiration date will not affect the next assessment date on the subscription. If you regularly need to override the current_period_starts_at for new subscriptions, this can also be accomplished by setting both ‘previous_billing_at` and `next_billing_at` at subscription creation. See the documentation on [Importing Subscriptions](./b3A6MTQxMDgzODg-create-subscription#subscriptions-import) for more information. ## Limitations When passing `current_period_starts_at` some validations are made:
-
The subscription needs to be unbilled (no statements or invoices).
-
The value passed must be a valid date/time. We recommend using the iso
8601 format.
-
The value passed must be before the current date/time.
If unpermitted parameters are sent, a 400 HTTP response is sent along with a string giving the reason for the problem. the subscription. fields are available to be set.
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 339 def override_subscription(subscription_id, body: nil) @api_call .request(new_request_builder(HttpMethodEnum::PUT, '/subscriptions/{subscription_id}/override.json', Server::PRODUCTION) .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)) .body_serializer(proc do |param| param.to_json unless param.nil? end) .auth(Single.new('BasicAuth'))) .response(new_response_handler .is_response_void(true) .local_error_template('422', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', SingleErrorResponseException)) .execute end |
#preview_subscription(body: nil) ⇒ SubscriptionPreviewResponse
Previews a subscription by POSTing the same JSON or XML as for a subscription creation. The “Next Billing” amount and “Next Billing” date are represented in each Subscriber’s Summary. A subscription will not be created by utilizing this endpoint; it is meant to serve as a prediction. For more information, see our documentation [here](maxio.zendesk.com/hc/en-us/articles/24252493695757-Subscrib er-Interface-Overview). ## Taxable Subscriptions This endpoint will preview taxes applicable to a purchase. In order for taxes to be previewed, the following conditions must be met: + Taxes must be configured on the subscription + The preview must be for the purchase of a taxable product or component, or combination of the two. + The subscription payload must contain a full billing or shipping address in order to calculate tax For more information about creating taxable previews, see our documentation guide on how to create [taxable subscriptions.](maxio.zendesk.com/hc/en-us/sections/24287012349325 -Taxes) You do not need to include a card number to generate tax information when you are previewing a subscription. However, when you actually want to create the subscription, you must include the credit card information if you want the billing address to be stored in Advanced Billing. The billing address and the credit card information are stored together within the payment profile object. Also, you may not send a billing address to Advanced Billing without payment profile information, as the address is stored on the card. You can pass shipping and billing addresses and still decide not to calculate taxes. To do that, pass ‘skip_billing_manifest_taxes: true` attribute. ## Non-taxable Subscriptions If you’d like to calculate subscriptions that do not include tax you may leave off the billing information. description here
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 493 def preview_subscription(body: nil) @api_call .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions/preview.json', Server::PRODUCTION) .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 .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionPreviewResponse.method(:from_hash))) .execute end |
#purge_subscription(subscription_id, ack, cascade: nil) ⇒ SubscriptionResponse
Purges an individual subscription for sites in test mode. Provide the subscription ID in the url. To confirm, supply the customer ID in the query string ‘ack` parameter. You may also delete the customer record and/or payment profiles by passing `cascade` parameters. For example, to delete just the customer record, the query params would be: `?ack=customer_id&cascade[]=customer` If you need to remove subscriptions from a live site, contact support to discuss your use case. ### Delete customer and payment profile The query params will be: `?ack=customer_id&cascade[]=customer&cascade=payment_profile` the subscription. are “customer” or “payment_profile”. Use in query: `cascade[]=customer&cascade=payment_profile`.
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 399 def purge_subscription(subscription_id, ack, cascade: nil) @api_call .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions/{subscription_id}/purge.json', Server::PRODUCTION) .template_param(new_parameter(subscription_id, key: 'subscription_id') .is_required(true) .should_encode(true)) .query_param(new_parameter(ack, key: 'ack') .is_required(true)) .query_param(new_parameter(cascade, key: 'cascade')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth')) .array_serialization_format(ArraySerializationFormat::UN_INDEXED)) .response(new_response_handler .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .local_error_template('400', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', SubscriptionResponseErrorException)) .execute end |
#read_subscription(subscription_id, include: nil) ⇒ SubscriptionResponse
Retrieves subscription details. ## Self-Service Page token Self-Service Page token for the subscription is not returned by default. If this information is desired, the include[]=self_service_page_token parameter must be provided with the request. the subscription. including additional data in the response. Use in query: ‘include[]=coupons&include=self_service_page_token`.
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 284 def read_subscription(subscription_id, include: nil) @api_call .request(new_request_builder(HttpMethodEnum::GET, '/subscriptions/{subscription_id}.json', Server::PRODUCTION) .template_param(new_parameter(subscription_id, key: 'subscription_id') .is_required(true) .should_encode(true)) .query_param(new_parameter(include, key: 'include')) .header_param(new_parameter('application/json', key: 'accept')) .auth(Single.new('BasicAuth')) .array_serialization_format(ArraySerializationFormat::UN_INDEXED)) .response(new_response_handler .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash))) .execute end |
#remove_coupon_from_subscription(subscription_id, coupon_code: nil) ⇒ String
Removes a coupon from an existing subscription. For more information on the expected behavior of removing a coupon from a subscription, see our documentation [here.](maxio.zendesk.com/hc/en-us/articles/24261259337101-Coupons -and-Subscriptions#removing-a-coupon) the subscription.
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 565 def remove_coupon_from_subscription(subscription_id, coupon_code: nil) @api_call .request(new_request_builder(HttpMethodEnum::DELETE, '/subscriptions/{subscription_id}/remove_coupon.json', Server::PRODUCTION) .template_param(new_parameter(subscription_id, key: 'subscription_id') .is_required(true) .should_encode(true)) .query_param(new_parameter(coupon_code, key: 'coupon_code')) .auth(Single.new('BasicAuth'))) .response(new_response_handler .deserializer(APIHelper.method(:deserialize_primitive_types)) .deserialize_into(proc do |response| response&.to_s end) .is_primitive_response(true) .local_error_template('422', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', SubscriptionRemoveCouponErrorsException)) .execute end |
#update_prepaid_subscription_configuration(subscription_id, body: nil) ⇒ PrepaidConfigurationResponse
Updates a subscription’s prepaid configuration. the subscription. type description here
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 431 def update_prepaid_subscription_configuration(subscription_id, body: nil) @api_call .request(new_request_builder(HttpMethodEnum::POST, '/subscriptions/{subscription_id}/prepaid_configurations.json', Server::PRODUCTION) .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 .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(PrepaidConfigurationResponse.method(:from_hash)) .local_error_template('422', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', APIException)) .execute end |
#update_subscription(subscription_id, body: nil) ⇒ SubscriptionResponse
Updates one or more attributes of a subscription. ## Update Subscription Payment Method Change the card that your subscriber uses for their subscription. You can also use this method to change the expiration date of the card **if your gateway allows**. Do not use real card information for testing. See the Sites articles that cover [testing your site setup](docs.maxio.com/hc/en-us/articles/24250712113165-Testing-Ove rview#testing-overview-0-0) for more details on testing in your sandbox. Note that collecting and sending raw card details in production requires [PCI compliance](docs.maxio.com/hc/en-us/articles/24183956938381-PCI-Co mpliance#pci-compliance-0-0) on your end. If your business is not PCI compliant, use [Chargify.js](docs.maxio.com/hc/en-us/articles/38163190843789-Char gify-js-Overview#chargify-js-overview-0-0) to collect credit card or bank account information. > Note: Partial card updates for Authorize.Net are not allowed via this endpoint. The existing Payment Profile must be directly updated instead. ## Update Product You also use this method to change the subscription to a different product by setting a new value for product_handle. A product change can be done in two different ways, **product change** or **delayed product change**. ### Product Change You can change a subscription’s product. The new payment amount is calculated and charged at the normal start of the next period. If you require complex product changes or prorated upgrades and downgrades instead, please see the documentation on [Migrating Subscription Products](docs.maxio.com/hc/en-us/articles/24252069837581-Product- Changes-and-Migrations#product-changes-and-migrations-0-0). To perform a product change, set either the ‘product_handle` or `product_id` attribute to that of a different product from the same site as the subscription. You can also change the price point by passing in either `product_price_point_id` or `product_price_point_handle` - otherwise the new product’s default price point is used. ### Delayed Product Change This method also changes the product and/or price point, and the new payment amount is calculated and charged at the normal start of the next period. This method schedules the product change to happen automatically at the subscription’s next renewal date. To perform a delayed product change, set the ‘product_handle` attribute as you would in a regular product change, but also set the `product_change_delayed` attribute to `true`. No proration applies in this case. You can also perform a delayed change to the price point by passing in either `product_price_point_id` or `product_price_point_handle` > Note: To cancel a delayed product change, set `next_product_id` to an empty string. ## Billing Date Changes You can update dates for a subscription. ### Regular Billing Date Changes Send the `next_billing_at` to set the next billing date for the subscription. After that date passes and the subscription is processed, the following billing date will be set according to the subscription’s product period. > Note: If you pass an invalid date, the correct date is automatically set to the correct date. For example, if February 30 is passed, the next billing would be set to March 2nd in a non-leap year. The server response will not return data under the key/value pair of ‘next_billing_at`. View the key/value pair of `current_period_ends_at` to verify that the `next_billing_at` date has been changed successfully. ### Calendar Billing and Snap Day Changes For a subscription using Calendar Billing, setting the next billing date is a bit different. Send the `snap_day` attribute to change the calendar billing date for **a subscription using a product eligible for calendar billing**. > Note: If you change the product associated with a subscription that contains a `snap_day` and immediately `READ/GET` the subscription data, it will still contain original `snap_day`. The `snap_day` will reset to null on the next billing cycle. This is because a product change is instantaneous and only affects the product associated with a subscription. the subscription. description here
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/advanced_billing/controllers/subscriptions_controller.rb', line 249 def update_subscription(subscription_id, body: nil) @api_call .request(new_request_builder(HttpMethodEnum::PUT, '/subscriptions/{subscription_id}.json', Server::PRODUCTION) .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 .deserializer(APIHelper.method(:custom_type_deserializer)) .deserialize_into(SubscriptionResponse.method(:from_hash)) .local_error_template('422', 'HTTP Response Not OK. Status code: {$statusCode}.'\ ' Response: \'{$response.body}\'.', ErrorListResponseException)) .execute end |