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

Inkdrop v6 Canary版リリースしました — 新Markdownエディタやその他新機能盛り沢山

Inkdrop v6 Canary版リリースしました — 新Markdownエディタやその他新機能盛り沢山

Inkdrop v6.0.0 Canary版リリースしました — 新Markdownエディタやその他新機能盛り沢山 こんにちはTAKUYAです。 v6.0.0 の最初の Canary バージョンをリリースしました 😆✨ v6では、アプリのコア機能の改善がたくさん盛り込まれています! * リリースノート(英語): https://forum.inkdrop.app/t/inkdrop-desktop-v6-0-0-canary-1/5339 CodeMirror 6 ベースの新しいエディタ フローティングツールバー v5ではツールバーがエディタの上部に固定されており、使っていないときもスペースを占有していました。 v6では、テキストを選択したときだけ表示されるフローティングツールバーに変わりました。 GitHub Alerts 構文のサポート Alerts の構文が正しい色と左ボーダーでハイライトされるようになりました。 ネストされたアラートや引用にも対応しています。 また、アラートタイプの入力を支援する補完機能も追加されました。 スラッシュコマンド 空行で /

By Takuya Matsuyama
AIのお陰で最近辛かった個人開発がまた楽しくなった

AIのお陰で最近辛かった個人開発がまた楽しくなった

AIのお陰で最近辛かった個人開発がまた楽しくなった こんにちは、TAKUYAです。日本語ではお久しぶりです。僕はInkdropというプレーンテキストのMarkdownノートアプリを、デスクトップとモバイル向けにマルチプラットフォームで提供するSaaSとして、かれこれ9年にわたり開発運営しています。 最近、その開発にClaude Codeを導入しました。エージェンティックコーディングを可能にするCLIのAIツールです。 最初の試行は失敗に終わったものの、徐々に自分のワークフローに馴染ませることができました。そして先日、アプリ開発がまた「楽しい」と感じられるようになったのです。これは予想外でした。 本稿では、自分がエージェンティック・コーディングをワークフローに取り入れた方法と、それが個人開発への視点をどう変えたかを共有します。 * 翻訳元記事(英語): Agentic coding made programming fun again 自分のアプリに技術的負債が山ほどあった ご想像のとおり、9年も続くサービスをメンテするのは本当に大変です。 初期の頃は新機能の追加も簡単で

By Takuya Matsuyama
個人開発を7年以上続けて分かった技術選択のコツ

個人開発を7年以上続けて分かった技術選択のコツ

個人開発を7年以上続けて分かった技術選択のコツ InkdropというMarkdownノートアプリを作り続けて7年になる。 お陰さまでその売上でずっと生活できている。 これまで個人開発でどう継続していくかについて「ユーザの退会理由をあれこれ考えない」とか「アプリの売上目標を立てるのをやめました」とか、ビジネス面あるいはメンタル面からいろいろ書いてきた。 今回は、技術面にフォーカスして、どう継続して開発していくかについてシェアしたい。 TL;DR * 最初はとにかく最速でリリースする事を最優先する * 迷ったら「ときめく方」を選べ * 程よいところで切り上げて開発を進める * 使っているモジュールがdeprecatedされるなんてザラだと覚悟する * 古いから悪いとは限らない * シンプルにしていく * 老舗から継続の秘訣を学ぶ * 運ゲー要素は排除しきれない 最初はとにかく最速でリリースする事を目標に技術選定する 開発計画とビジネス計画は切っても切り離せない。 コーディングに傾倒するあまり完璧主義に陥って結局リリース出来ないまま頓挫してしまう個人開発者は多い

By Takuya Matsuyama
子育て中の個人開発者の一日

子育て中の個人開発者の一日

子育て中の個人開発者の一日 どうもTAKUYAです。 久しぶりに生活まわりの事を書きたい。自分はInkdropというMarkdownノートアプリを売って生きている。 子供も無事順調に成長しており、あと数ヶ月で3歳になるというところで、イヤイヤ期もやっと終わりが見えてきた。 生活パターンもなんとなく定着しつつあるので、ここで一旦どんなルーティンなのか書き出してみる。ちなみに当方今年で40歳。 平日の1日の流れ * 06:30 妻と子供起床、朝食 * 07:10–30 俺起床、朝食 * 07:40 布団を畳んで子供を着替えさせる。妻はその間に化粧や通勤の準備 * 08:00 ストレッチと軽い筋トレ(腕立て50回、スクワット100回) * 08:10 妻と子供を見送る。15分前後瞑想 * 08:30 散歩 * 09:00 作業開始(カフェまたは家) * 11:00 昼飯 * 12:00 ダラダラする * 12:30 作業再開(だいたい家)

By Takuya Matsuyama