Class: AdvancedBilling::BillingPortalController
- Inherits:
-
BaseController
- Object
- BaseController
- AdvancedBilling::BillingPortalController
- 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
Instance Method Summary collapse
-
#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.
-
#read_billing_portal_link(customer_id) ⇒ PortalManagementLink
Returns the exact URL required for a subscriber to access the Billing Portal.
-
#resend_billing_portal_invitation(customer_id) ⇒ ResentInvitation
Resends a customer's Billing Portal invitation.
-
#revoke_billing_portal_access(customer_id) ⇒ RevokedInvitation
Revokes a customer's Billing Portal invitation.
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.
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 |
#read_billing_portal_link(customer_id) ⇒ PortalManagementLink
Returns the exact URL required for a subscriber to access the Billing Portal.
Management Link Request Rules
- 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_atdate - 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 code429). customer
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
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
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 |