締めサイクルと売上集計
PAY.JP における売上の締めサイクルと振込の仕組み
PAY.JP では、支払いで発生した売上や返金を一定期間ごとに集計し、加盟店口座への振込や請求を行います。
売上の流れ
決済完了から振込までの流れは以下のとおりです。
タイムライン例(月末締め・翌月末払いの場合)
- 1月1日〜31日: 決済が
Term(集計区間) に記録 - 2月1日:
Termが締まりStatement(取引明細) が生成 - 2月1日:
StatementがBalance(残高) に集約され振込判定 - 2月28日頃: 最低入金額を超えていれば加盟店口座に振込
仕組みの全体像
売上の集計から振込までの流れと、3つのオブジェクトの関係を以下の図で示します。
決済・返金・チャージバックは 決済トランザクション として記録されます。
構成するオブジェクト
Term(集計区間)
Term (集計区間)APIは売上を集計する期間を表し、以下のような特徴があります。
- 締めサイクルの開始時刻に自動作成
- 期間中の決済・返金・チャージバックが関連付け
- 終了日を過ぎると自動で締め処理が実行
{
"id": "term_xxx",
"object": "term",
"start_at": "2025-01-01T00:00:00Z",
"end_at": "2025-02-01T00:00:00Z",
"closed": true,
.....
}締めサイクルは管理画面から変更できます。変更は次回の Term 作成時から適用されます。
Statement(取引明細)
Statement (取引明細)APIは PAY.JP と加盟店間のお金の動きを表します。
| type | 区分 | 説明 |
|---|---|---|
| sales | 売上 | 決済による売上や決済手数料 |
| service_fee | サービス利用料 | 有料プランの月額費用 |
| transfer_fee | 振込手数料 | 振込時に発生 |
| forfeit | 残高失効 | 一定期間後の残高失効 |
| misc | その他 | 調整金など |
{
"id": "st_xxx",
"object": "statement",
"type": "sales",
"net": 95000,
"term": { "id": "term_xxx" },
"balance": "bal_xxx",
.....
}金額の表現: 加盟店が受け取る金額はプラス、支払う金額はマイナスで表現されます。
適格請求書: 課税取引が含まれる場合、適格請求書形式の書面が発行されます。
Balance(残高)
Balance (残高)APIは Statement (取引明細)APIを集約し、振込・請求状態を管理します。
{
"id": "bal_xxx",
"object": "balance",
"state": "transfer",
"closed": false,
"due_date": "2025-02-28T00:00:00Z",
"net": 95000,
"statements": [...],
.....
}Balance の状態
| state | 状態 | 説明 |
|---|---|---|
| collecting | 集計中 | Statement を集めている状態 |
| transfer | 入金 | 加盟店口座への振込処理中 |
| claim | 請求 | 加盟店への請求が発生 |
締めサイクルの詳細
Term(集計区間)の作成と決済の関連付け
- 締めサイクル開始時に新しい Term(集計区間)を自動作成
- 期間中に確定した決済が Term(集計区間)に関連付け
確定のタイミング
Payment Flow の status が succeeded になったタイミングで Term に関連付けられます。オーソリのみ(requires_capture)では関連付けられません。
Term(集計区間)の締め処理
終了日を過ぎると自動で以下の処理が実行されます
- 集計: Term(集計区間)に関連付けられた金額を集計
- Statement 生成: 集計結果を含む Statement を作成
- Balance(残高)への追加: Statement を既存または新規 Balance(残高)に追加
- Term(集計区間)をクローズ:
closedがtrueに変更
Balance(残高)の状態判定
Term(集計区間)締め処理完了時、state=collecting の Balance(残高)は状態判定が行われます。
最低入金額以上の場合 → state が transfer に変更
bank_infoに振込先口座情報が表示due_dateに入金予定日が設定- 振込手数料の Statement(取引明細)が追加
- 振込完了後、
closed=trueになる
総額がマイナスの場合 → state が claim に変更
due_dateに請求期日が設定- PAY.JP から請求書が発行
- 期日までの振込確認後、
closed=trueになる
最低入金額未満の場合 → state は collecting のまま
- 次回の締め処理まで繰り越し
例外ケース
未処理の請求がある場合: state=claim で closed=false の Balance が残っている場合、最低入金額を超えていても state は collecting のままです。
口座情報が無効な場合: bank_info.status=failed の場合、state=transfer になりますが口座修正まで入金予定日は確定しません。
よくあるシナリオ
通常の月次サイクル
前提: 月末締め・翌月末払い、最低入金額10,000円、振込手数料250円
-
1月の決済
- 1/10: 決済 50,000円(手数料3.3% = 1,650円)
- 1/20: 決済 50,000円(手数料3.3% = 1,650円)
- 1/25: 返金 -10,000円
-
2月1日: Term(集計区間)締め処理
- Term
term_202501がclosed=trueになる - Statement(取引明細)が生成される
- 売上 Statement: net = 86,700円(100,000円 - 3,300円(手数料) - 10,000円(返金))
- Balance(残高)に Statement(取引明細)が追加される
- Term
-
Balance(残高)の状態判定
- 総額 86,700円 > 最低入金額 10,000円
state=transferに変更- 振込手数料 Statement(取引明細) (-250円) が追加
- 最終振込額: 86,450円
due_date: 2025-02-28
-
2月28日: 振込実行
- 86,450円が加盟店口座に振込
- Balance の
closed=trueになる
複数 Term(集計区間)にまたがる繰越
前提: 月末締め・翌月末払い、最低入金額10,000円、振込手数料250円
最低入金額に満たない Statement(取引明細)は Balance(残高)に蓄積され、次の Term(集計区間)の Statement(取引明細)と合算されます。
-
3/1: term_A 締め処理
- Statement_A(900円)が生成
- balance_A に追加されるが、最低入金額10,000円未満
state=collectingのまま繰り越し
-
4/1: term_B 締め処理
- Statement_B(10,000円)が生成
- 既存の balance_A に追加
-
Balance 状態判定
- 合計額: 900円 + 10,000円 = 10,900円 > 最低入金額
state=transferに変更- 振込手数料 Statement_C(-250円)が追加
- 最終振込額: 10,650円
-
4/30: 振込実行
- 10,650円が加盟店口座に振込
- Balance が
closed=trueになる
このように、最低入金額に満たない場合は Balance が collecting 状態のまま次の Term まで繰り越され、複数の Statement が蓄積されます。
Balance(残高)の合算
以下のような特定の状況で、ある Balance(残高)の Statement(取引明細)がすべて別の Balance(残高)に移動される「合算」が発生します。
- 組戻発生時: 未振込の金額を次回 Balance(残高)と合算
- 相殺処理時: 請求を別の売上と相殺
合算で空になった Balance(残高)は自動的に closed=true になります。合算は原則として事前連絡の上で実施されます。