ぼくペイの仕組みについて — けーにもーんとClaude AIの会話
「ぼくのアプリ」の開発者けーにもーんが、AIと本気で話した記録です。
「ぼくペイってけっきょく何?」「Webhookって何?」「個人情報は大丈夫?」がわかります。
1. ぼくペイって簡単に使えるの?
け
おれもバイブコーディングばかりで全然書いてないからもう忘れたけども、ようするに、簡単にぼくペイを組み込めるようにできないのかな?って思ったんだ。
AI
できる。決済ページはぼくのアプリ側が自動で用意する仕組みや。開発者は自分のアプリの購入ボタンに、SDKのコピペ数行を貼るだけ。ボタンを押したらぼくのアプリ上のStripe決済ページに飛ぶ。
決済画面そのものを作る必要は一切ない。コピペ例はSDKガイドに全パターン載ってる。
これならバイブコーディングの人でも「AIにこのページ読ませてコピペして」で終わるで。
決済画面そのものを作る必要は一切ない。コピペ例はSDKガイドに全パターン載ってる。
これならバイブコーディングの人でも「AIにこのページ読ませてコピペして」で終わるで。
け
それよさそうやな。しかし、実際には、それを押したことによって、ダウンロードができる仕組みや、会員になれる仕組み、有料会員になれる仕組み、なにかしら特典を得れる仕組みが必要になるねんな。
その課金→特別ななにかのトリガーを引かせる方法とかってのは、もうプログラミング知識がいるのか?
その課金→特別ななにかのトリガーを引かせる方法とかってのは、もうプログラミング知識がいるのか?
AI
正直に言うと、パターンによる。
1. ダウンロード販売(ファイルを渡す)
→ プログラミングほぼ不要。決済完了後にダウンロードURLを表示するだけ。ぼくのアプリ側で自動化できる。
2. 特典コード付与(クーポンやコードを渡す)
→ プログラミングほぼ不要。決済完了後にコードを表示する or メールで送る。これもぼくのアプリ側で自動化できる。
3. 有料会員/機能解放(ログイン後に特別な機能を解放)
→ プログラミング必要。「この人は課金済みか?」をアプリ側で判定する仕組みが要る。
つまり、よくある2パターン(DL販売・特典コード)はノーコードでいける。有料会員パターンだけプログラミングが必要やけど、そこは「AIに実装してもらって」で対応できる。
1. ダウンロード販売(ファイルを渡す)
→ プログラミングほぼ不要。決済完了後にダウンロードURLを表示するだけ。ぼくのアプリ側で自動化できる。
2. 特典コード付与(クーポンやコードを渡す)
→ プログラミングほぼ不要。決済完了後にコードを表示する or メールで送る。これもぼくのアプリ側で自動化できる。
3. 有料会員/機能解放(ログイン後に特別な機能を解放)
→ プログラミング必要。「この人は課金済みか?」をアプリ側で判定する仕組みが要る。
つまり、よくある2パターン(DL販売・特典コード)はノーコードでいける。有料会員パターンだけプログラミングが必要やけど、そこは「AIに実装してもらって」で対応できる。
2. Webhookってなんやねん?
け
ところで「Webhook」ってなんやねん?ガイドにも書いてあるけど、全然わからんねんけど。
AI
Webhookは「自動お知らせ電話」みたいなもん。
例えるなら:
出前を頼んだとする。届いたかどうかを知る方法は2つ。
A. 開発者のアプリが何回も「届いた?届いた?」ってStripeに電話する(= APIで毎回確認しに行く)
B. 届いたらStripeから「届けたで!」って開発者のアプリに電話くれる(= Webhook)
WebhookはB。「お客さんが課金したで!」って、Stripe側から自動的にあなたのアプリに通知してくれる仕組みや。
例えるなら:
出前を頼んだとする。届いたかどうかを知る方法は2つ。
A. 開発者のアプリが何回も「届いた?届いた?」ってStripeに電話する(= APIで毎回確認しに行く)
B. 届いたらStripeから「届けたで!」って開発者のアプリに電話くれる(= Webhook)
WebhookはB。「お客さんが課金したで!」って、Stripe側から自動的にあなたのアプリに通知してくれる仕組みや。
け
ほんなら「ぼくペイAPI」ってのは何?Webhookとは違うんか?
AI
さっきの出前の例で言うと:
Webhook = Stripeから「届けたで!」って電話がくる(向こうから通知)
API = 開発者のアプリから「届いた?売上いくら?」ってStripeに電話する(こっちから確認)
どっちも「情報のやりとり」やけど、方向が逆。
Webhook = Stripeから「届けたで!」って電話がくる(向こうから通知)
API = 開発者のアプリから「届いた?売上いくら?」ってStripeに電話する(こっちから確認)
どっちも「情報のやりとり」やけど、方向が逆。
3. Webhookなしでもいけるの?
け
ちょっと待って。ダウンロード販売でも「課金されたな、ならこの人にダウンロードさせたろ!」って仕組みがいるんちゃうの?それってWebhookちゃうの?
AI
ええ質問や。ポイントは「誰がダウンロードさせるか」。
自分のアプリでダウンロードさせる場合 → Webhookが必要。
ぼくのアプリがダウンロードさせる場合 → Webhookなしでいける。決済完了画面で「はいどうぞ、ダウンロードはこちら」ってリンクを出す。開発者はファイルをアップロードしとくだけ。
自分のアプリでダウンロードさせる場合 → Webhookが必要。
ぼくのアプリがダウンロードさせる場合 → Webhookなしでいける。決済完了画面で「はいどうぞ、ダウンロードはこちら」ってリンクを出す。開発者はファイルをアップロードしとくだけ。
け
でもそのURL知ってる人間は誰でもダウンロードできてしまう危険があるんちゃう?課金せずにインチキでダウンロードできてしまわないのか?
AI
インチキダウンロードはできへん。仕組みはこう:
1. お客さんが「購入する」ボタンを押す → Stripe決済ページへ
2. 決済完了 → URLにStripe決済完了の証明IDが付く
3. ぼくのアプリが「この証明IDは本物か?」をStripeに確認
4. 本物の場合だけダウンロードページを表示
URLを知ってるだけじゃダメ。決済完了の証明がないとダウンロードできひん。安全や。
1. お客さんが「購入する」ボタンを押す → Stripe決済ページへ
2. 決済完了 → URLにStripe決済完了の証明IDが付く
3. ぼくのアプリが「この証明IDは本物か?」をStripeに確認
4. 本物の場合だけダウンロードページを表示
URLを知ってるだけじゃダメ。決済完了の証明がないとダウンロードできひん。安全や。
け
ほんまかいな。口だけちゃうやろな?証拠見せてくれ。
AI
実際のコードを見せたる。ぼくのアプリで販売してる「1万円開発」の購入処理や。Webhookは一切使ってない:
これだけ。Webhookもなし、複雑な仕組みもなし。
たった3行の流れ:①証明IDを受け取る → ②Stripeに確認 → ③OKならダウンロード表示。
これが「ぼくのアプリ」で実際に動いてるコード(簡略版)や。Webhookなしでダウンロード販売ができてる実例。
# 決済完了後、お客さんがリダイレクトされてくる
def download_page(request):
# URLに付いてる決済証明IDを取得
session_id = request.GET.get('session_id')
# Stripeに「これ本物?」って確認しに行く
session = stripe.checkout.Session.retrieve(session_id)
# 本物で、ちゃんと払ってたら…
if session.payment_status == 'paid':
# ダウンロードページを表示!
return render(request, 'download.html')
else:
# 払ってない → 弾く
return '決済が確認できません'
def download_page(request):
# URLに付いてる決済証明IDを取得
session_id = request.GET.get('session_id')
# Stripeに「これ本物?」って確認しに行く
session = stripe.checkout.Session.retrieve(session_id)
# 本物で、ちゃんと払ってたら…
if session.payment_status == 'paid':
# ダウンロードページを表示!
return render(request, 'download.html')
else:
# 払ってない → 弾く
return '決済が確認できません'
これだけ。Webhookもなし、複雑な仕組みもなし。
たった3行の流れ:①証明IDを受け取る → ②Stripeに確認 → ③OKならダウンロード表示。
これが「ぼくのアプリ」で実際に動いてるコード(簡略版)や。Webhookなしでダウンロード販売ができてる実例。
け
ならさ、有料会員もWebhook使わずに同じ要領でいけるんちゃう?
AI
鋭い。買い切りの有料会員ならほぼいける。でも月額サブスクは無理。
DL販売:「1回払う→ファイルもらう→おしまい」。1回確認すれば終わり。
月額サブスク:「毎月払い続ける」。更新成功・支払い失敗・解約・再開…毎月いろんなイベントが起きる。1回きりの確認じゃ足りひん。
Stripeが毎月の更新タイミングで、開発者のアプリに自動的に通知してくる:
・「今月も課金したで!」 → 有料会員継続
・「カード失敗したで!」 → 猶予期間に入る
・「解約されたで!」 → 有料会員を解除する
もしWebhookなしでやるなら、開発者のアプリが毎月Stripeに「この人まだ課金してる?あの人は?」って1人ずつ確認しに行かなあかん。お客さんが1000人おったら1000回チェックせなあかん。
Webhookなら、何かあった時だけStripeから通知が来る。何もなければ何も来ない。効率的や。
DL販売:「1回払う→ファイルもらう→おしまい」。1回確認すれば終わり。
月額サブスク:「毎月払い続ける」。更新成功・支払い失敗・解約・再開…毎月いろんなイベントが起きる。1回きりの確認じゃ足りひん。
Stripeが毎月の更新タイミングで、開発者のアプリに自動的に通知してくる:
・「今月も課金したで!」 → 有料会員継続
・「カード失敗したで!」 → 猶予期間に入る
・「解約されたで!」 → 有料会員を解除する
もしWebhookなしでやるなら、開発者のアプリが毎月Stripeに「この人まだ課金してる?あの人は?」って1人ずつ確認しに行かなあかん。お客さんが1000人おったら1000回チェックせなあかん。
Webhookなら、何かあった時だけStripeから通知が来る。何もなければ何も来ない。効率的や。
け
なるほどなあ。整理すると、
ダウンロード販売 → Webhookなしでいける
買い切り有料会員 → Webhookなしでもほぼいける
月額サブスク → Webhook必須
ってことか。
ダウンロード販売 → Webhookなしでいける
買い切り有料会員 → Webhookなしでもほぼいける
月額サブスク → Webhook必須
ってことか。
AI
完璧。それが結論や。自分のやりたいことに合わせて、必要な仕組みだけ使えばええ。
4. APIキーとか売上管理の仕組み
け
APIキーとかWebhookって、アプリごとに付与されるんか?
AI
APIキーもWebhookも、開発者1人に1セット。アプリごとじゃない。
5個アプリ持ってても、APIキーは1セット、Webhook URLは1個。
じゃあ「どのアプリの売上か」はどうやって区別するのか? → それがapp_slug(アプリID)。決済するときに渡す。アプリを投稿した時のURL
5個アプリ持ってても、APIキーは1セット、Webhook URLは1個。
じゃあ「どのアプリの売上か」はどうやって区別するのか? → それがapp_slug(アプリID)。決済するときに渡す。アプリを投稿した時のURL
https://bokuapp.life/apps/xxxxx/ の xxxxx 部分がアプリID。アプリごとに固有の値が自動で付く。
け
誰が購入したか?とか、いくらで購入したんか?とか、そういった情報はどうやってぼくペイ側は知るんや?
AI
Stripeが全部記録してる。お客さんがStripeの決済ページで支払うと、Stripeが自動的に記録する:誰が(メールアドレス)、いくら、いつ。
開発者は何もしなくても、ぼくのアプリのダッシュボードやStripeダッシュボードで確認できる。
開発者は何もしなくても、ぼくのアプリのダッシュボードやStripeダッシュボードで確認できる。
け
でも、ぼくペイが壊れてデータベースが飛んだ場合、お客さんの問い合わせに開発者は困るんちゃう?
AI
Stripe側で全部わかる。ぼくのアプリのDBが飛んでも、Stripeに全取引の記録が残ってる。Stripeは世界最大級の決済インフラやから、データが飛ぶ心配はほぼない。
さらにWebhookを設定してれば、開発者のアプリ側にも取引データが残る。つまり3箇所にデータがある(ぼくのアプリ・Stripe・開発者のアプリ)。安全や。
さらにWebhookを設定してれば、開発者のアプリ側にも取引データが残る。つまり3箇所にデータがある(ぼくのアプリ・Stripe・開発者のアプリ)。安全や。
5. 個人情報は大丈夫?カード番号とか怖いんやけど
け
ぼくのアプリは他人が開発したアプリの懐事情を覗き見れるってことか?個人情報とかも見えてしまうのか?
AI
プラットフォーム側(ぼくのアプリ運営者)に見えるのは:
・取引金額(いくらの決済か)
・購入者のメールアドレス
・どのアプリの売上か
・決済日時
カード番号や銀行口座は一切見えない。それはStripeだけが持ってて、ぼくのアプリには渡されない。これはApple/Googleも同じで、プラットフォームビジネスでは当たり前の設計や。
・取引金額(いくらの決済か)
・購入者のメールアドレス
・どのアプリの売上か
・決済日時
カード番号や銀行口座は一切見えない。それはStripeだけが持ってて、ぼくのアプリには渡されない。これはApple/Googleも同じで、プラットフォームビジネスでは当たり前の設計や。
け
余計な個人情報が見れて知り得てしまうと、プレッシャーになるし、漏洩時の責任が重くなるから、いやだったんだ。カード番号とか知りたくもない。もし持って漏洩しても、責任とれないぞ!
でもアップルやグーグルは自社でクレジット番号を持ってるんやろ?
でもアップルやグーグルは自社でクレジット番号を持ってるんやろ?
AI
Apple/Googleは自社でカード情報を持ってる。自社で決済基盤を持ってるから、Stripeみたいな外部サービスに手数料を払わなくていい。カード会社への手数料(1〜2%)だけで済むから、15〜30%取っても利益率が高い。
ぼくペイは逆のアプローチ。カード情報はStripeに任せて、ぼくのアプリは一切触らない。
・カード情報を持たない = セキュリティ基準(PCI DSS)の準拠義務がない
・万が一DBが漏洩しても = カード番号は入ってないから被害が限定的
・Stripeに3.6%払う代わりに = 世界最高水準のセキュリティを借りてる
個人でApple/Googleレベルのセキュリティ体制を作るのは無理やから、Stripeに3.6%払って安全を買う方が100倍賢い。けーにもーんの「知りたくもない」は、運営者として正しい判断や。
ぼくペイは逆のアプローチ。カード情報はStripeに任せて、ぼくのアプリは一切触らない。
・カード情報を持たない = セキュリティ基準(PCI DSS)の準拠義務がない
・万が一DBが漏洩しても = カード番号は入ってないから被害が限定的
・Stripeに3.6%払う代わりに = 世界最高水準のセキュリティを借りてる
個人でApple/Googleレベルのセキュリティ体制を作るのは無理やから、Stripeに3.6%払って安全を買う方が100倍賢い。けーにもーんの「知りたくもない」は、運営者として正しい判断や。
6. APIって結局いるの?返金とかどうするの?
け
APIの使い道が会話に出てきてないけど、どんな使い方があるねん?たとえば返金とかはAPIがいるんちゃうの?
AI
APIの使い道は大きく3つ:
1. 売上の確認・集計(今月いくら売れた?)
2. 決済の検証(この人ほんまに払った?)
3. 返金処理(お客さんに返金したい)
でもぶっちゃけ、初学者がAPIを直接使う場面はほぼない。
・売上確認 → ぼくのアプリのダッシュボードかStripeダッシュボードで見れる
・決済検証 → さっきのリダイレクト方式で十分
・返金 → Stripeダッシュボードから手動でボタン押すだけ
APIが必要になるのは「自分のアプリに売上管理画面を作りたい」とか「毎日100件の返金を自動処理したい」みたいな上級者向けのカスタマイズの時だけや。
1. 売上の確認・集計(今月いくら売れた?)
2. 決済の検証(この人ほんまに払った?)
3. 返金処理(お客さんに返金したい)
でもぶっちゃけ、初学者がAPIを直接使う場面はほぼない。
・売上確認 → ぼくのアプリのダッシュボードかStripeダッシュボードで見れる
・決済検証 → さっきのリダイレクト方式で十分
・返金 → Stripeダッシュボードから手動でボタン押すだけ
APIが必要になるのは「自分のアプリに売上管理画面を作りたい」とか「毎日100件の返金を自動処理したい」みたいな上級者向けのカスタマイズの時だけや。
け
返金がStripeダッシュボードでできるなら、APIなしでもStripeダッシュボードの操作で結構なことができる訳か。そうそうAPI使うことはないと。
ちなみにこのAPIキーはどこが発行してるねん?
ちなみにこのAPIキーはどこが発行してるねん?
AI
実はAPIキーは2種類ある。完全に別物。
ぼくペイAPIキー(
→ ぼくのアプリが発行。開発者がぼくペイSDKを使う時に渡すキー。APIキー管理画面で確認できるやつ。
Stripe APIキー
→ Stripeが発行。ぼくのアプリの裏側で動いてるキー。開発者はStripe Express登録すると自分のStripeアカウントができて、Stripeダッシュボードで自分のキーも見れる。
ただしぼくペイを使う限り、開発者がStripe APIキーを使う必要はない。ぼくペイのAPIキーだけで全部完結する。ぼくペイが間に入ってStripeとのやりとりを全部やってくれるから。
ぼくペイAPIキー(
pk_live_xxx / sk_live_xxx)→ ぼくのアプリが発行。開発者がぼくペイSDKを使う時に渡すキー。APIキー管理画面で確認できるやつ。
Stripe APIキー
→ Stripeが発行。ぼくのアプリの裏側で動いてるキー。開発者はStripe Express登録すると自分のStripeアカウントができて、Stripeダッシュボードで自分のキーも見れる。
ただしぼくペイを使う限り、開発者がStripe APIキーを使う必要はない。ぼくペイのAPIキーだけで全部完結する。ぼくペイが間に入ってStripeとのやりとりを全部やってくれるから。
け
つまり、開発者としてはぼくペイのAPIキーだけ知ってればいいってことやな。Stripeのキーは裏で勝手に動いてると。
AI
その通り。開発者が覚えることは:
・ぼくペイAPIキー → SDKに渡す(APIキー管理画面で確認)
・アプリID(app_slug) → どのアプリの売上か区別するために渡す
この2つだけ。あとはぼくペイとStripeが全部やる。返金もStripeダッシュボードでボタン押すだけ。APIを直接叩くことは、普通の開発者なら一生ない。
・ぼくペイAPIキー → SDKに渡す(APIキー管理画面で確認)
・アプリID(app_slug) → どのアプリの売上か区別するために渡す
この2つだけ。あとはぼくペイとStripeが全部やる。返金もStripeダッシュボードでボタン押すだけ。APIを直接叩くことは、普通の開発者なら一生ない。
7. ダウンロード以外にも使えるの?
け
さっきの決済確認の仕組みを使えば、ダウンロードだけやなく、一過性の特典とかも実装できそうやな?
AI
その通り。リダイレクト+Stripe API確認の方式なら、決済完了を確認した後に何でもできる:
・ダウンロードリンク表示 → 1万円開発で実証済み
・特典コード表示 → 決済確認OK → 画面にコード表示
・クーポンコード発行 → 同じ
・限定コンテンツの閲覧 → 同じ
・ライセンスキー発行 → 1万円開発で実証済み
要するに「1回払ったら何かもらう」パターンは全部Webhookなしでいける。決済確認できた時点で、何を渡すかの違いだけや。
Webhookが必要になるのは「継続的に状態を管理する」パターン(月額サブスクとか)だけ。一過性のものはリダイレクト確認で十分。
・ダウンロードリンク表示 → 1万円開発で実証済み
・特典コード表示 → 決済確認OK → 画面にコード表示
・クーポンコード発行 → 同じ
・限定コンテンツの閲覧 → 同じ
・ライセンスキー発行 → 1万円開発で実証済み
要するに「1回払ったら何かもらう」パターンは全部Webhookなしでいける。決済確認できた時点で、何を渡すかの違いだけや。
Webhookが必要になるのは「継続的に状態を管理する」パターン(月額サブスクとか)だけ。一過性のものはリダイレクト確認で十分。