Kami memproses bitcoin. Bagaimana cara mengatur halaman pembayaran B2BinPay?

B2BinPay adalah sistem pembayaran cryptocurrency dengan banyak backend terkait untuk aplikasi, analitik, node, antrian, tetapi hanya satu halaman UI yang dilihat pengguna akhir. Ini memiliki persyaratan tinggi mengenai kemudahan penggunaan. Terlepas dari kesederhanaan halaman, tim pengembang akan tertarik untuk membagikan bagaimana pengaturannya dari dalam.

Untuk memahami proses bisnis, Anda harus masuk ke area subjek. Untuk pembaca yang belum tahu apa itu cryptocurrency, blockchain, dan alamat, kami membuat definisi pendek dan mudah dimengerti di bawah potongan.



Untuk memahami persyaratan, berikut adalah beberapa analogi dengan dunia pembayaran fiat:
Blockchain adalah database terdesentralisasi (dalam kasus ideal) yang menyimpan informasi tentang alamat, transaksi, dan saldo. Ini terdiri dari blok, masing-masing berisi sejumlah informasi. Blok dihasilkan berkat penambang melalui perhitungan intensif energi (PoW) atau proof of stake (PoS). Setiap blok berikutnya berisi daftar transaksi baru dan tautan ke yang sebelumnya. Setiap cryptocurrency memiliki blockchain sendiri.

Pedagang - sama dengan pemilik toko, menyewa sistem pembayaran untuk menerima pembayaran dari pengguna akhir.

Dompet sama dengan akun di dunia keuangan tradisional.

Transaksi - catatan di blockchain bahwa dana dikirim dari satu dompet ke dompet lainnya. Saldo dompet terbentuk dari jumlah transaksi.

Alamatnya sama dengan rincian akun. Perbedaannya adalah bahwa sebagian besar blockchain memungkinkan Anda menghasilkan alamat dengan jumlah tak terbatas untuk satu dompet.

Transaksi yang dikonfirmasi adalah transaksi setelah mana sejumlah blok aman telah dihasilkan. Satu blok sama dengan satu konfirmasi. Jika transaksi belum menerima konfirmasi 4-8, maka itu tidak dianggap selesai.

Sistem pembayaran - perangkat lunak yang menyediakan penerimaan dan pemrosesan pembayaran dalam cryptocurrency. Tautan dan agregat pesanan, pembayaran, transaksi, pengembalian, penambahan, penarikan, dan informasi lainnya. Ini juga menginformasikan sistem pedagang tentang perubahan dalam konteks pesanan dan pembayaran, dan bukan blockchains dan transaksi.

Explorer - layanan atau situs browser untuk data yang memasuki blockchain. Dengan menggunakan layanan ini, Anda dapat dengan mudah mendapatkan informasi tentang alamat, transaksi, dan pemblokiran.

Node adalah komputer tempat salinan seluruh database (blockchain) disimpan.

Skema umum pekerjaan dan persyaratan untuk konten halaman pembayaran


Siklus pembayaran terjadi sebagai berikut: di situs web toko, pembeli memilih produk dan mata uang pembayaran. Sistem mengarahkan pengguna ke halaman pembayaran. Ini berisi informasi berikut: mata uang, alamat, komentar informasi. Pengguna mengirimkan jumlah yang diperlukan ke alamat yang ditentukan dan mengharapkan konfirmasi jaringan dalam jumlah yang cukup agar pembayaran dianggap berhasil. Sambil menunggu, pembeli dapat memantau status pembayaran tanpa meninggalkan halaman di situs web explorer. Setelah pembayaran diterima, pengguna akan diarahkan ke halaman pembayaran yang berhasil di situs web penjual.



Proses pembayaran dibagi menjadi beberapa tahap. Masing-masing tidak memerlukan tindakan pengguna, kecuali untuk transfer uang langsung. Skrip sukses standar:

  1. Di situs web penjual, pengguna memilih metode pembayaran dan mata uang B2BinPay
  2. IP penjual mengirimkan permintaan untuk membuat pesanan pembayaran baru, menerima tautan ke halaman pembayaran sebagai tanggapan
  3. Pengguna mengalihkan ke halaman pembayaran, yang berisi informasi: mata uang, jumlah, alamat, dan bidang tambahan, jika perlu
  4. Pengguna membayar untuk pembelian
  5. Sistem mendeteksi bahwa transaksi baru telah tiba di alamat dan halaman masuk ke status pelacakan
  6. Status transaksi dimonitor dan informasi diperbarui pada halaman sampai sejumlah konfirmasi yang aman tercapai.
  7. Pengguna diarahkan ke halaman pembayaran yang berhasil di situs web penjual

Dengan demikian, halaman pembayaran dapat di dua negara: melihat detail dan menunggu konfirmasi. Saat melihat detail, Anda dapat memasukkan alamat dengan dua cara: memindai kode QR atau menyalin alamat dalam bentuk teks. Selain informasi dasar, kami akan menambahkan instruksi mini dalam bentuk teks, yang akan memberi tahu Anda cara membayar, tempat mengunduh aplikasi dompet dan cara membeli mata uang. Selain bidang-bidang ini, ada satu lagi, keberadaannya tergantung pada mata uang yang dipilih. Terkadang, untuk membandingkan transaksi, pesanan pembayaran, dan pembeli dengan benar, perlu mengetahui tidak hanya alamatnya, tetapi juga informasi tambahan. Misalnya, untuk mata uang Ripple, saat mengirim, Anda harus menentukan tag tujuan (komentar transaksi).

