Stripeベースの自作サービスでカードの不正利用があった場合の対処法

Stripeベースの自作サービスでカードの不正利用があった場合の対処法

Stripeベースの自作サービスでカードの不正利用があった場合の対処法

English version is available.

どうもTAKUYAです。

30日間のお休みから戻ってきて、自分のSaaSプロジェクト「Inkdrop」の作業を再開しました。これは現在約1,400人の課金ユーザがいるノートアプリです。他のアプリと比べてその規模がとても小さいにも関わらず、今回初めて自サービスにてカードの不正利用が起きてしまいました。 (お休み中にその報告を受けて、休み気分が吹き飛んだのはここだけの秘密です😇)

本稿ではカードの不正利用について調査して学んだこと、そして実際にどのように対処したかシェアしたいと思います。

疑惑のある支払いは全てすぐに返金する

自分たちのサービスの信用を保つためにも、カード支払いに関する紛争(Dispute / 異議申し立て)は可能な限り避けなくてはなりません。StripeはおそらくDisputeの数を監視していて、万が一サービスが有害と判断された場合はStripeアカウントをクローズする権限を持っています。心当たりのない支払いの連絡を受けた時は、速やかかつ丁寧に応答して出来ることを行いましょう。Stripeは不正利用と紛争についてのドキュメントを用意しています。重要な点を引用します:

Refund suspicious payments immediately
Refund any payments you suspect are fraudulent as soon as possible. In the Dashboard, select the payment and click Refund as fraud. This refunds the payment and reports it to us so that we can further improve our fraud detection.
 — Best Practices | Stripe Payments

疑惑のある支払いは速やかに返金してください
あなたが不正ではないかと疑いをかけている支払いは可能な限り早く返金しましょう。ダッシュボードからペイメントを選んで Refund as fraud をクリックします。これでペイメントが返金されて、Stripeでの不正利用検知システムの動作改善に役立てられます。

各紛争には15 USDの手数料がかかります:

EFWs do not officially require any action or response from you as a merchant. However, they are good indicators of impending disputes — 82% of payments that receive EFWs eventually get disputed. Since there’s a fee for disputes (15 USD) and disputes can count for certain chargeback monitoring programs you may want to proactively prevent disputes by immediately refunding payments that receive an EFW.
 — Measuring Disputes | Stripe Payments

こちらが不正な支払い報告への対処手順です。

1. まずは落ち着こう

この問題はカード所持者とあなたにとって悲しい出来事です。しかしそれは起きました。深く息を吸って。

2. 支払いに関する情報を聞き出す

嫌疑のかけられた支払いを特定するために、カード所持者から以下の情報を聞き出します:

  • カード番号の下4桁
  • 請求日
  • 金額

3. Stripeダッシュボードで支払いを特定する

Stripeでは、聞き出したカード番号の下4桁を使って支払履歴を絞り込めます。上記画面のサーチバーに4桁を入力します。

もし見つかったものが明らかな不正利用だとしても、プライバシーの観点から「誰が使ったか」という情報は開示しないようにしましょう。

4. ‘Refund as fraud’を実行する

支払情報画面の右上にRefund (返金)ボタンがあります。それをクリックします。

返金理由として Fraudulent(不正) を選択します。この操作によって、カード番号とemailの組み合わせはブロックリストに追加され、将来の請求は全てブロックされるようになります。また、この情報はStripeの他のアカウントにもfingerprintとして共有されて役立てられます。 ‘Refund and block’ をクリックしましょう。

紛争と不正を防止するには

Stripeは不正利用をできるだけ未然に防ぐためのガイドを提供していて、とても参考になります:

Preventing Disputes and Fraud | Stripe Payments
Learn how to best protect against disputes and fraudulent payments. Fraud is the most common cause of disputes, though…

支払情報をできるだけ多く集める

僕はInkdropのカードフォームにはStripe.js と Elementsを使用しています。しかしこれはカード番号、CVC(セキュリティコード)、ZIPコードなど必要最低限の情報しか収集しません。付属的な情報を更に集めることで、顧客の合法性をカード会社が確認する手助けになります。例えば:

  • カード所持者名
  • 現住所
  • 送り先住所 (現住所と異なる場合)

