Skip to content

Domain, hosting, code and data — in your name, in writing

jagaweb.

WooCommerce & Pembayaran Malaysia

Senarai Semak Integrasi Get Laluan Pembayaran: Apa yang Perlu Disahkan Sebelum Live

Bacaan 11 minitOleh JagaWeb

Apa yang perlu disahkan dalam integrasi get laluan pembayaran: idempotensi webhook, keciciran pelayar, pemadanan rekod, bayaran balik dan skop PCI.

"Ia berfungsi semasa saya uji" tidak sama dengan "ia berfungsi"

Integrasi get laluan pembayaran boleh lulus ujian manual pembangun sendiri, masukkan kad ujian, klik bayar, lihat halaman berjaya, dan masih gagal dalam pengeluaran, kerana hampir tiada satu pun mod kegagalan yang penting terserlah apabila seorang sahaja mengklik "bayar" sekali, pada sambungan pantas, tanpa menutup tab. Apa yang sebenarnya berlaku salah ialah apa yang terjadi apabila panggilan rangkaian tamat masa (timeout), apabila pemberitahuan yang sama tiba dua kali, apabila pelanggan menutup komputer riba mereka semasa pembayaran, atau apabila seseorang di bahagian kewangan cuba memadankan apa yang dikatakan laman itu telah dibayar dengan apa yang sebenarnya diselesaikan oleh get laluan. Berikut ialah senarai semak apa yang perlu disahkan sebelum, dan selepas, sesuatu get laluan menjadi live — ditulis cukup umum untuk mana-mana get laluan yang dipilih peniaga Malaysia, kerana mod kegagalan asas berulang merentasi penyedia walaupun butiran API berbeza.

Sandbox dan live bukan sekadar suis togol

Setiap get laluan mengasingkan kelayakan ujian (sandbox) daripada kelayakan live, dan perkara pertama yang berbaloi disahkan sebelum pelancaran ialah kedua-duanya tidak tercampur: tiada kunci rahsia live yang tertinggal dalam persekitaran staging di mana binaan ujian boleh memproses kad sebenar, dan tiada kunci sandbox masih disambungkan ke pengeluaran selepas go-live, yang biasanya gagal dengan jelas tetapi kadangkala gagal secara senyap jika konfigurasi cache mengekalkan nilai lama. Kunci rahsia patut berada dalam pembolehubah persekitaran (environment variables), tidak sesekali di-commit terus ke dalam kod sumber atau dikodkan keras dalam fail konfigurasi yang berakhir dalam kawalan versi. Kunci rahsia live yang bocor ialah laluan terus kepada caj tidak dibenarkan muncul dalam akaun anda, dan menggantikannya selepas apa-apa syak kebocoran, bukan hanya selepas pelancaran, patut menjadi langkah yang ditetapkan dan dilatih.

Webhook: sebab peristiwa yang sama boleh sah-sah tiba dua kali

Webhook ialah get laluan memanggil pelayan anda terus, secara berasingan daripada pelayar pelanggan, untuk memberitahu anda sesuatu telah berlaku: pembayaran berjaya, bayaran balik dikeluarkan, pertikaian dibuka. Perkara kritikal yang perlu direka bentuk di sekelilingnya ialah sistem webhook setiap penyedia utama dibina atas dasar penghantaran "sekurang-kurangnya sekali" (at least once), bukan "tepat sekali" (exactly once). Dokumentasi Stripe sendiri menyatakan ini secara langsung: penghantaran webhook yang gagal dicuba semula dengan susutan eksponen (exponential backoff) sehingga tiga hari dalam mod live, dan peristiwa tidak dijamin tiba mengikut susunan ia dijana, jadi pengendali (handler) patut menjejaki ID peristiwa untuk mengesan pendua berbanding menganggap setiap peristiwa tiba tepat sekali. Get laluan Malaysia mendokumenkan realiti yang sama. Dokumentasi Curlec (Razorpay) menyatakan dengan jelas bahawa "terdapat senario di mana titik akhir anda mungkin menerima peristiwa webhook yang sama berkali-kali. Ini tingkah laku yang dijangka," dan mengarahkan peniaga untuk menyahduakan (deduplicate) menggunakan pengepala ID peristiwa unik yang dihantar bersama setiap webhook. Panduan integrasi Billplz sendiri menerangkan isu berkaitan: pemberitahuan callback (pelayan-ke-pelayan) dan redirect (pelayar) mencetus tanpa susunan tetap antara satu sama lain, dan dokumentasinya menyatakan secara langsung bahawa "sistem anda mesti mengendalikan kedua-duanya secara berasingan dan mencegah kemas kini pendua."

