仮売上の処理を行う

仮売上とは、クレジットカードの利用可能残高(与信枠)を確保することを言い、 実際にお金が支払われることはありません。

仮売上であるかどうかは 課金(Charge)オブジェクトcapturedプロパティ から判断することが可能です。capturedプロパティが false である場合が仮売上にあたります。 逆に true である場合には実売上となり、お金の支払いが発生することになります。

仮売上は、クレジットカードの明細には記載されないことが多いですが、カード発行元によっては未確定の決済であると記載される場合もあります。 また、カード所有者がカード発行元に問い合わせることで、仮売上が行われている事実は認識可能であることに気をつけて下さい。

また、デビットカードやプリペイドカードにおいては与信枠という概念がないために、口座や利用可能額から直接の引落しが行われることがほとんどですのでご注意下さい。

仮売上(capturedプロパティがfalseとなるCharge)を作成する

以下の操作でcapturedプロパティがfalseであるChargeオブジェクトが作成され、対象のクレジットカードの与信枠が確保されます。

capturedプロパティがfalseとなるためのリクエストパラメータはcaptureであることにご注意下さい。

$
curl "https://api.webpay.jp/v1/charges" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-d "amount=1554" \
-d "currency=jpy" \
-d "card=tok_SampleCardToken" \
-d "capture=false"
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.charge.create(
   amount: 1554,
   currency: "jpy",
   card: "tok_SampleCardToken",
   capture: false
)
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->charge->create(array(
   "amount"=>1554,
   "currency"=>"jpy",
   "card"=>"tok_SampleCardToken",
   "capture"=>false
));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.charge.createRequest()
        .amount(1554)
        .currency("jpy")
        .card("tok_SampleCardToken")
        .capture(false)
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.charge.create(
  amount=1554,
  currency="jpy",
  card="tok_SampleCardToken",
  capture=False
  )
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.charge.create({
  amount: 1554,
  currency: "jpy",
  card: "tok_SampleCardToken",
  capture: false
}, function(err, res) { ... });

この処理に成功するとcapturedプロパティがfalse、paidプロパティがtrueである仮売上の状態であるChargeオブジェクトが作成されレスポンスされます。 なお、captureパラメータを指定しない場合はtrueとして扱われ、すぐにクレジットカードからの支払いが行われます。

仮売上の実売上化を行う

仮売上のまま所定の期間が経過すると与信枠は解放(失効)されますが、 その期限までに売り上げを確定させる処理を行うことで実際の売り上げ(実売上)として支払いが行われます。 売り上げを確定させる処理は以下のように行います。

$
curl "https://api.webpay.jp/v1/charges/ch_31e2x0csD2Xnavd/capture" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-X POST -H 'Content-Length: 0'
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.charge.capture(id: "ch_31e2x0csD2Xnavd")
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->charge->capture(array("id"=>"ch_31e2x0csD2Xnavd"));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.charge.captureRequest("ch_31e2x0csD2Xnavd")
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.charge.capture(id="ch_31e2x0csD2Xnavd")
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.charge.capture({id: "ch_31e2x0csD2Xnavd"}, function(err, res) { ... });

この処理に成功すると指定されたChargeオブジェクトのcapturedプロパティがtrueに変わり、クレジットカードによる支払いが実施されます。

仮売上を失効させる

有効な仮売上が自動的に失効されるのを待たずして、意図して失効させることも可能です。 通常の課金(実売上)の払戻しと同様のリクエストを行うことで実現可能です。

$
curl "https://api.webpay.jp/v1/charges/ch_31e2x0csD2Xnavd/refund" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-X POST -H 'Content-Length: 0'
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.charge.refund(id: "ch_31e2x0csD2Xnavd")
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->charge->refund(array("id"=>"ch_31e2x0csD2Xnavd"));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.charge.refundRequest("ch_31e2x0csD2Xnavd")
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.charge.refund(id="ch_31e2x0csD2Xnavd")
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.charge.refund({id: "ch_31e2x0csD2Xnavd"}, function(err, res) { ... });

この処理に成功するとrefundedプロパティがtrueに変わり、仮売上として確保されていた与信枠が解放(失効)されます。 クレジットカードの与信枠を無為に確保してしまわないよう、必要がなくなった仮売上は逐次失効させることをご検討下さい。

仮売上の自動的な失効日を指定する

仮売上が自動的に失効されるまでの期間は、 設定画面 で最小1日から最大45日まで変更することが可能です。 課金ごとに個別に行いたい場合は、以下のようにcaptureプロパティをfalseを指定の上で、 expire_days を指定することで最小1日から最大45日まで設定可能です。

$
curl "https://api.webpay.jp/v1/charges" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": \
-d "amount=1554" \
-d "currency=jpy" \
-d "card=tok_SampleCardToken" \
-d "capture=false" \
-d "expire_days=5"
>>
require 'webpay'
webpay = WebPay.new('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
webpay.charge.create(
   amount: 1554,
   currency: "jpy",
   card: "tok_SampleCardToken",
   capture: false,
   expire_days: 5
)
php >
require "vendor/autoload.php";
use WebPay\WebPay;
$webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
$webpay->charge->create(array(
   "amount"=>1554,
   "currency"=>"jpy",
   "card"=>"tok_SampleCardToken",
   "capture"=>false,
   "expire_days"=>5
));
>
import jp.webpay.webpay.WebPay;
WebPay webpay = new WebPay("test_secret_eHn4TTgsGguBcW764a2KA8Yd");
webpay.charge.createRequest()
        .amount(1554)
        .currency("jpy")
        .card("tok_SampleCardToken")
        .capture(false)
        .expireDays(5)
        .execute();
>>>
import webpay
client = webpay.WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd')
client.charge.create(
  amount=1554,
  currency="jpy",
  card="tok_SampleCardToken",
  capture=False,
  expire_days=5
  )
>
var WebPay = require('webpay');
webpay = new WebPay('test_secret_eHn4TTgsGguBcW764a2KA8Yd');
webpay.charge.create({
  amount: 1554,
  currency: "jpy",
  card: "tok_SampleCardToken",
  capture: false,
  expire_days: 5
}, function(err, res) { ... });

expire_daysは日数での指定となっておりますが、実際に失効されるexpire_timeは、作成時刻からexpire_days日後の同時刻となります。

現在、厳密には指定時刻から最大数分程度後方に誤差がありますので、確実にそのタイミングで仮売上が失効されている必要がある場合は、Chargeオブジェクトのrefundedプロパティを十分に確認するようにしてください。