Integrasi Payment Gateway

Bagaimana Sejoli Commerce menyiapkan data order untuk payment gateway, dan yang perlu diperhatikan pengembang gateway.

Saat pembeli menekan tombol selesaikan pesanan, Sejoli Commerce membuat parent order yang menyimpan seluruh nilai transaksi — order inilah yang dibaca payment gateway untuk membuat tagihan/invoice. Halaman ini merangkum bagaimana data disiapkan dan kontrak yang perlu diperhatikan pengembang gateway.

Nilai yang Dikirim ke Gateway

Jumlah yang ditagih selalu berasal dari grand_total parent order — sudah mencakup:

  • Total produk setelah kupon.
  • Ongkir per paket asal, dikurangi Diskon Pengiriman bila kupon gratis ongkir berlaku.
  • Diskon Bundle bila keranjang cocok dengan definisi bundle yang berlaku.
  • Biaya COD, penyesuaian pembayaran, PPN, dan kode unik (untuk gateway manual/mutasi).

Rincian Item (Item Details)

Gateway yang mengirimkan daftar item ke API-nya (Tripay, Duitku, dan sejenisnya) memperoleh item dari snapshot keranjang Commerce — bukan dari field produk native Sejoli. Ini penting karena:

  • Produk container tidak pernah ikut sebagai item tagihan (sebelumnya menyebabkan error pada kasus tertentu).
  • Item fisik dan digital dari beberapa origin tetap rapi dalam satu daftar.

Filter untuk Pengembang

FilterFungsi
sejoli/payment/duitku/item-detailsMengubah daftar item yang dikirim ke Duitku. Menerima daftar item siap pakai dari builder Commerce (lihat di bawah); ubah hanya bila perlu penyesuaian khusus.

Mengambil Rincian Item & Nominal (API)

Jangan merakit item sendiri dari produk dan order — Commerce menyediakan array siap pakai:

php
$lines = Sejoli_Commerce_Orders::get_payment_item_details( $order, $payment_amount );

$order adalah baris order dari sejolisa_get_order(); $payment_amount adalah nominal yang akan ditagih. Hasilnya array baris siap kirim:

php
[
    [ 'name' => 'Kaos Premium Katun × M', 'quantity' => 1, 'price' => 119000 ],
    [ 'name' => 'Mug Kopi × 2',           'quantity' => 1, 'price' => 170000 ],
    [ 'name' => 'Ongkos Kirim',           'quantity' => 1, 'price' => 29000 ],
    [ 'name' => 'Biaya COD',              'quantity' => 1, 'price' => 5000 ],
    [ 'name' => 'Biaya Layanan Pembayaran', 'quantity' => 1, 'price' => 307 ],
    [ 'name' => 'Penyesuaian',            'quantity' => 1, 'price' => 1000 ],
]

Yang otomatis ditangani builder:

  • Item dari snapshot keranjang (nama + varian; qty digabung ke nama, total baris sebagai harga) — produk container tidak ikut.
  • Ongkos Kirim bersih — ongkir dikurangi Diskon Pengiriman (gratis ongkir → baris hilang).
  • Biaya COD dan biaya layanan pembayaran.
  • Rekonsiliasi terhadap nominal: selisih positif (pembulatan) menjadi baris Penyesuaian; selisih negatif (mis. wallet menutup sebagian, atau Diskon Bundle) dikurangkan dari baris termahal — tidak ada harga negatif.

Alur Pembayaran

  1. Checkout selesai → parent order dibuat dengan status menunggu pembayaran.
  2. Gateway membaca grand_total order untuk membuat tagihan (atau menampilkan instruksi transfer + kode unik).
  3. Konfirmasi pembayaran masuk → status order bergerak sesuai gateway, akses produk digital dibuka, fisik diproses fulfillment.

Last updated Oct 9, 2026