14

わかりましたので、約 1 年前、父の会社の予定を整理するのに役立つ Web アプリを作成しました。彼は今、「それなしではビジネスを行うことができませんでした」. そこから SAAS サブスクリプション モデルを構築し、一般に公開することにしました。

現在、SAAS バージョンに適しているとは思わない codeigniter と php で構築されています。laravel 4でゼロから再構築し、ストライプを支払いゲートウェイとして使用することを計画しています。

私の懸念は、複数のクライアントのデータベース/アプリケーション構造をどのように処理するのが最善かということです。現在、それは 1 つのビジネスに役立つだけで、非常に抽象的ではなく、私の父の会社のニーズに固有のものです。それを使用するビジネスに応じて、さまざまなデータを処理できるようにする必要があります。

マルチテナンシーを調べましたが、これがこれに適しているかどうかはわかりません。「gmail」スタイルのアプローチの方が良いと思います。ユーザーがログインした後、カスタマイズされたダッシュボードとデータのみが表示される 1 つのアプリ/ドメイン。

コーディングに取り掛かる前に、1 つのデータベースで複数の「アカウント」を処理する最善の方法を考え出す必要があります。ユーザーごとにテーブルを作成したり、ユーザーごとにデータベースを作成したりしたくありません。

私の質問は、Laravelで毎月の支払いサブスクリプションを処理するための最良の方法について、誰かが私を正しい方向に向けることができるでしょうか? 私が苦労しているのはコードではなく、毎月の顧客への請求や、請求が失敗した場合のアクセスの拒否などを処理するために正確に何を構築する必要があるかということです.

ありがとう

4

2 に答える 2

37

あなたはたくさんの読書とたくさんの仕事を求めています!

まず第一に、ここでは課金の側面を完全に無視しましょう — 結局のところ、アプリケーションのその部分は本当に些細なことです。37signals Rework (ページ 93 および 94) からページを取り出し、実装を開始する前に 30 日間の無料試用版で製品を発売します (それまでに実装方法を知っておく必要があります)。

第二に、なぜ「gmail」はマルチテナンシーを使用しないと思いますか? URI 構造は基礎となるデータベース構造について何も伝えません。私は、彼らが顧客ごとにデータベース スキーマを複製しているわけではないと確信しています。したがって、おそらくあなた自身の質問に答えているでしょう —あなたは multi-tenancy を実装したいのです

データベース (およびアプリケーション アーキテクチャ) を抽象化したい場合、正直なところ、Taylor Otwell (Laravel の作成者) の本Laravel: From Apprentice To Artisanほど、それを行うのに役立つリソースはありません。彼の本は初心者向けではありません。読み終えるころには、おそらくこの質問に自分で答えられるはずです。

ユーザーごとにテーブルやデータベースを作成することはありません。組織ごとに作成することさえありません。代わりに、コードで抽象的なデータベース構造を作成し、データベースからユーザー データを引き出します。

ユーザー認証のもう 1 つのレイヤーとして、組織へのアクセス許可を確認することを考えてみてください。リクエストごとに、そのユーザーが特定の組織にアクセスできるかどうかを確認します。また、組織がまだアクティブであることを確認することもできます (支払いをしなかったために有効期限が切れたのでしょうか? )

これは、SaaS アプリケーションの開発における次の非常に重要な要素につながります。

私はあなたのことを知りませんが、私は偏執的で、ユーザー番号4506が彼が属していない組織のデータを見ることができないと確信していなかったら、夜はよく眠れませんでした. これを確実にする唯一の本当に良い方法は、単体テストを行うことです。まだ学習していない場合は、学習することを強くお勧めします。

Laravel 4 内でこれを行う最良の方法は、Jeffrey Way の本Laravel Testing Decodedを読むことです。この本は非常に高度ですが、基本をよく理解していれば理解するのは簡単です。

大事なことを言い忘れましたが、最も重要なことはコミュニティに参加することです。私が提案する最も簡単な方法は、#laravel IRC チャンネル(freenode) でアイドリングすることです。質問をして、質問に答えてください。チャンネルの全員がとても親切で反応が良いです。

あなたは間違いなく冒険に出かけています。質問をしたり、間違いを犯したりすることを恐れないでください。幸運を。

于 2013-08-17T22:26:00.790 に答える
2

大まかな概要として、clients テーブルと subscriptions テーブルがあります。連絡先や予定など、保存が必要なその他のデータは、外部キーを使用してクライアント テーブルに関連付けることができます。

laravel では、ORM を使用して現在ログインしているクライアントを取得し、関係を通じて、それらに属する予定と連絡先を取得できます。

cartalyst.com には、ユーザー認証用の sentry および sentry-social や、ユーザー アカウントと facebook/google/twitter との統合など、laravel 用の便利なツールがいくつかあります。

Stripe では定期的な支払いを設定でき、支払いが試行されるたびに Web フックを介して通知されます。これらを支払いテーブルに記録し、ユーザー/クライアントに関連付けることができます。これを使用して、誰がいつ支払ったかを追跡できます。

また、支払いが失敗したときにすぐにアカウントをキャンセルしたくない場合があることに注意してください.

Stripe は再試行しますが、2、3 日遅れた後、または無効なカード通知を受け取った後、クライアントに連絡して支払いの詳細を更新するよう促すのが最善の対応である可能性があります。

最後にログインしたのがいつなのかを確認する機会にもなります。1 か月以上前の場合は、1 か月分の無料クレジットを付与して、あなたのアプリがどれだけユーザーに貢献できるかを思い出させてください。これを行うことで、購読していたことを忘れていたものを引き続き使用 (および支払い) できるようになる可能性があります。

于 2013-08-17T22:08:15.983 に答える