Skema data harus sederhana, audit-friendly, dan mudah dipindah ke database lain nanti jika diperlukan.
Menyimpan daftar provider yang didukung.
Field yang disarankan:
idnamecodestatuscreated_atupdated_at
Menyimpan credential dan konfigurasi per merchant/provider.
Field yang disarankan:
idprovider_idenvironmentdisplay_namecredential_jsonconfig_jsoncreated_atupdated_at
Catatan:
credential_jsonmenyimpan key, secret, token, atau field sensitif lain dalam format JSON terstruktur.config_jsonmenyimpan setting seperti webhook secret, callback URL, dan channel config.- Kombinasi
provider_iddanenvironmentharus unik agar onboarding provider bisa bersifat upsert.
Contoh credential_json Xendit:
{
"secret_key": "..."
}Contoh credential_json Midtrans:
{
"merchant_id": "...",
"client_key": "...",
"server_key": "..."
}Menyimpan objek payment internal yang netral provider.
Field yang disarankan:
idexternal_refprovider_idamountcurrencystatusmetadata_jsoncreated_atupdated_at
Menyimpan setiap percobaan create payment ke provider.
Field yang disarankan:
idpayment_intent_idprovider_idrequest_jsonresponse_jsonstatusprovider_referencecreated_atupdated_at
Catatan penting:
request_jsonadalah outbound mentah ke provider.response_jsonadalah inbound mentah dari provider.- Ini wajib untuk debugging, audit, dan replay.
Menyimpan setiap percobaan status inquiry ke provider.
Field yang disarankan:
idpayment_intent_idprovider_idrequest_jsonresponse_jsonstatusprovider_referencecreated_atupdated_at
Catatan penting:
request_jsonadalah request mentah ke provider untuk cek status.response_jsonadalah response mentah dari provider.- Ini membantu audit, replay, dan debugging status yang berubah belakangan.
Menyimpan event webhook masuk.
Field yang disarankan:
idprovider_idprovider_event_idevent_typesignature_validpayload_jsonheaders_jsonreceived_atprocessed_atprocessing_status
Catatan penting:
payload_jsonmenyimpan body mentah webhook.headers_jsonmenyimpan header mentah webhook.provider_event_iddipakai untuk idempotency / dedup jika tersedia.
Menyimpan target forwarding yang dikonfigurasi user.
Field yang disarankan:
idnameprovider_idevent_filter_jsontarget_urlauth_jsonretry_policy_jsonenabledcreated_atupdated_at
Catatan:
event_filter_jsonbisa berisi filter provider atau event tertentu.auth_jsonmenyimpan header atau token autentikasi tujuan forwarding.retry_policy_jsonmenyimpan retry default yang bisa diubah lewat CLI.
Menyimpan setiap percobaan pengiriman ulang webhook ke target forwarding.
Field yang disarankan:
idwebhook_event_idforwarding_target_idrequest_jsonresponse_jsonstatusattempt_nocreated_atupdated_at
Menyimpan request refund dan hasilnya.
Field yang disarankan:
idpayment_intent_idprovider_idamountstatusrequest_jsonresponse_jsonprovider_referencecreated_atupdated_at
Menyimpan jejak aktivitas penting.
Field yang disarankan:
idactor_typeactor_idactiontarget_typetarget_iddetail_jsoncreated_at
Semua payload penting disimpan apa adanya:
- outbound request
- inbound response
- inbound webhook
- headers webhook
- metadata tambahan
Tujuan:
- debug lebih cepat
- replay event lebih mudah
- audit lebih jelas
- migrasi provider lebih aman
payment_intents.external_refprovider_accounts.provider_id + provider_accounts.environmentpayment_attempts.payment_intent_idpayment_attempts.provider_referencepayment_status_checks.payment_intent_idpayment_status_checks.provider_referencewebhook_events.provider_event_idwebhook_events.event_typewebhook_forwarding_targets.provider_idwebhook_forwarding_attempts.webhook_event_idrefunds.payment_intent_id