聞いたことはあるけれど、機会がないとあまり馴染みのないクレジットカードのオーソリ。使ってみると非常に便利なしくみです。今回はStripeでのオーソリ決済の導入について、弊社キッチハイクの事例とともにご紹介いたします。エンジニアの小川です。キッチハイクでは今年、一部の決済にオーソリを導入しました。クレジットカードのオーソリは、端的にいえば、カードの使用者(ユーザー)の与信枠の中から、決済額を一定期間確保しておく仕組みのことを指します。このオーソリ、導入することで、カードが有効かどうかを事前チェックできたり、キャンセルで発生する手間を減らせたりと非常にメリットの大きい仕組みでもあります。名前は聞いたことはあっても、あまり馴染みがなく、どう使えばいいのかイメージが湧かない方も多いのではないでしょうか。今回の記事では、そんなオーソリの導入のしかたを、キッチハイクでStripeのオーソリ決済を導入したお話しをまじえながらご紹介いたします。略称から来ており、仮売上と呼ばれることもあります。「仮売上」の呼び方が示すとおり、オーソリがつくられた時点では使用者側への請求は確定していません。オーソリをキャプチャ(確定)することで、はじめて使用者側に支払いが請求されることになります。オーソリは在庫が確保できるかどうか不確定な商品の決済などによく用いられます。通常の決済の場合、仮に決済をしても在庫が確保できずキャンセルになると返金などの手続きが発生してしまいます。そんなとき、オーソリであれば、キャンセルをすればいいだけで、返金作業は不要です。一定の率以上でのキャンセルが見込まれるのであれば、オーソリのほうが作業コストをへらすことができます。与信枠をあらかじめ確保するので、サービス側としては事前チェックの意味合いもあります。在庫確保時点で本決済をする場合でも、オーソリ作成時にその分の額は確保されているので、限度額超過でエラーになることはありません。オーソリには期限があります。一定期間オーソリが確定されなかった場合、そのオーソリは自動的にキャンセルとなります。オーソリの期間は決済サービスやカード会社ごとに異なりますが、平均して数日〜1ヶ月ほどといったところです。弊社キッチハイクでは2018年から決済サービスにStripeを導入しています。(そのときの記事が以下となります)tech.kitchhike.comキッチハイクではサービスのなかでイベントの予約機能を提供しており、その決済でStripeを使用しています。オーソリを導入したのは、この予約の際に予約タイミング(クレジットカード決済)と課金タイミング(チャージ・キャプチャ)をずらすケースに対応するためでした。具体的には「どのようなごはんが食べたいか」や日付をユーザーが選択して申し込む予約方式なのですが、予約時点でお店や日付は確定しておらず、後日キッチハイク側でお店と日付を確定させると同時に予約が確定するフローとなっています。(なお、現在ではこの予約方式は終了しています)リリース当初はこの予約方式でもオーソリを使用していませんでした。運用を経る中で以下の課題が発生することがわかってきました。ユーザーが申し込んだ日付と、実際の決済日(予約の確定日付)にラグがあり、カード使用の履歴に身に覚えのない日付が出てしまうユーザーの予約申し込み〜実際の予約確定日にラグがあるため、その間にカードの利用限度額を超えてしまった場合、予約の確定時に決済エラーが発生するこの課題を解決するために導入したのがオーソリでした。下図のように、予約申し込みの時点でオーソリを作成し、予約確定時点でオーソリをキャプチャするようにします。このオーソリの導入によって上述の1、2の課題を解決することができました。与信枠の確保時にカードのチェックをするので、予約確定前に有効性チェックができるようになった。以上、キッチハイクでのオーソリの導入例を紹介してきましたが、次は実際にどのようなコードを書くのかみていきましょう。stripe-rubyが前提になっていますが、他の言語のSDKでもあまり変わらないかと思います。github.comオーソリの作成はいたって簡単です。これだけでオーソリを作成することができます。オーソリであることを示しています。メソッドを呼ぶだけです。変わっていることが分かるかと思います。これだけでキャプチャは終了です。...}こちらに至っては、オーソリであることを指定する必要もなくキャンセルをすることができます。コード例を見ていただければ分かる通り、拍子抜けするほど簡単ではないでしょうか?もし既に通常の決済のコードが実装されていれば、ほぼ数行の変更でオーソリに対応することができるでしょう。以上のようにStripeでのオーソリの開発は非常に簡単です。いっても、考慮が必要な点がないわけではありません。そのひとつがオーソリの期限です。以下ではこの点について説明したいと思います。カード会社ごとの有効期限Stripeに限らずですが、オーソリの有効期限はカードブランドによってばらつきがあることが多いです。support.stripe.com上記のFAQにあるように、Stripeでは日本円決済であれば、オーソリ期限はAMEXが7日、それ以外のカードブランドは30日となっています。30日したがって、Stripeを使っていてオーソリ期限をロジックに組み込む場合、カードブランドごとの期限の違いを考慮する必要があります。自体がオーソリの期限を持ってはいないのでしょうか。オーソリの期限がいつになるかを知ることはできません。オーソリが期限切れであるかどうかを判定することはできます。以下にコード例を示します。オブジェクト)は期限切れになっています。期限切れの判定にはWebhookを使う方法もあります。期限切れになったタイミングで正確に処理をすることができます。厳密にオーソリが期限切れになったタイミングで処理をしたい場合は、これが一番正確な方法ではないかと思います。まとめ以上、Stripeでのオーソリのはじめかたについて、キッチハイクの事例をあげつつ説明してきました。Stripeでのオーソリの導入は非常に簡単キッチハイクではこのオーソリを導入することで、予約から予約の確定までにラグがある方式の課題を、非常に低コストで解決することができたオーソリの期限切れについては多少考慮の必要がある本記事がオーソリ導入に迷われている方にとっての一助になれば幸いです。オーソリの細かな仕様の把握についてはStripeサポートのみなさまにたいへんお世話になりました。今回ご紹介した内容も、問い合わせのなかで教えていただいた内容が元になっています。この場を借りてお礼を述べさせていただきます。ネイティブアプリへ方針転換するこ...2018-11-30Stripeに決済を移行した話と、そこで学んだ導入のポイント今年5月にJCB対応が発表されたStripe。