PAY.JP
PAY.JP

締めサイクルと売上集計

PAY.JP における売上の締めサイクルと振込の仕組み

PAY.JP では、支払いで発生した売上や返金を一定期間ごとに集計し、加盟店口座への振込や請求を行います。

売上の流れ

決済完了から振込までの流れは以下のとおりです。

タイムライン例(月末締め・翌月末払いの場合)

  1. 1月1日〜31日: 決済が Term(集計区間) に記録
  2. 2月1日: Term が締まり Statement(取引明細) が生成
  3. 2月1日: StatementBalance (残高) に集約され振込判定
  4. 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 (残高)APIStatement (取引明細)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 の statussucceeded になったタイミングで Term に関連付けられます。オーソリのみ(requires_capture)では関連付けられません。

Term(集計区間)の締め処理

終了日を過ぎると自動で以下の処理が実行されます

  1. 集計: Term(集計区間)に関連付けられた金額を集計
  2. Statement 生成: 集計結果を含む Statement を作成
  3. Balance(残高)への追加: Statement を既存または新規 Balance(残高)に追加
  4. Term(集計区間)をクローズ: closedtrue に変更

Balance(残高)の状態判定

Term(集計区間)締め処理完了時、state=collecting の Balance(残高)は状態判定が行われます。

最低入金額以上の場合statetransfer に変更

  • bank_info に振込先口座情報が表示
  • due_date に入金予定日が設定
  • 振込手数料の Statement(取引明細)が追加
  • 振込完了後、closed=true になる

総額がマイナスの場合stateclaim に変更

  • due_date に請求期日が設定
  • PAY.JP から請求書が発行
  • 期日までの振込確認後、closed=true になる

最低入金額未満の場合statecollecting のまま

  • 次回の締め処理まで繰り越し

例外ケース

未処理の請求がある場合: state=claimclosed=false の Balance が残っている場合、最低入金額を超えていても statecollecting のままです。

口座情報が無効な場合: bank_info.status=failed の場合、state=transfer になりますが口座修正まで入金予定日は確定しません。

よくあるシナリオ

通常の月次サイクル

前提: 月末締め・翌月末払い、最低入金額10,000円、振込手数料250円

  1. 1月の決済

    • 1/10: 決済 50,000円(手数料3.3% = 1,650円)
    • 1/20: 決済 50,000円(手数料3.3% = 1,650円)
    • 1/25: 返金 -10,000円
  2. 2月1日: Term(集計区間)締め処理

    • Term term_202501closed=true になる
    • Statement(取引明細)が生成される
      • 売上 Statement: net = 86,700円(100,000円 - 3,300円(手数料) - 10,000円(返金))
    • Balance(残高)に Statement(取引明細)が追加される
  3. Balance(残高)の状態判定

    • 総額 86,700円 > 最低入金額 10,000円
    • state=transfer に変更
    • 振込手数料 Statement(取引明細) (-250円) が追加
    • 最終振込額: 86,450円
    • due_date: 2025-02-28
  4. 2月28日: 振込実行

    • 86,450円が加盟店口座に振込
    • Balance の closed=true になる

複数 Term(集計区間)にまたがる繰越

前提: 月末締め・翌月末払い、最低入金額10,000円、振込手数料250円

最低入金額に満たない Statement(取引明細)は Balance(残高)に蓄積され、次の Term(集計区間)の Statement(取引明細)と合算されます。

  1. 3/1: term_A 締め処理

    • Statement_A(900円)が生成
    • balance_A に追加されるが、最低入金額10,000円未満
    • state=collecting のまま繰り越し
  2. 4/1: term_B 締め処理

    • Statement_B(10,000円)が生成
    • 既存の balance_A に追加
  3. Balance 状態判定

    • 合計額: 900円 + 10,000円 = 10,900円 > 最低入金額
    • state=transfer に変更
    • 振込手数料 Statement_C(-250円)が追加
    • 最終振込額: 10,650円
  4. 4/30: 振込実行

    • 10,650円が加盟店口座に振込
    • Balance が closed=true になる

このように、最低入金額に満たない場合は Balance が collecting 状態のまま次の Term まで繰り越され、複数の Statement が蓄積されます。

Balance(残高)の合算

以下のような特定の状況で、ある Balance(残高)の Statement(取引明細)がすべて別の Balance(残高)に移動される「合算」が発生します。

  • 組戻発生時: 未振込の金額を次回 Balance(残高)と合算
  • 相殺処理時: 請求を別の売上と相殺

合算で空になった Balance(残高)は自動的に closed=true になります。合算は原則として事前連絡の上で実施されます。