詳しくは上記のドキュメントを参照してください。また、3Dセキュアに対応するのも更なる防止策として有効でしょう。

Read more

Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

💡本記事は英語ブログの日本語訳です。 どうも、TAKUYAです。 AIコーディングでは専らClaude Codeを使っています。最初はtmuxでターミナルの右側にペインを分割して使っていたのですが、幅が狭すぎてメッセージやdiffがまともに表示できず、使いづらかったです。 <Prefix>+zでペインを最大化すればいいのですが、毎回やるのは面倒でした。 そこで、ポップアップウィンドウでClaude Codeを起動するようにしました。キーバインドを押せばセッションが開き、閉じてもバックグラウンドで動き続けるので、すぐに再開できます。 この記事では、それを実現するためのtmuxの設定方法を紹介します。 動画で見る(英語): ポップアップウィンドウはサブプロセスを維持できない tmuxのdisplay-popupコマンドを使うとポップアップウィンドウを表示でき、ちょっとしたツールにすぐアクセスするのに便利です。 僕はlazygitでgitの状態をサッと確認するのに使っています: bind -r g display-popup -d '#{pane_current_path}'

By Takuya Matsuyama
Keychron K2 HEを無刻印化する手順

Keychron K2 HEを無刻印化する手順

どうもTAKUYAです。KeychronさんにK2 HEをお願いしたら音速で送ってくれたので、無刻印化してみました。どうやったのか過程をシェアします。 Unboxing 上はKeychron Q1です。これは3年間ぐらい使ってきました。キーキャップが若干くたびれていますね。でも問題なく今まで使えていました。そろそろ飽きてきたので新しいキーボードを試したいと思い、前から気になっていたK2 HEを試すことにしました(写真下)。 Amazon | 【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、2.4GHz・Bluetooth無線対応、QMKプログラム可能、アルミ+ウッドフレーム、USレイアウト、RGBライト、Mac Windows Linux対応 (ブラック) | Keychron | パソコン用キーボード 通販【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、

By Takuya Matsuyama
ノート駆動AIコーディング術の提案

ノート駆動AIコーディング術の提案

どうもTAKUYAです。みなさんはAIエージェントを普段のコーディングで活用されていますか。ちょっと面白いワークフローを思いついたのでシェアします。それは、ノート駆動のエージェンティック・コーディング・ワークフローです。最近Claude Codeのプランモードを使っていたら、ターミナル内で生成されたプランを読むのが辛かったんです。それで、じゃあMarkdownノートアプリであるInkdropをプランの保存先バックエンドとして使えば解決するんじゃないかと思って、 試してみました。こちらがそのデモです(英語): こちらがClaude Codeの設定ファイル群です: GitHub - inkdropapp/note-driven-agentic-coding-workflow at devas.lifeComplete Claude Code configuration collection - agents, skills, hooks, commands, rules, MCPs. Battle-tested configs from an Anthropic hackathon w

By Takuya Matsuyama
2025年個人開発活動の振り返り

2025年個人開発活動の振り返り

どうもTAKUYAです。もう1月も半ばに差し掛かっているけど、2025年の自分の活動の振り返りをしたい。去年を一言で言うなら、本厄を満喫した年だった。 厄年とは、人生の節目にあたって、体調不良や災難が起こりやすいと経験的に言われる年齢のこと。数え年で42歳、確かにもう若さに任せた事は出来ないなと痛感した年だった。(ところであなたの国ではこのような年はありますか?) 夏に体調を崩して2~3ヶ月動けなくなった 暖かくなり花粉が飛び出した頃に、持病のアトピーが悪化しだして、まともに生活出来なくなってしまった。酷さで言うと、2019年に脱ステした時と同じぐらい。 脱ステに無事成功したから、この地獄は二度と味わうことはないだろうと高を括っていたが、まさか7年後にまた味わうとは思わなかった。当時の独身時代と違い、妻も子供もいる中で、周りに多大な迷惑をかける事となった。夏の子供との思い出が全く無い。悲しい。 現在はQoLもほとんど元の状態まで復活できた。写真を撮って症状の変化を記録したので、機会があればシェアしたい。食事療法など色々試したが、結局歩くのが一番自分に効いた。それ以来、一日一万歩

By Takuya Matsuyama