Recursionの初回課金の実行タイミングが変更されました

5月にリリースした定期課金を行うオブジェクト Recursionの仕様の改善を行いました。

リリース後、皆様にご利用頂き始める中で、 ** Recursionオブジェクトを作成した後、非同期的な実行のためにいくらかの時間を待機する必要があり、初回の課金が発生するタイミングがわかりにくい ** というご意見を多数頂戴していました。

そこで、互換性を保ちながら、課金の作成をRecursionオブジェクトの作成のリクエストと同期的に行うよう変更しました。

従来

初回の課金時刻の指定にかかわらず、すべての課金の実行が非同期的であり、初回の課金が即座に実行される条件(first_scheduledが指定されていない、もしくは過去を指している)の際に、 課金の成否をAPIのポーリングやWebhookを利用して検知する必要がありました。

例えば、first_scheduledを指定せず、Recursionオブジェクトを作成した際のレスポンスは以下のようになっていました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "id": "rec_8hla3E10n2T84Ne",
  "object": "recursion",
  "livemode": false,
  "created": 1400638103,
  "amount": 400,
  "currency": "jpy",
  "period": "month",
  "description": "WebPayマガジン購読料",
  "customer": "cus_45d3MV5phaXJ4uv",
  "last_executed": null,
  "next_scheduled": 1400638103,
  "status": "active"
}

next_scheduledが作成時刻のものとなっており、実行するべき時間をすぐに過ぎるため、課金(Chargeオブジェクト)の作成の試行を待機する状態です。

この後、非動的に実行された課金の作成の結果がEventオブジェクトの作成によるWebHookもしくは定期課金の情報を自身で取得することで、 初回の課金の成否を判断する必要がありました。

今後

初回の課金が即座に実行される条件の際に、非同期的ではなく、作成されたRecursionオブジェクトがレスポンスされるまでの間に同期的に実行されます。

上記同様first_scheduledを指定せず、Recursionオブジェクトを作成した際のレスポンスは以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "id": "rec_8hla3E10n2T84Ne",
  "object": "recursion",
  "livemode": false,
  "created": 1400638103,
  "amount": 400,
  "currency": "jpy",
  "period": "month",
  "description": "WebPayマガジン購読料",
  "customer": "cus_45d3MV5phaXJ4uv",
  "last_executed": 1400638103,
  "next_scheduled": 1403316503,
  "status": "active"
}

last_executedが作成時点で更新され、next_scheduledには次回である1か月後の時刻が設定されています。 このレスポンスを得られる時点で課金の作成が試行されているためstatusプロパティが、activeになっていたら課金成功、suspendedになっていたら課金失敗と判断できます。

** ただし、通常の課金の作成操作とは異なり、課金に失敗してもエラーレスポンスにはなりません。成否に関係なく、今までどおり作成されたRecursionオブジェクトが返却されます。 **

なお、初回の課金時刻に未来の日時が指定されており、リクエストの時点では課金を行わないため、作成時にレスポンスされるオブジェクトは常にstatusプロパティがactiveになります。 課金が実行済みであるかどうかはlast_executedプロパティがnullであるか、時刻が入っているかで判断できます。

詳しくは定期課金のドキュメントAPIドキュメントをご参照ください。 また、ご不明点がございましたらWebPayのフォーラムまでお問い合わせください。