Skip to content

Instantly share code, notes, and snippets.

@iloveitaly
Last active January 30, 2019 23:22
Show Gist options
  • Save iloveitaly/c07975fe902a1c6259558c181d8602d4 to your computer and use it in GitHub Desktop.
Save iloveitaly/c07975fe902a1c6259558c181d8602d4 to your computer and use it in GitHub Desktop.
Example of how to create a Stripe Subscription and push it into NetSuite using http://SuiteSync.io/
# Michael Bianco <mike@suitesync.io>
# Description: Create a Stripe Subscription
# Link: https://gist.github.com/iloveitaly/c07975fe902a1c6259558c181d8602d4
# Usage:
#
# export STRIPE_KEY=sk_test
# gem install stripe
# ruby stripe_create_subscription.rb
require 'stripe'
Stripe.api_key = ENV['STRIPE_KEY']
customer = Stripe::Customer.create({
description: "First Customer",
email: 'customer@example.com',
# NOTE optionally pass the vat ID over to the customer
# business_vat_id: '123',
# This information is pulled over to shipping address in NetSuite
# https://dashboard.suitesync.io/docs/customers#billing--shipping-address
shipping: {
name: 'First Last',
phone: '123 123 1234',
address: {
line1: '3180 18th St',
city: 'San Francisco',
postal_code: '94110',
state: 'CA',
country: 'US',
}
},
# Custom fields can be pulled from the customer to NetSuite
# https://dashboard.suitesync.io/docs/field-customization
# metadata: {
# netsuite_custom_user_id: '123'
# }
})
# For billing address information to come over, include the billing address with the token information
# https://dashboard.suitesync.io/docs/customers#billing--shipping-address
customer.sources.create(card: 'tok_visa')
plan = Stripe::Plan.create(
amount: 100_00,
interval: 'month',
currency: 'usd',
name: 'A Example Plan',
id: "random_#{Time.now.to_i}",
# you can provide an ID of an existing item in Netsuite you'd like to use, or let SuiteSync create an item for you
# https://dashboard.suitesync.io/docs/field-customization
# metadata: {
# netsuite_non_inventory_sale_item_id: 123
# }
)
# Subscriptions are automatically pushed to NetSuite as an invoice each billing period
# https://dashboard.suitesync.io/docs/subscriptions
customer.subscriptions.create({
plan: plan.id,
# NOTE if you are using Avalara's integration with Stripe subscriptions you'll
# need to make sure this option is passed when the subscription is created
# pay_immediately: false,
# data specified on the subscription can be linked to each subsequent invoice created from this subscription
# https://dashboard.suitesync.io/docs/field-customization
# metadata: {
# netsuite_class_id: 123,
# netsuite_department_id: 123
# }
})
# An invoice is automatically generated and pushed to Stripe
invoice = customer.invoices.first
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment