Last active
November 14, 2018 19:48
-
-
Save iloveitaly/30e366a516e294b699b6 to your computer and use it in GitHub Desktop.
Example of creating a NetSuite Invoice using the Stripe Invoice API using http://SuiteSync.io/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Michael Bianco <mike@suitesync.io> | |
# Description: Create a NetSuite Invoice through the Stripe Invoice API using http://SuiteSync.io | |
# Link: https://gist.github.com/iloveitaly/30e366a516e294b699b6 | |
# Usage: | |
# | |
# export STRIPE_KEY=sk_test_123 | |
# gem install stripe | |
# ruby stripe_invoice_line_item_metadata.rb | |
require 'stripe' | |
Stripe.api_key = ENV['STRIPE_KEY'] | |
customer = Stripe::Customer.create({ | |
:description => "Sample customer", | |
:email => "sample@example.com", | |
# optional: if you specify a shipping address here, it is added to the NetSuite customer | |
# https://dashboard.suitesync.io/docs/customers#billing--shipping-address | |
:shipping => { | |
:name => 'Sample Customer', | |
:phone => '123 123 1234', | |
:address => { | |
:line1 => '3180 18th St', | |
:city => 'San Francisco', | |
:postal_code => '94110', | |
:state => 'CA', | |
:country => 'US', | |
} | |
}, | |
:metadata => { | |
# add additional business-specific data to the NetSuite customer using metadata | |
# https://dashboard.suitesync.io/docs/field-customization | |
netsuite_custom_id: 123 | |
} | |
}) | |
card_token = Stripe::Token.create({ | |
:card => { | |
:number => 4242424242424242, | |
:exp_month => 8, | |
:exp_year => (Date.today>>24).year, | |
:cvc => "314", | |
# optional: if a billing address is specified here, it is added to the NetSuite customer | |
:address_city => 'San Francisco', | |
:address_country => 'United States', | |
:address_line1 => '3180 18th St', | |
:address_line2 => '', | |
:address_state => 'CA', | |
:address_zip => '94110', | |
} | |
}) | |
customer.sources.create(card: card_token.id) | |
Stripe::InvoiceItem.create({ | |
:customer => customer.id, | |
:amount => 200_00, | |
:currency => "usd", | |
:description => "Base charge", | |
:metadata => { | |
# customize fields on NetSuite line items using metadata | |
netsuite_tax_code_id: 123 | |
} | |
}) | |
Stripe::InvoiceItem.create({ | |
:customer => customer.id, | |
:amount => 50_00, | |
:currency => "usd", | |
# you can choose a specific line item in NetSuite based on the description field | |
# or a metadata passed over on the line item level. Here's more information: | |
# https://dashboard.suitesync.io/docs/invoices#standalone-invoice-items | |
:description => "Bonus Pack" | |
}) | |
invoice = Stripe::Invoice.create({ | |
:customer => customer.id, | |
# specify additional information to be passed to the NetSuite invoice | |
# https://dashboard.suitesync.io/docs/field-customization | |
:metadata => { | |
netsuite_class_id: 123, | |
netsuite_department_id: 123 | |
} | |
}) | |
# `pay` creates a Stripe payment on the customer's saved card | |
invoice.pay | |
# retrieve the internalId of the created CustomerPayment | |
# NOTE this only works if you have a SuiteSync account | |
loop do | |
invoice.refresh | |
if internal_id = invoice.metadata['netsuite_invoice_id'] | |
puts "Invoice Internal ID: #{internal_id}" | |
exit(0) | |
end | |
puts "Waiting for Invoice to translate to NetSuite..." | |
sleep(1) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment