Apps APIおよびWebhookで使用される代表的なJSONサンプルを掲載しています。
実際の実装時の参考にしてください。
Webhook署名検証のサンプル(Node.js)
署名検証では、JSONへ変換する前の生のリクエストボディを使用します。Webhookシークレットは環境変数APPS_WEBHOOK_SECRETなどで管理し、ソースコードへ直接記述しないでください。
const crypto = require('crypto');
// 生のボディが必要なため express.raw を使う
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const header = req.get('Apps-Signature') || '';
const parts = header.split(',').map((s) => s.split('='));
const timestamp = Number((parts.find((p) => p[0] === 't') || [])[1]);
const signatures = parts.filter((p) => p[0] === 'v1').map((p) => p[1]);
if (!timestamp || Math.abs(Date.now() / 1000 - timestamp) > 300) return res.sendStatus(400);
const expected = crypto.createHmac('sha256', process.env.APPS_WEBHOOK_SECRET).update(String(timestamp) + '.' + req.body.toString('utf8')).digest('hex');
const valid = signatures.some((sig) => sig.length === expected.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)));
if (!valid) return res.sendStatus(400);
const event = JSON.parse(req.body.toString('utf8'));
res.sendStatus(200);
});
顧客新規作成イベント(customer)
{
"id": "58886defd811bdbadec04bafd19d9f58",
"event": "customer",
"mode": "live",
"create_at": "2025-02-01T10:07:31Z",
"customer": {
"customer_id": "3a7f0e8f97955aa4178902e17371f1b5",
"email": "taro@apps.com",
"name": "アップス太郎",
"company": "テスト会社",
"phone_number": "+818018821111"
}
}
申し込み完了イベント(application)
{
"id": "fdda24b899e5b42c571f6b435259b037",
"event": "application",
"mode": "live",
"create_at": "2025-01-28T11:26:16Z",
"contract_id": "310ede6b6c34c1365868e1f18099baf6",
"customer": {
"customer_id": "3a7f0e8197955aa4178902e17371f1b5",
"email": "taro@apps.com",
"name": "アップス太郎",
"company": "テスト会社",
"phone_number": "+818018821111"
},
"plan": {
"payment_type": 4,
"name": "アップス月額プラン"
}
}
決済成功イベント(payment)
{
"id": "00000000000000000000000000000001",
"event": "payment",
"mode": "live",
"create_at": "2026-08-04T00:00:00Z",
"contract_id": "00000000000000000000000000000002",
"payment_id": "00000000000000000000000000000003",
"customer": {
"customer_id": "00000000000000000000000000000004",
"email": "customer@example.com"
},
"payment": {"platform_id": 4, "price": 1000},
"plan": {"payment_type": 4, "name": "サンプルプラン"}
}
返金成功イベント(refund)
{
"id": "00000000000000000000000000000011",
"event": "refund",
"mode": "live",
"create_at": "2026-08-04T00:00:00Z",
"contract_id": "00000000000000000000000000000012",
"payment_id": "00000000000000000000000000000013",
"customer": {
"customer_id": "00000000000000000000000000000014",
"email": "customer@example.com"
},
"payment": {"platform_id": 4, "price": 1000, "refund_id": "refund-example-001"},
"plan": {"payment_type": 4, "name": "サンプルプラン"}
}
決済エラーイベント(payment_error)
{
"id": "00000000000000000000000000000021",
"event": "payment_error",
"create_at": "2026-08-04T00:00:00Z",
"plan": {"payment_type": 4, "name": "サンプルプラン"},
"platform_id": 4,
"email": "customer@example.com",
"name": "サンプルユーザー",
"message": "決済処理に失敗しました"
}
かご落ちイベント(abandoned)
{
"id": "00000000000000000000000000000031",
"event": "abandoned",
"create_at": "2026-08-04T00:00:00Z",
"cart_abandoned_list": [
{
"email": "customer1@example.com",
"name": "サンプルユーザー1",
"plan": {"payment_type": 1, "name": "サンプル商品"}
},
{
"email": "customer2@example.com",
"name": "サンプルユーザー2",
"plan": {"payment_type": 1, "name": "サンプル商品"}
}
]
}
解約完了イベント(canceled)
{
"id": "fdda24b899e5b42c571f6b435259b037",
"event": "canceled",
"mode": "live",
"create_at": "2025-02-01T10:07:31Z",
"contract_id": "310ede6b6c34c1365868e1f18099baf6",
"customer": {
"customer_id": "3a7f0e8197955aa4178902e17371f1b5",
"email": "taro@apps.com",
"name": "アップス太郎",
"company": "テスト会社",
"phone_number": "+818018821111"
},
"plan": {
"payment_type": 4,
"name": "アップス月額プラン"
}
}
関連情報
- 各イベントの詳細なデータ構造については Webhookデータ構造 をご覧ください。
- APIの基本的な使い方は API設定方法 を参照してください。
Apps APIメニュー
| メニュー | 説明 |
|---|---|
| API設定方法 | アクセストークンの取得やAPI認証方法 |
| APIエンドポイント一覧 | 顧客情報・決済情報取得のためのAPI仕様 |
| 登録ページAPI | 登録ページのプラン登録・更新・削除と契約者一覧の取得 |
| Discord連携API | Discordのロール・チャンネル管理(カテゴリ指定 parent_id 対応) |
| APIレスポンスデータ構造 | APIから取得できるデータの詳細 |
| 共通レスポンス・エラー | APIの共通レスポンス形式とエラーコード(400等)の見方 |
| Webhookの設定方法 | イベント通知を受け取るためのWebhook設定方法 |
| Webhookデータ構造 | Webhookで通知されるデータ形式 |
| サンプルJSONデータ | API/Webhookで利用可能なサンプルデータ |
| API変更履歴 / リリースノート | Apps APIの更新、新機能、仕様変更を時系列で確認できます。 |
| サポートコミュニティ | 準備中 |
| よくあるご質問 | 準備中 |