Secara konkrit, pendua berlaku atas sebab remeh: pelayan anda menerima webhook itu dan mula memprosesnya, tetapi gangguan rangkaian atau pelayan yang dimulakan semula pertengahan permintaan semasa deploy bermakna ia tidak sempat menghantar balik respons berjaya, jadi get laluan, tanpa cara mengetahui peristiwa itu telah dikendalikan, mencuba semula; atau seseorang menghantar semula peristiwa secara manual daripada papan pemuka semasa menyahpepijat sesuatu yang tidak berkaitan. Jika pengendali webhook tidak idempoten, jika ia tidak dapat mengenali "saya sudah proses peristiwa tepat ini" dan langkau melakukannya semula, penghantaran kedua bagi peristiwa "pembayaran berjaya" yang sama boleh menandakan pesanan yang sudah dipenuhi sebagai dibayar buat kali kedua, mencetuskan e-mel pengesahan pendua, mengurangkan stok dua kali, atau mengenakan kredit kesetiaan dua kali. Penyelesaiannya berstruktur, bukan bijak-bijak: simpan ID peristiwa pada kali pertama anda melihatnya, dan semak ID itu sebelum bertindak atas mana-mana webhook, supaya penghantaran berulang dikenali dan diabaikan dengan selamat berbanding diproses semula.

Apa yang sebenarnya berlaku apabila pelanggan menutup pelayar pertengahan pembayaran

Di sinilah bergantung semata-mata pada redirect pelayar pelanggan untuk menentukan sama ada pesanan dibayar, runtuh. Jika pelanggan melengkapkan pembayaran pada halaman get laluan sendiri, bank atau pengeluar kad mereka mengesahkan caj itu, tetapi menutup tab sebelum diarah semula kembali ke laman anda, pembayaran itu masih boleh benar-benar berjaya walaupun laman anda tidak pernah melihat halaman "terima kasih" tercetus. Bergantung semata-mata pada redirect itu untuk menandakan pesanan dibayar bermakna pembayaran sebenar dan berjaya boleh tertinggal tanpa rekod dalam sistem anda sendiri untuk tempoh yang tidak terhad. Inilah tepatnya sebab webhook, pemberitahuan pelayan-ke-pelayan berasingan yang tidak bergantung pada pelayar masih terbuka, ialah sumber kebenaran yang boleh dipercayai sama ada pesanan itu benar-benar dibayar — redirect itu kemudahan untuk pengalaman pelanggan, bukan pencetus yang menentukan sama ada pesanan itu dipenuhi.

Pemadanan rekod: rekod anda sendiri berbanding papan pemuka get laluan sendiri

Walau sebaik mana pengendalian webhook, berbaloi menyemak secara berkala rekod pesanan anda sendiri berbanding papan pemuka atau laporan penyelesaian get laluan secara langsung, kerana kedua-duanya boleh terjauh atas sebab yang tiada kaitan dengan pepijat pengekodan: titik akhir webhook yang down seketika semasa deploy, perubahan firewall yang senyap-senyap menyekat permintaan masuk, atau turutan cuba semula yang akhirnya berhenti. Dua percanggahan khusus berbaloi diperhatikan: pesanan yang ditandakan "dibayar" dalam sistem anda sendiri tanpa transaksi sepadan dalam get laluan, berbaloi disiasat sebagai pepijat atau percubaan penipuan, dan transaksi berjaya dalam get laluan tanpa pesanan sepadan dalam sistem anda — biasanya webhook yang terlepas, dan jurang hasil atau pemenuhan senyap jika tidak disedari.

Bayaran balik ialah aliran berasingan, bukan caj yang diterbalikkan

