メインコンテンツへスキップ

トランザクションと支払いレポート

トランザクションレポートは、Omiseアカウントのすべての支払い活動に関する詳細な洞察を提供します。会計、調整、およびビジネス分析のために、請求金、返金、紛争、および転送に関する包括的なデータにアクセスします。

概要

トランザクション報告機能は以下を含みます:

  • リアルタイムデータ: トランザクションが発生するのを表示
  • 包括的なフィルタリング: ステータス、金額、日付、支払い方法などでフィルター
  • 高度な検索: 特定のトランザクションをすばやく検索
  • 一括エクスポート: 複数の形式でトランザクションデータをダウンロード
  • スケジュール済みレポート: レポート生成と配信を自動化
  • APIアクセス: プログラムでトランザクションデータを取得
  • 調整ツール: 支払いを銀行決済と照合
  • 紛争追跡: チャージバックと紛争を監視

レポートタイプ

1. 支払いレポート

成功した支払いはすべて表示:

// Node.js - 支払いレポートを取得
const omise = require('omise')({
secretKey: 'skey_test_xxxxx'
});

async function getPaymentReport(fromDate, toDate) {
const charges = await omise.charges.list({
from: fromDate,
to: toDate,
paid: true,
limit: 100,
order: 'reverse_chronological'
});

const report = charges.data.map(charge => ({
id: charge.id,
amount: charge.amount / 100,
currency: charge.currency.toUpperCase(),
customer: charge.customer || 'Guest',
card_brand: charge.card?.brand || 'N/A',
card_last4: charge.card?.last_digits || 'N/A',
status: charge.status,
created: new Date(charge.created * 1000).toISOString(),
description: charge.description || ''
}));

return { total: charges.total, payments: report };
}

2. 請求レポート

すべての請求試行(成功と失敗):

# Python - 失敗した請求を分析
import omise
omise.api_secret = 'skey_test_xxxxx'

def analyze_failed_charges(from_date, to_date):
charges = omise.Charge.list(
from_date=from_date.isoformat(),
to_date=to_date.isoformat(),
limit=100
)

failed_charges = [c for c in charges.data if not c.paid]

failure_reasons = {}
for charge in failed_charges:
reason = charge.failure_code or 'unknown'
if reason not in failure_reasons:
failure_reasons[reason] = {'count': 0, 'amount': 0}
failure_reasons[reason]['count'] += 1
failure_reasons[reason]['amount'] += charge.amount

return {
'total_failed': len(failed_charges),
'total_attempted': charges.total,
'failure_rate': f"{(len(failed_charges) / charges.total * 100):.2f}%",
'failure_reasons': failure_reasons
}

3. 返金レポート

すべての返金トランザクション:

# Ruby - 返金レポートを生成
require 'omise'
Omise.api_key = 'skey_test_xxxxx'

def generate_refund_report(from_date, to_date)
charges = Omise::Charge.list({
from: from_date.iso8601,
to: to_date.iso8601,
limit: 100
})

refund_stats = {
'total_refunds': 0,
'total_amount': 0,
'full_refunds': 0,
'partial_refunds': 0
}

charges.data.each do |charge|
if charge.refunded_amount > 0
refunds = Omise::Refund.list(charge_id: charge.id)
refunds.data.each do |refund|
refund_stats['total_refunds'] += 1
refund_stats['total_amount'] += refund.amount

if refund.amount == charge.amount
refund_stats['full_refunds'] += 1
else
refund_stats['partial_refunds'] += 1
end
end
end
end

refund_stats
end

フィルターオプション

利用可能なフィルター

  1. 日付範囲: 特定の日付、相対範囲、カスタム範囲
  2. ステータス: 成功、失敗、保留中、反転、期限切れ
  3. 金額: 最小、最大、正確、範囲
  4. 支払い方法: クレジット/デビットカード、インターネットバンキング、モバイルバンキング、電子ウォレット、QR支払い、分割払い
  5. 通貨: THB、SGD、JPY、USDなど
  6. 顧客: 顧客ID、メール、名前
  7. メタデータ: カスタムメタデータフィールド、注文ID、参照番号

APIを介したフィルタリング

// Node.js - 高度なフィルタリング
async function getFilteredTransactions(filters) {
const params = {
limit: 100,
order: 'reverse_chronological'
};

if (filters.from) params.from = filters.from;
if (filters.to) params.to = filters.to;
if (filters.status === 'successful') params.paid = true;
if (filters.status === 'failed') params.paid = false;

const charges = await omise.charges.list(params);
let filteredCharges = charges.data;

if (filters.minAmount) {
filteredCharges = filteredCharges.filter(c => c.amount >= filters.minAmount * 100);
}

if (filters.currency) {
filteredCharges = filteredCharges.filter(c => c.currency === filters.currency.toLowerCase());
}

return { total: filteredCharges.length, data: filteredCharges };
}