Bagi mereka yang menyalin alamat dalam bentuk teks, dan tidak memindai kode QR, tombol salin telah ditambahkan. Juga, logo koin harus ada pada halaman, karena banyak orang mengidentifikasi mata uang secara visual, dengan bentuk dan skema warna dari logo, dan bukan oleh penunjukan huruf.

Perubahan status terjadi saat transaksi masuk ke alamat penagihan terdeteksi. Pada saat ini, detailnya hilang, karena tidak diperlukan lagi; pengguna masuk ke mode siaga, dan halaman membutuhkan aliran informasi konstan tentang status transaksi. Sekarang pada halaman Anda dapat menemukan: batas waktu hingga transaksi selesai, jumlah konfirmasi saat ini, komentar singkat yang menjelaskan tindakan lebih lanjut.

Halaman tersebut harus mudah dipahami, intuitif, dan sekaligus cukup informatif. Untuk pembeli berpengalaman, penekanan harus diberikan pada alamat dan jumlah.

Dari persyaratan di atas, tata letak untuk halaman selanjutnya diperoleh.



Backend


Opsi pertama untuk mengimplementasikan backend adalah melakukannya tanpa itu! Saat menghasilkan halaman pembayaran, diketahui di muka ke alamat mana uang akan dikirim. Anda dapat menerima transaksi baru di alamat ini dari penjelajah menggunakan alat JS. Dengan demikian, tugasnya adalah untuk menulis konektor ke explorer dan secara berkala menginterogasi yang diperlukan. Diagram kelas statis mungkin terlihat seperti ini:



Pro: tidak ada beban pada kapasitas kami, mudah diimplementasikan, tidak ada ancaman keamanan potensial.

Cons: sumber tidak dapat diandalkan dan penerimaan informasi baru sebelum waktunya, kesulitan dalam memberikan pembaruan basis kode kepada pelanggan akhir (caching yang tidak terkontrol). Kurang tegas - banyak mata uang tidak memiliki penjelajah stabil dengan API yang dikembangkan.

Opsi kedua (berfungsi) adalah microservice-nya sendiri, yang menerima informasi langsung dari kumpulan node, memfilter dan mendistribusikannya di seluruh halaman pembayaran. Menggunakan Acara Sisi Server pada klien akan mengurangi redundansi dan menghemat lalu lintas. SSE cocok dengan use case, karena halaman itu pasif dalam perilakunya - SSE hanya menerima informasi baru.

Cons: banyak biaya implementasi, beban tambahan pada peralatan.

Kelebihan: keandalan dan independensi tingkat tinggi dari layanan pihak ketiga; Konteks pesanan, bukan transaksi.
Diagram sirkuit:



Ketika halaman pembayaran terbuka di browser pelanggan, permintaan untuk membuat koneksi SSE dikirim ke backend asinkron dari layanan microser. Permintaan menunjukkan alamat yang akan dilacak, jumlah pembayaran, masa pakai dan parameter kecil lainnya. Di backend, ini disimpan dalam penyimpanan noSQL di dalam memori. Setiap kali blok baru muncul pada node blockchain apa pun, aplikasi menerima dan mengekstrak informasi yang berguna darinya di alamat dan transaksi yang disimpan dalam database. Jika blok berikutnya bermanfaat, maka pembaruan dikirim ke klien. Koneksi ditutup atas inisiatif server ketika konfirmasi yang cukup diterima atau TTL telah kedaluwarsa.

Dengan demikian, backend melakukan operasi intensif sumber daya dan mengarahkan lalu lintas hanya ketika informasi baru tiba di node, dan tidak ada "interogasi" berkala untuk informasi baru. Berkat asynchrony, kami mendapatkan kecepatan tinggi dengan ribuan koneksi simultan.

Mengetahui bahwa untuk koin dengan PoW, keterlambatan dalam menerima informasi baru dalam sedetik dapat diabaikan, penskalaan horizontal minimum dari sistem tersebut akan memberikan peningkatan besar dalam throughput. Pada hari-hari yang sangat aktif, seperti Black Friday, beban meningkat. Jika sistem gagal atau secara teknis tidak berfungsi, maka klien memiliki status mundur di mana halaman tetap dalam mode tampilan rincian selamanya. Untuk koin PoS, langkah pemantauan jumlah konfirmasi dapat dilewati, karena kecepatan transaksi seringkali dari 2 hingga 5 detik.

Opsi ketiga untuk implementasi backend adalah hybrid, ketika tergantung pada kecepatan transaksi blockchain dan informasi tentang ketersediaan layanan pihak ketiga saat ini, baik interaksi SSE atau HTTP dengan penjelajah digunakan. Ini adalah yang paling efektif dan memakan waktu pada saat bersamaan.

Teknologi front-end yang cocok untuk tugas ini adalah vue.js dengan rendering deklaratif dan kemampuan untuk membuat beberapa status komponen. Ini adalah perpustakaan ringan dengan struktur ramping dan modifikasi DOM reaktif. Sumber data adalah koneksi SSE yang terbuka ketika komponen diinisialisasi.

Desain




Kami mengembangkan produk dan membuatnya berkualitas tinggi dan dapat diandalkan untuk membuat pembayaran blockchain nyaman, besar dan terjangkau. Kami tidak hanya mencintai uang, tetapi juga teknologi paling canggih, tugas kompleks, dan solusi elegan.

Dalam mengembangkan sistem pembayaran B2BinPay, kami secara teratur menyelesaikan masalah yang, meskipun sederhana, membutuhkan pendekatan non-standar atau tampilan baru. Kami akan berterima kasih atas umpan balik, komentar dan saran. Jika Anda ingin membawa gagasan baru dan berani ke layanan pembayaran yang digunakan di seluruh dunia, lihat lowongan saat ini .

Source: https://habr.com/ru/post/id447418/


All Articles