Mengeluarkan bayaran balik melalui papan pemuka atau API get laluan tidak secara automatik mengemas kini status pesanan, inventori, atau rekod perakaunan anda sendiri; kemas kini itu perlu dikendalikan secara eksplisit, biasanya dengan mendengar peristiwa bayaran balik get laluan sendiri sama cara peristiwa pembayaran berjaya dikendalikan. Berbaloi juga disahkan, untuk mana-mana get laluan dan kaedah pembayaran yang digunakan, berapa lama bayaran balik mengambil masa untuk sampai kepada pelanggan pada praktiknya — ia sangat kerap tidak segera walaupun pembayaran asal segera, dan menetapkan jangkaan itu terlebih dahulu mengelakkan tiket sokongan bertanya ke mana wang itu pergi.

Mata wang dan pembundaran

Jika sesebuah kedai mengira jumlah di satu tempat, jumlah troli yang dikira dalam kod anda sendiri, dan get laluan mengira atau memaparkannya di tempat lain, halaman checkoutnya, atau mata wang yang ditukar, perbezaan pembundaran kecil antara kedua-duanya, satu sen di sana-sini daripada aritmetik titik terapung, atau penukaran yang digunakan pada kadar atau saat yang sedikit berbeza, boleh menyebabkan jumlah pesanan anda dan jumlah yang benar-benar dicaj berbeza sedikit sen. Itu jarang membawa bencana bersendirian, tetapi ia tepat jenis percanggahan kecil dan senyap yang menyukarkan pemadanan rekod dan senyap-senyap menghakis kepercayaan tentang sama ada "dibayar" bermaksud apa yang dikatakan sistem anda. Di mana kedai menyokong lebih daripada satu mata wang, berbaloi jelas tentang mata wang mana yang benar-benar dicaj kepada pelanggan, dan pada titik mana kadar pertukaran dikunci, berbanding membiarkannya tersirat.

Skop PCI: checkout dihoskan berbanding mengendalikan medan kad sendiri

Berapa banyak beban pematuhan Payment Card Industry Data Security Standard (PCI DSS) yang ditanggung peniaga sangat bergantung kepada bagaimana data kad bergerak secara fizikal melalui integrasi itu, bukan get laluan mana yang dipilih. Soalan Lazim (FAQ) PCI Security Standards Council sendiri menetapkan garis pemisah: peniaga layak untuk soal selidik penilaian kendiri paling ringkas, SAQ A, hanya di mana keseluruhan halaman pembayaran yang disampaikan kepada pelayar pelanggan datang terus daripada pihak ketiga yang disahkan PCI DSS — halaman checkout yang dihoskan sepenuhnya, atau iframe di mana tiada skrip dikawal peniaga berjalan pada halaman itu. Sebaik sahaja mana-mana bahagian borang pembayaran dibina atau diskrip oleh laman peniaga sendiri, medan kad yang dipaparkan terus pada halaman anda, walaupun satu yang menghantar terus kepada pemproses, kelayakan itu berubah dan soal selidik yang lebih menuntut terpakai, kerana Council menganggap skrip dikawal peniaga pada halaman pembayaran sebagai risiko yang berbeza secara material daripada satu yang dilesap sepenuhnya. Pada praktiknya, ini sebab kukuh dan konkrit untuk menggunakan checkout dihoskan get laluan atau iframe yang diasingkan dengan betul berbanding membina medan kad tersendiri, melainkan terdapat sebab khusus dan difahami dengan baik untuk menanggung skop pematuhan yang lebih besar.

Sebelum anda tekan suis kepada live

Tiada satu pun ini luar biasa; ia perbezaan biasa antara integrasi yang diuji sekali oleh pembangun dan satu yang disemak berbanding cara pembayaran sebenarnya berkelakuan buruk dalam pengeluaran: webhook pendua, sesi ditinggalkan, percanggahan antara rekod anda dan get laluan, serta bayaran balik dan mata wang yang tidak berpadan secara automatik. Jika anda mahukan pemeriksaan teknikal bebas bagi integrasi pembayaran sebelum atau selepas ia live, itu berada dalam skop Semakan Sistem Penting JagaWeb (RM1,500, dikurangkan kepada RM999 sehingga 16 September 2026, tidak termasuk SST) — satu pilihan antara beberapa; jika apa yang sebenarnya diperlukan ialah integrasi tersendiri penuh dibina dari awal, Projek Skop Tetap (bermula RM30,000) titik permulaan yang lebih tepat.

WhatsApp