[Rails] Stripeから発行できる見積書をActiveStorageに保存する

2023/11/17

Rails
Stripe

こんにちは。

今回は、Stripeから発行できる見積書をActiveStorageに保存する方法を紹介します。

Stripeの見積書とは

こちらのドキュメントに詳しく書かれています。

https://stripe.com/docs/quotes

見積書は、StripeのAPIを使って発行することができます。

Stripeの見積書を発行する

# Set your secret key. Remember to switch to your live secret key in production.
# See your keys here: https://dashboard.stripe.com/apikeys
Stripe.api_key = 'sk_test_**************'

Stripe::Quote.create({
  customer: 'cus_GBV60HKsE0mb5v',
  line_items: [
    {
      price: 'price_CBb6IXqvTLXp3f',
      quantity: 5,
    },
    {price: 'price_HGd7M3DV3IMXkC'},
  ],
})

Stripeの見積書のステータス

Stripeの見積書には、以下のステータスがあります。

  • draft: 見積書はこのステータスでも編集できますが、顧客には送信されていません。
  • open: 見積もりは完了し、顧客からのアクションを待っています。
  • accepted: 顧客は見積もりと請求書を受け入れ、サブスクリプションまたはサブスクリプション スケジュールが作成されました。
  • canceled: 見積もりはキャンセルされ、無効になりました。

うち、draftステータスの見積書は、見積書のPDFを取得することができません。
openにするには、以下のようにfinalizeを実行します。

Stripe::Quote.finalize_quote('qt_**************')

Stripeの見積書のPDFを取得する

app/models/quote.rb
class Quote < ApplicationRecord
  has_one_attached :pdf

  validates :stripe_quote_id, uniqueness: true

  def save_pdf
    File.open("/tmp/#{stripe_quote_id}.pdf", "wb") do |file|
      quote.pdf do |x|
        file.write(x)
      end
    end
    stripe_quote.pdf.attach(io: File.open("/tmp/#{stripe_quote_id}.pdf"), filename: "#{stripe_quote_id}.pdf", content_type: 'application/pdf')
  end
end

これで、Stripeの見積書のPDFをActiveStorageに保存することができます。

今回はこのあたりで。