Class: AdvancedBilling::BillingPortalController

Inherits:
BaseController show all
Defined in:
lib/advanced_billing/controllers/billing_portal_controller.rb

Overview

BillingPortalController

Constant Summary

Constants inherited from BaseController

AdvancedBilling::BaseController::GLOBAL_ERRORS

Instance Attribute Summary

Attributes inherited from BaseController

#config, #http_call_back

Instance Method Summary collapse

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

#enable_billing_portal_for_customer(customer_id, auto_invite: nil) ⇒ CustomerResponse

Enables Billing Portal access for a customer, with an option to send an invitation email at the same time.

Billing Portal Security

If your customer has been invited to the Billing Portal, they receive a link to manage their subscription (the “Management URL”) automatically at the bottom of their statements, invoices, and receipts. This link changes periodically for security and is only valid for 65 days. If you need to provide your customer their Management URL through other means, you can retrieve it via the API. Because the URL is cryptographically signed with a timestamp, merchants cannot generate the URL without requesting it through the API. To prevent abuse and overuse, request a new URL only when absolutely necessary. Management URLs are good for 65 days, so you should re-use a previously generated one as much as possible. If you use the URL frequently (such as to display on your website), do not make an API request every time. For more information configuring the Billing Portal, see [Billing Portal Overview](https://maxio.zendesk.com/hc/en-us/articles/24252412965133-Billi ng-Portal-Overview). customer Invitation email will be sent to the Customer. When set to 0, or not sent, an email will not be sent. Use in query: auto_invite=1.

Parameters:

  • customer_id (Integer)

    Required parameter: The Chargify id of the

  • auto_invite (AutoInvite) (defaults to: nil)

    Optional parameter: When set to 1, an

Returns:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/advanced_billing/controllers/billing_portal_controller.rb', line 35

def enable_billing_portal_for_customer(customer_id,
                                       auto_invite: nil)
  @api_call
    .request(new_request_builder(HttpMethodEnum::POST,
                                 '/portal/customers/{customer_id}/enable.json',
                                 Server::PRODUCTION)
               .template_param(new_parameter(customer_id, key: 'customer_id')
                                .is_required(true)
                                .should_encode(true))
               .query_param(new_parameter(auto_invite, key: 'auto_invite'))
               .header_param(new_parameter('application/json', key: 'accept'))
               .auth(Single.new('BasicAuth')))
    .response(new_response_handler
                .deserializer(APIHelper.method(:custom_type_deserializer))
                .deserialize_into(CustomerResponse.method(:from_hash))
                .local_error_template('422',
                                      'HTTP Response Not OK. Status code: {$statusCode}.'\
                                       ' Response: \'{$response.body}\'.',
                                      ErrorListResponseException))
    .execute
end

Returns the exact URL required for a subscriber to access the Billing Portal.

  • When retrieving a management URL, multiple requests for the same customer in a short period return the same URL
  • A new URL is not generated for 15 days
  • You must cache and remember this URL if you are going to need it again within 15 days
  • Only request a new URL after the new_link_available_at date
  • You are limited to 15 requests for the same URL. If you make more than 15 requests before new_link_available_at, you are blocked from further Management URL requests (with a response code 429). customer

Parameters:

  • customer_id (Integer)

    Required parameter: The Chargify id of the

Returns:



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/advanced_billing/controllers/billing_portal_controller.rb', line 72

def read_billing_portal_link(customer_id)
  @api_call
    .request(new_request_builder(HttpMethodEnum::GET,
                                 '/portal/customers/{customer_id}/management_link.json',
                                 Server::PRODUCTION)
               .template_param(new_parameter(customer_id, key: 'customer_id')
                                .is_required(true)
                                .should_encode(true))
               .header_param(new_parameter('application/json', key: 'accept'))
               .auth(Single.new('BasicAuth')))
    .response(new_response_handler
                .deserializer(APIHelper.method(:custom_type_deserializer))
                .deserialize_into(PortalManagementLink.method(:from_hash))
                .local_error_template('422',
                                      'HTTP Response Not OK. Status code: {$statusCode}.'\
                                       ' Response: \'{$response.body}\'.',
                                      ErrorListResponseException)
                .local_error_template('429',
                                      'HTTP Response Not OK. Status code: {$statusCode}.'\
                                       ' Response: \'{$response.body}\'.',
                                      TooManyManagementLinkRequestsErrorException))
    .execute
end

#resend_billing_portal_invitation(customer_id) ⇒ ResentInvitation

Resends a customer's Billing Portal invitation. If you attempt to resend an invitation 5 times within 30 minutes, you will receive a 422 response with an error message in the body. If you attempt to resend an invitation when the Billing Portal is already disabled for a Customer, you will receive a 422 error response. If you attempt to resend an invitation when the Customer does not exist, you will receive a 404 error response.

Limitations

This endpoint will only return a JSON response. customer

Parameters:

  • customer_id (Integer)

    Required parameter: The Chargify id of the

Returns:



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/advanced_billing/controllers/billing_portal_controller.rb', line 108

def resend_billing_portal_invitation(customer_id)
  @api_call
    .request(new_request_builder(HttpMethodEnum::POST,
                                 '/portal/customers/{customer_id}/invitations/invite.json',
                                 Server::PRODUCTION)
               .template_param(new_parameter(customer_id, key: 'customer_id')
                                .is_required(true)
                                .should_encode(true))
               .header_param(new_parameter('application/json', key: 'accept'))
               .auth(Single.new('BasicAuth')))
    .response(new_response_handler
                .deserializer(APIHelper.method(:custom_type_deserializer))
                .deserialize_into(ResentInvitation.method(:from_hash))
                .local_error_template('404',
                                      'Not Found:\'{$response.body}\'',
                                      APIException)
                .local_error_template('422',
                                      'HTTP Response Not OK. Status code: {$statusCode}.'\
                                       ' Response: \'{$response.body}\'.',
                                      ErrorListResponseException))
    .execute
end

#revoke_billing_portal_access(customer_id) ⇒ RevokedInvitation

Revokes a customer's Billing Portal invitation. If you attempt to revoke an invitation when the Billing Portal is already disabled for a Customer, you will receive a 422 error response.

Limitations

This endpoint will only return a JSON response. customer

Parameters:

  • customer_id (Integer)

    Required parameter: The Chargify id of the

Returns:



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/advanced_billing/controllers/billing_portal_controller.rb', line 139

def revoke_billing_portal_access(customer_id)
  @api_call
    .request(new_request_builder(HttpMethodEnum::DELETE,
                                 '/portal/customers/{customer_id}/invitations/revoke.json',
                                 Server::PRODUCTION)
               .template_param(new_parameter(customer_id, key: 'customer_id')
                                .is_required(true)
                                .should_encode(true))
               .header_param(new_parameter('application/json', key: 'accept'))
               .auth(Single.new('BasicAuth')))
    .response(new_response_handler
                .deserializer(APIHelper.method(:custom_type_deserializer))
                .deserialize_into(RevokedInvitation.method(:from_hash)))
    .execute
end