定期課金日割り機能の紹介

PAY.JPの定期課金では課金日の指定を行うことができます。例えば毎月1日に課金を実行したい場合はプランに billing_day=1 と指定することで、定期課金の作成日時に関わらず毎月1日の午前9時に課金が実行されます。

この場合、初回課金のタイミングは作成時ではなく直近の課金実行日というのが現在のデフォルト仕様です。その為、初回課金時の前に定期課金を停止、キャンセル、もしくは削除した場合、課金が一度も行われることなくサービスを提供してしまう期間が発生します。

初回課金額の日割り

上記の挙動を回避する為、課金日が指定してある場合でも定期課金作成時にプラン料金の日割り計算を行い、初回課金を即実行するオプション prorate が2015年12月2日より使えるようになりました。以下が日割り計算課金を行うリクエストの例です。

リクエスト:

curl https://api.pay.jp/v1/subscriptions     \
-u sk_test_c62fade9d045b54cd76d7036:         \
-d customer=cus_4df4b5ed720933f4fb9e28857517 \
-d plan=pln_9589006d14aad86aafeceac06b60     \
-d prorate=true

prorate=true とする事で日割り計算を有効化しています。この例ではプランにトライアル期間が設定されていない限り、必ず作成時に課金を実行します。

日割り額の計算方法

日割り金額は定期課金作成日から直近課金日までの日数、および直前課金日から直近課金日までの日数を元に算出します。

例えばプラン金額が1,000円、課金日が1日、課金作成日が11月17日だとします。この場合、作成日(11/17)から次の課金日(12/1)までの日数は14日です。また直前の課金日は11月1日なので次の課金日(12/1)までの日数は30日です。30日のうち14日分を課金するので、日割りによる課金額は1,000円 x 14 / 30 = 466円となります。

サービスの種類や金額などに応じて日割りの有効無効を切り替えることにより、柔軟に定期課金の管理を行うことが出来ます。ぜひご利用ください。

定期課金におけるイベント種別の変更について

2016年1月12日(火) 15:00より、定期課金時に送信されるWebhookのイベント種別が変更になります。

対象の処理は、定期課金作成、更新、再開となりますので、

  • 定期課金の作成、更新、再開時のWebhookのイベントを使った処理を行っている方

に影響が発生いたします。

なお、billing_dayやtrial_daysを用いた、支払いが即時ではない定期課金は今回の対象とはなりません。

これまでの定期課金では、定期課金(subscription)オブジェクトが作成されたあとに支払いが実行されていたのに対して、今回の変更で、支払いが実行されたあとに定期課金(subscription)オブジェクトが作成されるようになります。

今までは、定期課金が作成されたあとに非同期で支払いが実行されており、支払いの成否に関わらずに、定期課金が作成されたまま残ってしまう仕様となっていました。

例えば、支払いに失敗した場合にWebhookで送信されるイベント種別は subscription.created, charge.failed, subscription.paused というものになり、定期課金作成・支払いに失敗したにも関わらず、定期課金が作成され、subscription.pausedというイベントが送られていました。

こうした直感的ではない動作を是正するために、 支払いのトライ -> 定期課金の操作 というように支払いを先に行い、成功した場合にのみ定期課金を作成、失敗した場合は定期課金を作成しないというように変更を予定しています。

下記、詳細の挙動となります。

定期課金作成時

リクエスト:

curl https://api.pay.jp/v1/subscriptions \
-u API_KEY: \
-d plan=plan_id -d customer=customer_id

変更前

課金に成功した場合に送られるevent.type:

subscription.created
charge.succeeded
subscription.renewed

課金に失敗した場合に送られるevent.type:

subscription.created
charge.failed
subscription.paused

変更後

課金に成功した場合に送られるevent.type:

charge.succeeded
subscription.created

課金に失敗した場合に送られるevent.type:

charge.failed

定期課金のプラン変更時

リクエスト:

curl https://api.pay.jp/v1/subscriptions/subscription_id \
-u API_KEY: \
-d plan=plan_id

変更前

課金に成功した場合に送られるevent.type:

subscription.updated
charge.succeeded
subscription.renewed

課金に失敗した場合に送られるevent.type:

subscription.updated
charge.failed
subscription.paused

変更後

課金に成功した場合に送られるevent.type:

charge.succeeded
subscription.updated

課金に失敗した場合に送られるevent.type:

charge.failed

定期課金の再開時

リクエスト:

curl https://api.pay.jp/v1/subscriptions/subscription_id/resume \
-u API_KEY: \
-XPOST

変更前

課金に成功した場合に送られるevent.type:

subscription.resumed
charge.succeeded
subscription.renewed

課金に失敗した場合に送られるevent.type:

subscription.resumed
charge.failed
subscription.paused

変更後

課金に成功した場合に送られるevent.type:

charge.succeeded
subscription.resumed

課金に失敗した場合に送られるevent.type:

charge.failed

ご利用いただいている皆さまにはご迷惑をおかけいたしますが、ご了承いただけますことをお願い申し上げます。

PAY.JP 技術ブログを公開しました

はじめまして。PAY.JPです。

PAY.JPは2015年9月7日に正式リリースされたオンライン決済サービスです。 PAY.JPをご利用いただいている皆さまに向けて、技術的な情報をメインに発信していく場として、ブログを公開いたしました。

具体的には

  • PAY.JPの最新情報
  • PAY.JPの技術に関する情報
  • 変更点・障害情報などの重要なお知らせ

などを発信していく予定です。

今後ともどうぞよろしくお願いします。