質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1416閲覧

rails+stripeで定期支払を実装したいがStripe::InvalidRequestError (No such customer: 'cus_~')とでてしまう

you88

総合スコア147

Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/06/16 08:24

編集2021/06/17 00:09

下記の構成で

  • rails
  • stripe

下記をやりたいと考えています。

  • ディスティネーション支払いでユーザー1とプラットフォームに支払い
  • stripe checkout使用
  • 月1の定期支払

コードは下記でcheckout時に定期支払の設定をしようとしています。jsで下記を叩いてjsonを返してもらう形です。

stripe_checkout_session = Stripe::Checkout::Session.create({ payment_method_types: ['card'], line_items: [{ price: data['priceId'], quantity: 1, }], subscription_data: { application_fee_percent: 20, transfer_data: { destination: data['accountId'], }, }, mode: 'subscription', customer: data['customerId'], success_url: request.base_url + '/subscription_done?session_id={CHECKOUT_SESSION_ID}', cancel_url: request.base_url + '/subscription_cancel', },{stripe_account: data['accountId']} ) render :json => stripe_checkout_session

しかし下記のエラーが出てしまいます。

Stripe::InvalidRequestError (No such customer: 'cus_~')

最初customerが共有できていないのかなと思ったのですがstripeにきいたところ、ディスティネーション支払いはプラットフォームなのでcustomerの共有は不要とのことでした。管理画面に上記のcustomerIDはあるのでなぜないと出てしまうのかわからない状態です。

このエラーの対処方法わかる方いるでしょうか?

dataの送り方は下記でviewからjsで送っています。

<script> var stripe = Stripe('pk_test_'); var csrf_token = document.querySelector('meta[name="csrf-token"]').content; var createCheckoutSession = function(priceId,customerId,accountId) { return fetch("/create-checkout-session", { method: "POST", headers: { "Content-Type": "application/json", 'X-CSRF-Token': csrf_token }, body: JSON.stringify({ priceId: priceId, customerId: customerId, accountId: accountId, }) }).then(function(result) { return result.json(); }); }; document .getElementById("checkout") .addEventListener("click", function(evt) { createCheckoutSession("<%= @plan.stripe_price_id %>","<%= current_user.stripe_customer_id %>","<%= @plan_user.stripe_account_id %>").then(function(data) { stripe .redirectToCheckout({ sessionId: data.id }) .then(handleResult); }); }); </script>

dataは下記になります

{ "id": "evt_", "object": "event", "api_version": "", "created": , "data": { "object": { "id": "cs_test_", "object": "checkout.session", "allow_promotion_codes": null, "amount_subtotal": 3000, "amount_total": 3000, "billing_address_collection": null, "cancel_url": "", "client_reference_id": null, "currency": "usd", "customer": "cus_", "customer_details": { "email": "", "tax_exempt": "none", "tax_ids": [ ] }, "customer_email": null, "livemode": false, "locale": null, "metadata": { }, "mode": "payment", "payment_intent": "pi_", "payment_method_options": { }, "payment_method_types": [ "card" ], "payment_status": "paid", "setup_intent": null, "shipping": null, "shipping_address_collection": null, "submit_type": null, "subscription": null, "success_url": "", "total_details": { "amount_discount": 0, "amount_shipping": 0, "amount_tax": 0 } } }, "livemode": false, "pending_webhooks": 3, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2021/06/16 23:06

data はどこでどう作ってますか
you88

2021/06/17 00:09

ありがとうございます。dataの送り方と内容を追記しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問