Stripeをご利用の開発者の皆様、こんな経験はございませんか?
- Dev環境とStage環境で同じテストアカウント使っているからどっちの決済情報か分からなくなる
- StripeデータとサービスのDBデータを紐付けて不整合が起こらない様チェックしたい
あるあるーと思った方はこのまま読み進めてください。
ないないーと思った方はどうぞスキップしてください。
あ、結論を言いますと、StripeのCustomerやCharge等の各種データにメタデータを付与することで上記を解決出来ます。
メタデータを付与してみよう
Stripeの公式ドキュメントにある通り、各種データにはメタデータつまり紐付けたい独自の属性を付与することが出来ます。
例えばDBにStripeのCustomerを格納しているテーブルがあったとして、そのテーブルのプライマリキーや決済を行ったユーザーのIDをメタデータとしても良いです。
また一つのテストアカウントでDev、Stage等複数の環境で使用しているとしたら環境の情報も紐付けることが出来ます。
実際にPHPのサンプルコードでStripe決済時(Charge作成)にメタデータを付与してみましょう。
// メタデータ
$metaData = [
'env' => 'stg',
'user_id' => 1,
];
$charge = [
'customer' => $customer,
'amount' => 1000,
'currency' => 'JPY',
'description' => 'テスト',
'metadata' => $metaData
];
// Charge作成
$response = \Stripe\Charge::create($charge);
お分かりでしょうか?
Chargeとして登録する配列にmetadata
キーの値として更に連想配列を設定しています。
この連想配列に任意のキーバリューを設定出来るのでサンプルコードでは決済したユーザーIDと環境情報を付与しています。
メタデータを基に検索してみる
Stripeのダッシュボードの検索ボックスでの検索は任意の文字列でのキーワード検索の他に{Filterキー}:{値}
での検索が可能です。
https://stripe.com/docs/dashboard/search
例えばVISAカードでの決済情報を検索したい場合、brand:visa
と入力します。
実はこれと同様にメタデータによる検索も{メタデータに設定したキー}:{値}
で可能となります。
例えば先程のサンプルコードで登録したChargeを環境別で検索する場合、env:stg
と入力して検索すれば一覧に表示されます。
簡単なことではありますが、このメタデータを使うと使わないでは、Stripeデータと自身のサービスのDBデータの整合性検証やダッシュボードの検索のし易さに大きな違いが出ますので、必ず使うようにしましょう。
ちなみに私はStripeを利用した決済機能のリリース直前にこのことに気づいて速攻で実装しました(汗)
これだけでダッシュボードからとっても検索しやすくなりましたとさ。
(何をメタデータとして登録するかはサービスによりますのでPLと相談の上、用法・容量を守り正しくお使い下さい)