WebPay利用ガイドライン

WebPayではユーザが安全な決済機能を簡単に実装できるように様々な工夫をこらしていますが、正しく利用しなければ安全性は担保できません。

実装が不完全な場合、サイト運営者のみならずクレジットカード利用者に悪影響が及ぶことがあるため、WebPayの利用をお断りすることもあります。 WebPayによる以下のガイドラインを参考に適切にサービスの運営を行うようにしてください。

実装時に推奨する事項

WebPayを導入する実装を行うにあたって以下のような項目を推奨しています。

カード情報を自前のサービス、サイトのサーバに送信しない

カード情報(カード番号、有効期限、カード名義、セキュリティコード等)はトークン決済の機能を利用してWebPayのサーバに直接送信してください。 カード情報をサービスを運営しているサーバに送信し、そこから課金や顧客の作成を行うこともできますが、カード情報をサーバで扱うとプログラムのバグや悪意のある第三者、あるいは内部者よりカード情報が漏洩し、不正利用に用いられる危険性が高まります。 代わりにユーザのデバイス(ブラウザやスマートフォンアプリケーション)から直接WebPayのサーバにカード情報を送信し、カード情報をトークンオブジェクトに変換するように実装してください。

今後、課金や顧客を作成時にトークン化されていない情報を指定する機能は段階的に削除を予定しています。カード情報をダッシュボードから人手で入力するような運用は最も危険ですので、絶対に行わないでください。

通信をすべて暗号化する

カード番号をそのまま送信しない場合でも、決済に関連した部分はすべて暗号化された通信路を利用してください。 ウェブサイトの場合は適切に署名された証明書を用いたHTTPS接続を利用することを推奨します。

エラーハンドリングを適切に行う

WebPayのAPIはさまざまな場合にエラーレスポンスを返します。 エラーにはカード情報が間違っていたり、限度額に到達してしまって購入者の入力したカードが利用できない場合に発生するもの、サービスからのリクエストが不適切な場合に発生するもの、WebPayやWebPayの利用する決済システムが一時的に利用できないことで発生するものなどがあります。 エラーの原因に応じて再入力を求める、失敗したことを記録して後で再試行する、プログラムを修正するなどの対応が必要です。 エラー処理が不適切な場合、利用者はサービスが使えないものと思って購入をあきらめてしまったり、意図せず無料でサービスを利用できてしまう可能性があります。

APIドキュメントのエラーに関する記載を参考にすべてのエラーケースをカバーしていることを確認してください。 WebPay製のライブラリの場合、これらはエラーとして通知されるので、WebPayのAPI呼出を行う箇所ではすべての発生しうるエラーを適切にハンドリングしてください。 テスト用カードをつかって実際にテスト環境でエラーを起こしてみることや、WebPayへのリクエストをモックした自動テストを行いエラーレスポンスを得たときに想定どおりの動作をすることを確認することでエラーハンドリングを検証できます。

メンテナンスされていないバージョンやライブラリを使用しない

プログラミング言語やオペレーティングシステムを含め、ほとんどのソフトウェアにはメンテナンス期間が設定されています。 WebPayを利用するサービスでは、メンテナンスされていないソフトウェアを利用してはいけません。 例えばOracle Java SE 6、Ruby 1.8、PHP 5.2および5.3、Windows XP等は公式でのサポートやアップデートが終了しているため、利用しないでください。

オープンソースソフトウェアとして開発されているものは、開発が継続できず、新たな問題に対応していない状態であることもあります。 ライブラリを利用する際はソースコードを読み、安全に実装されていること、定期的に更新が行われていることを必ず確認してください。

WebPayが配布しているライブラリやツールは古い環境では動作しません。 WebPayはアップデートが終了した環境から利用できなくなるような変更を予告なく行うことがあります。

必要なデータはローカルで保持する

WebPayは決済を円滑に執り行うための機能のみを提供します。 WebPayが保持する情報だけではあなたのサービスを円滑に運用できないでしょう。 WebPay上の課金や顧客オブジェクトはローカルのデータベース上に対応する情報を保存し、Webhook等を利用してWebPay上のデータと同期をとることを推奨します。 変更されないデータはキャッシュし、WebPayに過剰なリクエストを送信しないよう注意してプログラミングしてください。

WebPayが公開しているいくつかのサンプルアプリケーションはこの原則に則っています。 実装の際に参考にしてください。

WebPayのサーバに高頻度のリクエストをしない

前項とも関係しますが、開発中も含め、高頻度のリクエストを行わないよう細心の注意を払ってください。

具体的には、バッチ処理などでリクエストが連続する場合、sleep関数などで1秒以上の間隔を空けるようにしてください。 WebPayのテスト環境を含む一部のAPIでは、不正利用を未然に防ぐため一定時間内のリクエスト回数に制限を設けており、 この制限の対象となると、一定時間APIが利用できなくなります。 1秒以上間隔を空けることで、確実にこの制限を回避できますが、制限される明確な閾値については公開しておりません。

WebPayのテスト環境と結合した状態で、開発中のアプリケーションの自動テストを行うことを一定範囲内で許容しています。 しかし、ライブラリやHTTPリクエストをモックしてテストすることで、エラーレスポンスを含む任意のレスポンスを容易に再現できる、実行時間を短縮できるなど、 大きなメリットが得られますので結合的なテストは最小限に限定し、モックやダブルを効率的に活用するようにしてください。

WebPayが公開しているアプリケーションはほとんどのテストでモックされたレスポンスか、ダブルサーバを用いて、結合した自動テストを回避しているほか、 Ruby向けにはwebpay-mockというWebPayへのリクエストをモックするためのライブラリも公開していますので参考にしてください。

WebPayへのリクエストのログを取るなどして意図しないリクエスト、余計なリクエストを行っていないことを確認してください。 原因によらず、数分以上にわたってリクエストを大量に送信した場合、他のユーザへの影響を防ぐため、アカウント停止等の措置を行うことがございますのでご注意ください。

運用体制として推奨する事項

WebPayの導入にあたる実装の後、運用する体制に入った後も以下の項目に注意をしてください。

WebPayからの情報を定期的にチェックする

WebPayは重要な通知はメールで、開発者にとって重要であると判断される情報はWebPay Engineering Blogで必ず発信しています。 WebPayに登録してあるメールアドレスに送信されるメールは必ず受信し、開発者・運用者で内容を確認してください。

より便利で安全な機能の提供を開始した際にはWebPay Engineering Blogで情報を公開します。定期的にご覧になることをお勧めします。 本ガイドラインを含む、WebPay公式サイト上の開発者向け情報も定期的に更新を確認してください。

不要になった顧客・カード情報を破棄する

サービスから利用者が退会した場合や、一定期間(例えば1年)利用がなかった場合はWebPayに登録されている顧客・カード情報を削除してください。 方法はAPIドキュメントを参照してください。 ダッシュボードからでも同等の操作を実行できますが、確実に運用するためにAPIを利用してプログラムに組込むことをお勧めします。