残高とセトルメントレポート
残高レポートは、アカウントの残高、決済レコード、および支払い情報について詳細に提供します。
概要
残高レポートは以下を提供します:
- アカウント残高: 利用可能な、保留中の、および予約済みの資金
- 決済記録: 銀行口座への転送
- 手数料内訳: すべての取引手数料の詳細
- 準備金追跡: 予約済み資金の管理
- 複数通貨: マルチ通貨残高表示
残高の詳細を理解
残高の種類
残高には複数の種類があります:
- 利用可能: すぐに転送できる資金
- 保留中: 決済を待つ資金
- 予約済み: チャージバックなどに備える資金
const balance = await omise.balance.retrieve();
console.log('Available:', balance.available / 100, 'THB');
console.log('Pending:', balance.pending / 100, 'THB');
console.log('Reserved:', balance.reserved / 100, 'THB');
console.log('Total:', (balance.available + balance.pending) / 100, 'THB');
セトルメント情報を取得
セトルメントレコードを一覧表示
import omise
omise.api_secret = 'skey_test_123456789'
def get_settlements(from_date=None, to_date=None):
"""セトルメントレコードを取得"""
settlements = omise.Settlement.list(
limit=100,
from_date=from_date,
to_date=to_date
)
for settlement in settlements.data:
print(f"ID: {settlement.id}")
print(f"Amount: {settlement.amount / 100} THB")
print(f"Fee: {settlement.fee / 100} THB")
print(f"Net: {settlement.net / 100} THB")
print(f"Date: {settlement.created}")
return settlements
API経由でアクセス
残高レポートデータ
async function getBalanceReport(currency = 'THB') {
const balance = await omise.balance.retrieve();
return {
available: balance.available / 100,
pending: balance.pending / 100,
reserved: balance.reserved / 100,
currency: currency,
retrieved_at: new Date().toISOString()
};
}
// 使用例
const report = await getBalanceReport();
console.log(JSON.stringify(report, null, 2));
セトルメント詳細
require 'omise'
Omise.api_key = 'skey_test_123456789'
def get_settlement_details(settlement_id)
settlement = Omise::Settlement.retrieve(settlement_id)
{
id: settlement.id,
amount: settlement.amount / 100.0,
fee: settlement.fee / 100.0,
net: settlement.net / 100.0,
currency: settlement.currency,
status: settlement.status,
created: settlement.created
}
end
レポートのエクスポート
CSVでダウンロード
ダッシュボードから:
- レポート > 残高に移動
- 日付範囲を選択
- エクスポート > CSVをクリック
- ファイルがダウンロードされます
プログラムでエクスポート
<?php
$omise = new Omise(['secretKey' => 'skey_test_123456789']);
function export_balance_data($from_date, $to_date) {
$balance = $omise['balance']->retrieve();
$data = [
['Available', $balance['available'] / 100],
['Pending', $balance['pending'] / 100],
['Reserved', $balance['reserved'] / 100],
['Total Available', ($balance['available'] + $balance['pending']) / 100]
];
$fp = fopen('balance_report.csv', 'w');
foreach ($data as $row) {
fputcsv($fp, $row);
}
fclose($fp);
echo "Report exported to balance_report.csv";
}
一般的なレポートシナリオ
月次会計レポート
from datetime import datetime, timedelta
import omise
def generate_monthly_accounting_report(year, month):
"""月次会計レポートを生成"""
# 月の日付範囲を計算
from_date = datetime(year, month, 1)
if month == 12:
to_date = datetime(year + 1, 1, 1) - timedelta(seconds=1)
else:
to_date = datetime(year, month + 1, 1) - timedelta(seconds=1)
# セトルメントを取得
settlements = omise.Settlement.list(
from_date=from_date.isoformat(),
to_date=to_date.isoformat(),
limit=100
)
# 統計を計算
report = {
'month': f'{year}-{month:02d}',
'total_settled': 0,
'total_fees': 0,
'settlement_count': len(settlements.data)
}
for settlement in settlements.data:
report['total_settled'] += settlement.amount
report['total_fees'] += settlement.fee
report['total_settled'] = report['total_settled'] / 100
report['total_fees'] = report['total_fees'] / 100
report['net_received'] = report['total_settled'] - report['total_fees']
return report
# 使用例
report = generate_monthly_accounting_report(2024, 1)
print(f"Month: {report['month']}")
print(f"Total Settled: {report['total_settled']:.2f} THB")
print(f"Total Fees: {report['total_fees']:.2f} THB")
print(f"Net Received: {report['net_received']:.2f} THB")
自動毎月レポート
package main
import (
"fmt"
"log"
"time"
"github.com/omise/omise-go"
)
func generateMonthlyReport(client *omise.Client) {
now := time.Now()
firstDay := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.UTC)
lastDay := firstDay.AddDate(0, 1, -1)
balance := &omise.BalanceResponse{}
err := client.Do(balance, nil)
if err != nil {
log.Fatalf("Failed to retrieve balance: %v", err)
}
fmt.Printf("Balance Report for %s\n", now.Format("2006-01"))
fmt.Printf("Available: %.2f THB\n", float64(balance.Available)/100)
fmt.Printf("Pending: %.2f THB\n", float64(balance.Pending)/100)
fmt.Printf("Reserved: %.2f THB\n", float64(balance.Reserved)/100)
}
ベストプラクティス
1. 定期的に監視
async function monitorBalance() {
const balance = await omise.balance.retrieve();
// 低い残高をアラート
if (balance.available < 10000000) { // 100,000 THB未満
console.warn('Low balance alert!');
// アラート通知を送信
}
// 高い予約残高をアラート
if (balance.reserved > 50000000) { // 500,000 THB以上
console.warn('High reserved balance');
// 調査が必要
}
}
// 毎日実行
setInterval(monitorBalance, 24 * 60 * 60 * 1000);
2. 和調
def reconcile_with_bank_statement(bank_statement, omise_settlements):
"""銀行ステートメントとOmiseセトルメントを照合"""
discrepancies = {
'omise_only': [],
'bank_only': [],
'amount_mismatches': []
}
bank_map = {tx['reference']: tx for tx in bank_statement}
for settlement in omise_settlements.data:
if settlement.id in bank_map:
bank_tx = bank_map[settlement.id]
if bank_tx['amount'] != settlement.amount / 100:
discrepancies['amount_mismatches'].append({
'reference': settlement.id,
'omise_amount': settlement.amount / 100,
'bank_amount': bank_tx['amount']
})
del bank_map[settlement.id]
else:
discrepancies['omise_only'].append(settlement.id)
discrepancies['bank_only'] = list(bank_map.keys())
return discrepancies
よくあるご質問
準備金とは何ですか?
準備金は、チャージバックや払い戻しに対応するために確保される資金です。これは利用できなく、使用することはできません。
セトルメント後どのくらいの時間で資金が到達しますか?
ほとんどのセトルメントは1〜3営業日以内に銀行口座に到達します。ただし、銀行や時刻により異なります。
複数通貨の残高を表示できますか?
はい。複数の通貨でのトランザクションがある場合、各通貨の残高を個別に表示できます。
セトルメントレコードはどのくらい保持されますか?
Omiseは最大7年間のセトルメントレコードを保持します。API経由でいつでもアクセスできます。