トランザクションを検索

ダッシュボード検索

検索を使用して特定のトランザクションを見つける:

  • トランザクション ID: 完全または部分的な請求ID
  • 顧客メール: 顧客のメールアドレス
  • 金額: 正確な金額と通貨
  • カード最後4桁: 最後の4桁(オプション的にカードブランド指定)

API経由の高度な検索

# Python - 高度なトランザクション検索
import omise
omise.api_secret = 'skey_test_xxxxx'

class TransactionSearch:
def search(self, criteria):
# 基本パラメーターで検索
params = {'limit': 100}
if criteria.get('from'):
params['from_date'] = criteria['from']
if criteria.get('to'):
params['to_date'] = criteria['to']

charges = omise.Charge.list(**params)
results = charges.data

# 追加フィルターを適用
if criteria.get('min_amount'):
results = [c for c in results if c.amount >= criteria['min_amount'] * 100]

if criteria.get('card_last4'):
results = [c for c in results if c.card and c.card.last_digits == criteria['card_last4']]

return results

# 使用例
searcher = TransactionSearch()
results = searcher.search({
'from': '2024-01-01T00:00:00Z',
'to': '2024-01-31T23:59:59Z',
'card_last4': '4242',
'min_amount': 100
})

レポートスケジューリング

スケジュール済みレポートの設定

  1. レポート > スケジュール済みレポートに移動

  2. 「スケジュール作成」をクリック

  3. レポートを構成:

    • レポートタイプ(支払い、請求、返金)
    • 頻度(毎日、毎週、毎月)
    • 日付範囲(過去24時間、過去7日など)
    • フィルターと条件
    • エクスポート形式(CSV、PDF、Excel)
  4. 受信者を設定:

    • メールアドレスを追加
    • 配信時刻を構成
    • タイムゾーンを設定
  5. スケジュールを保存

自動レポート配信

// Node.js - カスタムレポートスケジューリング
const omise = require('omise')({ secretKey: 'skey_test_xxxxx' });
const cron = require('node-cron');
const nodemailer = require('nodemailer');

// メール構成
const transporter = nodemailer.createTransport({
host: 'smtp.example.com',
port: 587,
auth: { user: 'reports@example.com', pass: 'password' }
});

async function generateAndEmailReport() {
try {
const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000);
const today = new Date();

const charges = await omise.charges.list({
from: yesterday.toISOString(),
to: today.toISOString(),
paid: true,
limit: 100
});

const reportData = charges.data.map(charge => ({
'Transaction ID': charge.id,
'Amount': charge.amount / 100,
'Currency': charge.currency.toUpperCase(),
'Card Brand': charge.card?.brand || 'N/A',
'Status': charge.status,
'Created': new Date(charge.created * 1000).toISOString()
}));

// CSV に変換
const json2csv = require('json2csv');
const csv = json2csv.parse(reportData);

// ファイルに保存して送信
await transporter.sendMail({
from: '"Omise Reports" <reports@example.com>',
to: 'accounting@example.com',
subject: `Daily Payment Report - ${yesterday.toISOString().split('T')[0]}`,
text: `Total Transactions: ${charges.total}`,
attachments: [{ filename: 'report.csv', content: csv }]
});

console.log('Report sent successfully');
} catch (error) {
console.error('Error generating report:', error);
}
}

// 毎日午前8時に実行
cron.schedule('0 8 * * *', generateAndEmailReport);

エクスポートオプション

エクスポート形式

  1. CSV: Excel、Google Sheets、データ分析に最適
  2. Excel(XLSX): 高度なExcel機能、フォーマット設定用
  3. PDF: 印刷、共有、アーカイブ用

ダッシュボードからエクスポート

  1. 目的のレポートに移動
  2. フィルターと日付範囲を適用
  3. エクスポートボタンをクリック
  4. 形式を選択(CSV、Excel、PDF)
  5. ダウンロードが自動的に開始

よくあるご質問

トランザクションレポートはどのくらい保持されますか?

Omiseは7年間トランザクションデータを保持します。この期間内の任意の時点からデータにアクセスしてエクスポートできます。

特定の支払い方法のレポートを生成できますか?

はい、支払い方法でフィルターしたり、クレジットカード(ブランド別)、インターネットバンキング、モバイルバンキング、電子ウォレット、QR支払いでレポートを作成できます。

トランザクション日付と決済日付の違いは何ですか?

トランザクション日付は支払い処理時刻です。決済日付は資金が銀行口座に転送される時刻です(通常T+3からT+7営業日)。

レポートをカスタマイズできますか?

APIを使用してプログラムでカスタムレポートを作成できます。ダッシュボードは標準テンプレートを提供します。

関連リソース