Third parties
Backend berbicara ke tiga layanan luar. Frontend tidak pernah memanggil mereka langsung. Setiap layanan juga memanggil balik masuk, lewat receiver webhook terpisah.
Cara halaman ini diverifikasi
Dibaca pada 2026-09-15 dari service client backend, index.js repo webhook, dan index.js simulator.
Tiga layanan
| Layanan | Peran | Backend client | Env base-URL | Webhook masuk (backend) |
|---|---|---|---|---|
| Biteship | delivery / shipment | DeliveriesService (src/deliveries/services/deliveries.service.ts) | DELIVERY_BITESHIP_BASE_URL | webhooks/deliveries |
| DOKU | payment | PaymentsService (src/payments/services/payments.service.ts) | DOKU_BASEURL | webhooks/payments |
| PowerBiz (WMS) | warehouse / stock | WmsService (src/catalogs/services/wms.service.ts) | WMS_ENDPOINT_BASE_URL | webhooks/wms |
Ketiganya memakai @nestjs/axios. Detail setiap alur ada di halaman fitur: Delivery, Payment, Stock (WMS).
- Biteship — Bearer
DELIVERY_BITESHIP_API_KEY. Origin diset dariDELIVERY_WAREHOUSE_ZIPCODEdan varDELIVERY_ORIGIN_*. Memanggil/v1/couriers,/v1/rates/couriers,/v1/draft_orders(+/confirm),/v1/trackings/:id. - DOKU —
DOKU_CLIENT_IDdanDOKU_SECRET_KEY, request ditandatangani dengan HMAC-SHA256 (HMACSHA256=<base64>).DOKU_PAYMENT_DUE_DATE_MINUTEmengatur jendela pembayaran. Backend dibuat denganrawBody: truesupaya bisa memverifikasi signature webhook DOKU. - WMS (PowerBiz) — login saat boot (
WMS_USERNAME/WMS_PASSWORD) untuk bearer token dan login ulang saat 401. Di-scope olehWMS_BUSINESS_IDdanWMS_WAREHOUSE_ID. Method: inventory lookup, order detail, create/cancel/update order.
Simulator duduk di depan mereka di dev
Di dev, .env backend mengarahkan ketiga base URL ke https://proxy.exsport.bdt.dev/{biteship,doku,wms}. Proxy itu adalah def-exsport-3rdparty-simulator: ia meneruskan ke API asli dan bisa memaksa error per layanan.
- Route:
/biteship/*→api.biteship.com,/wms/*→open-api.powerbiz.asia,/doku/*→api-sandbox.doku.com(masing-masing bisa di-override oleh env). - Toggle in-memory per layanan, dibalik di
POST /simulate/:service{enable}dan ditampilkan di dashboard EJS diGET /. Saat menyala, endpoint kuncinya mengembalikan HTTP 500: Biteship/v1/draft_orders, WMS/order/create, DOKU panggilan apa pun.
Jadi "payment / delivery / WMS gagal di dev" mungkin cuma berarti simulasi error sedang menyala. Cek dashboard simulator sebelum men-debug backend.
Receiver webhook fan-out ke SNS
Callback masuk tidak mengenai backend langsung di produksi; mereka mengenai def-exsport-webhook, app Express kecil yang menerbitkan ulang setiap payload ke topic SNS:
| Callback | Route | Env topic SNS |
|---|---|---|
| WMS / stock | POST /inventory | SNS_TOPIC_WMS_ARN |
| Biteship | POST /delivery | SNS_TOPIC_DELIVERY_ARN |
| DOKU | POST /payment | SNS_TOPIC_PAYMENT_ARN |
Topic dan subscription SNS didefinisikan di stack webhook Pulumi. Route REST webhooks/* milik backend sendirilah handler yang pada akhirnya memproses event ini (langsung di dev, lewat SNS di prod).