If checkout doesnt work well can use the payment intents API
Simple Difference Comparison: https://stripe.com/docs/payments/payment-intents/migration/charges Code Example: https://gist.github.com/westonganger/6ac28553b13a0bc7fe07dcf8d86ce3bd
| def create_tempfile(str_data, file_name: nil) | |
| file_basename = file_name.to_s.split('.').first || "Example File" | |
| file_ext = file_name.to_s.split('.').last || "csv" | |
| ### Must seperate basename and extension to array for tempfile new syntax | |
| ### https://ruby-doc.org/stdlib-3.0.2/libdoc/tempfile/rdoc/Tempfile.html#method-c-new | |
| tmp_file = Tempfile.new([file_basename, ".#{file_ext}"], binmode: true) | |
| tmp_file << str_data |
| module StripePayment | |
| ### https://stripe.com/docs/payments | |
| TEST_PUBLIC_KEY = "pk_test_foo".freeze | |
| TEST_SECRET_KEY = "sk_test_bar".freeze | |
| def self.create_payment_intent!( | |
| api_secret_key:, | |
| payment_method_id:, ### we use payment method id for this so we can track billing details | |
| amount_in_cents:, |
| // Links | |
| // https://stackoverflow.com/questions/951791/javascript-global-event-mechanism | |
| // https://stackoverflow.com/a/49560222/3068360 | |
| // https://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and-send-them-to-server | |
| window.addEventListener('error', function(event) { | |
| // Instead of window.onerror we use addEventListener with capture option set to true to get the most errors | |
| // window.onerror = function(message, file, line, col, error){ | |
| // https://stackoverflow.com/q/54209739/3068360 | |
| /* Note: The html string returned fron this method will not contain any actual remotely referenced JS/CSS just the HTML as in the source */ | |
| window.get_html_snapshot = function(hideItems, hideClasses){ | |
| hideItems = hideItems || false; | |
| hideClasses = hideClasses || ".modal, .modal-backdrop"; | |
| var input_types_to_skip = ["button", "submit", "file", "image", "password"]; | |
| // First write all input[type=text] field value so they can be seen when HTML is loaded | |
| $('input').each(function(){ |
If checkout doesnt work well can use the payment intents API
Simple Difference Comparison: https://stripe.com/docs/payments/payment-intents/migration/charges Code Example: https://gist.github.com/westonganger/6ac28553b13a0bc7fe07dcf8d86ce3bd
| // AUTOMATIC IFRAME HEIGHT | |
| document.querySelector('iframe#my-iframe').addEventListener('load', function(){ | |
| this.style.height = this.contentWindow.document.body.offsetHeight + "px"; | |
| this.style.width = '100%'; | |
| this.style.maxWidth = '1200px'; | |
| }); |
| Hash.class_eval do | |
| def deep_set(keys_array, val) | |
| keys_array[0...-1].inject(self){|result, key| | |
| if !result[key].is_a?(Hash) | |
| result[key] = {} | |
| end | |
| result[key] | |
| }.send(:[]=, keys_array.last, val) |
| ### Adapted from below, custom changes marked with "CUSTOM" | |
| ### https://github.com/electric-feel/i18n-backend-side_by_side/blob/master/lib/i18n/backend/side_by_side.rb | |
| require 'i18n' | |
| require 'i18n/core_ext/hash' | |
| module I18n | |
| module Backend | |
| using HashRefinements |
| module I18n | |
| class CustomExceptionHandler < ExceptionHandler | |
| def call(exception, locale, key, options) | |
| if exception.is_a?(MissingTranslation) && key.to_s != 'i18n.plural.rule' | |
| raise exception.to_exception | |
| else | |
| super | |
| end | |
| end | |
| end |
| window.generate_params_query_string = function(json){ | |
| if(typeof json == 'string'){ | |
| json = JSON.parse(json); | |
| } | |
| var params_str_array = []; | |
| var parse_plain_value = function(current_obj, current_prefix){ | |
| var strParam = current_prefix + "=" + encodeURIComponent(current_obj); | |
| params_str_array.push(strParam); |