1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

PAY.JP のサブスクリプション一時停止・再開機能を実際に試してみました。

「また使うかもだけど、いったん課金はストップしておきたい」というユーザーの要望に応えられ、一時停止の方が完全解約よりも再開率が高い可能性があります。
サービスによりますが、ユーザーにとっても解約以外に一時停止という選択肢を持てるようになると思います。

前提

  • 環境:PAY.JP のテスト環境

お試し用のデータとして、テスト環境にアクティブ状態のサブスクリプションを準備しています。
本記事ではスクリプトを Node.js(ES modules形式)で書いてます。

image.png

サブスクリプションの一時停止(pause)

POST https://api.pay.jp/v1/subscriptions/:id/pause

サブスクリプションを停止させてみます。
課金IDは定期課金詳細のページから確認できます。

import Payjp from 'payjp';

const payjp = Payjp('テスト環境の鍵');
const subscription = await payjp.subscriptions.pause('停止させたい課金ID');

console.log(subscription.status);    // 'paused'
console.log(subscription.paused_at); // タイムスタンプ

スクリプトを実行後、定期課金一覧の画面から確認すると、サブスクリプションのステータスが 停止中(paused) に変更されたことを確認できました。

image.png

続いて停止させたサブスクリプションを再開させてみます。

サブスクリプションを再開する(resume)

POST https://api.pay.jp/v1/subscriptions/:id/resume
import Payjp from 'payjp';

const payjp = Payjp('テスト環境の鍵');
const subscription = await payjp.subscriptions.resume('停止させた課金ID');

console.log(subscription.status);    // 'trial' or 'active'(pause前の状態による)

スクリプトを実行すると、ステータスが アクティブ(active) に変更されました。
今回は元の状態もアクティブだったため、元の状態に戻ったのだと思います。

image.png

サブスクリプション再開時に trial 期間を指定する(resume + trial_end)

PAY.JP のサブスクリプションでは、resume API コール時に trial_end を指定することで、再開後のトライアル期間を制御できるので試してみます。

POST https://api.pay.jp/v1/subscriptions/:id/resume

再度ステータスが停止中(paused)のデータを準備しました。このデータを使って試していきます。

image.png

trial_end を指定した resume のAPIコールも実行してみます。

import Payjp from 'payjp';

const payjp = Payjp('テスト環境の鍵');
const trialEnd = Math.floor(
  new Date('2026-02-01T23:59:59+09:00').getTime() / 1000
);

const subscription = await payjp.subscriptions.resume(
  '停止させた課金ID',
  { trial_end: trialEnd }
);

console.log(subscription.status); // 'trial'
console.log(subscription.trial_end);

スクリプトを実行後、定期課金一覧の画面からステータスを確認してみます。

image.png

resume 直後からサブスクリプションは trial ステータスに更新されました。

ダッシュボードから確認したところ、トライアル期間も更新されています。
APIコール前とは別の任意の日時を指定できており、再開後に新しい trial が付与されていることを確認できました。

ドキュメントによると、trial_end には下記の制約がありました。

リクエスト時より未来のタイムスタンプ(5年後まで) or 文字列 now が指定可能です。 この引数を指定した場合、プランのトライアル日数(trial_days)は無視されます。

まとめ

PAY.JP の API を通じて定期課金の一時停止と再開が行えることを、実際に試して確認してみました。

ドキュメントも日本語で読みやすかったです。

  • pause API:サブスクリプションのステータスは paused になる
  • resume API:一時停止したサブスクリプションの再開。trial_end を指定すると、再開後に新しい トライアル 期間を付与できる

定期課金を「解約せず一時的に止める」「再開時の課金タイミングを制御する」といった用途に、pause / resume API を組み合わせて利用できそうです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?