多くの起業家にとって、支払いプロセスは究極の忍耐力の試練のように感じられます。ようやくすべてが解けたと思った瞬間、さらに複雑な層が現れ、順風満帆はまだ遠い夢であることを思い出させます。
あなたも同じように感じますか?レモンスクイージーはあなたのアスピリンです!
この魔法のような支払いポーションはすべてを簡素化するので、支払いの煩わしさを忘れて楽しいことに集中できます。コーディングを複雑にする必要はもうありません。それは、チームに決済ユニコーンがいるようなものです。
そうですね、税務コンプライアンスの博士号を取得したり、支払いの頭痛のために際限なく供給されるアスピリンを必要とせずに SaaS ビジネスを運営できることを想像してみてください。 LemonSqueezy は、支払いやサブスクリプションから世界的な税務コンプライアンスや不正防止に至るまで、すべてを合理化します。
さらに、複数通貨のサポートと、あらゆる種類のデジタル製品を扱う店頭の準備が整っています。それは、退屈な作業をすべて引き受けてくれるテクノロジーに精通したビジネス パートナーがいるようなもので、あなたは最も得意なこと、つまり創造に集中できるのです。デジタル クリエイター、起業家、コーディング ソリューションよりもボタンをクリックすることを好む人に最適です。
本題に入る前に、完全なコードは私の GitHub リポジトリにあり、デモは私の Instagram でご覧いただけることだけをお伝えしておきます。さて、GitHub 上のこのプロジェクトについてですが、支払いオプションが 2 つあります。1 つ目は、従来の 1 回限りの支払いです。 2 つ目は、これまでにない豪華なサブスクリプション モデルです。
ただし、このチュートリアルでは、一括して 1 回限りの支払いで進めます。ああ、私の例では、ケーススタディとして毎月のハウスクリーニング サービスを使用しています。少しばかげているように聞こえるかもしれませんが、まあ、これはすべてコーディングのトレーニングの一部です。 ?
始めるには、Lemon Squeezy にストアといくつかの製品とバリエーションを作成しておく必要があります。
テストモードがオンになっていることを確認してください。ストアを公開すると、オフになります。左下にチェックを入れてください。
私の製品は次のようになります
次に、ストアに接続するための API キーを https://app.lemonsqueezy.com/settings/api で生成しましょう:
これを環境変数として Next.js プロジェクトに追加します:
LEMONSQUEEZY_API_KEY="[YOUR API KEY]"
次に、支払いプロセスを処理する API ルートを作成します。この部分で必要な最終結果は、後でフロントエンド セクションに渡す checkoutUrl を取得することです。
export const dynamic = "force-dynamic"; export async function POST(req: NextRequest) { try { const reqData = await req.json(); if (!reqData.productId) { console.error("Product ID is missing"); return NextResponse.json({ message: "Product ID is required" }, { status: 400 }); } const response = await lemonSqueezyApiInstance.post("/checkouts", { data: { type: "checkouts", attributes: { checkout_data: { custom: { user_id: "123", }, }, }, relationships: { store: { data: { type: "stores", id: process.env.LEMON_SQUEEZY_STORE_ID?.toString(), }, }, variant: { data: { type: "variants", id: reqData.productId.toString(), }, }, }, }, }); const checkoutUrl = response.data.data.attributes.url; console.log(response.data); return NextResponse.json({ checkoutUrl }); } catch (error) { console.error("Error in POST /api/lemonsqueezy:", error); return NextResponse.json({ message: "An error occured" }, { status: 500 }); } }
このコードの簡単な説明は次のとおりです:
const checkoutUrl = response.data.data.attributes.url;
return NextResponse.json({ checkoutUrl });
API が正しく動作していることを確認するには、テストする必要があります。これには Postman というツールを使用します。始める前に、製品のvariantIdが必要です。これはLemonSqueezyダッシュボードで見つけることができます。
すべてが正しく動作している場合は、checkoutUrl
を含む応答が返されるはずです。基礎を築いたので、次のステップはフロントエンドの見栄えを良くすることです。私は TailwindCSS の大ファンなので、価格表も彼らと一緒に作成しています
コードはここから入手できます
次に、作成した API ルートを呼び出す非同期関数を設定します。この関数は、productId を含む POST リクエストを送信し、その返信としてチェックアウト URL を取得します。 URL を取得したら、新しいタブで開き、ユーザーを支払いページに誘導します。
const buyProcut1 = async () => { try { const response = await axios.post("../api/lemonsqueezy", { productId: "495244", }); console.log(response.data); window.open(response.data.checkoutUrl, "_blank"); } catch (error) { console.error(error); alert("Failed to buy product #1"); } };
そのコードは
に関するものです最後になりましたが、注文を追跡するために Webhook を設定しています。 LemonSqueezy ダッシュボードに戻り、Webhook を設定します。
URL にはパブリックにアクセスできるものが必要ですが、ローカル開発ではこれが困難です。ここで ngrok が役に立ちます。
ngrok は、ローカル マシンに転送する一時的なパブリック URL を提供します。このリンクをチェックして、デバイスに ngrok をセットアップできます:
https://dashboard.ngrok.com/get-started/setup/
前と同様に、Webhook を処理するコードはすでに完成しています。必要なのは、ルート ハンドラーで設定して、甘い
を楽しむことだけです。Instagram、Twitter、GitHub で連絡を取り合いましょう。ここでは本当の魔法が起こります。
最後までお付き合いいただきありがとうございました! ?
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3