Setiap hari di toko kami melihat meja kas yang berbeda - semua jenis solusi tertanam dengan tombol misterius. Di belakang meja kas seperti itu ada kasir yang berteriak "Galya, kami telah membatalkan." Ini tidak nyaman untuk kasir dan pembeli.
Antarmuka checkout menjadi lebih ramah pengguna dari waktu ke waktu, dan Gali sudah kurang dibutuhkan, tetapi checkout masih tetap merupakan artefak rumit dan kompleks.

Nama saya Vladimir Sarbeev, saya adalah pengembang Android di MySklad. Dan saya yakin bahwa mesin kasir bisa ringkas dan nyaman. Selain itu, Anda dapat mengubah ponsel cerdas Anda menjadi kasir.
Di MyStore, kami telah membuat aplikasi seluler Kassa MyStore. Ini adalah box office lengkap di dalam smartphone.
Kerjanya seperti ini: setelah otorisasi, kasir dapat membuka dan menutup shift, menjual barang secara langsung atau dengan reservasi, memperhitungkan uang tunai. Anda dapat menghubungkan perangkat yang diperlukan untuk bekerja ke Kasir. Mereka ada di foto:

1 - box office Atol Sigma 10; 2 - aplikasi tidak didukung, integrasi dengan karyawan
3 - kantor tiket Atol 11F; 4 - terminal Verifone VX820; 5 - terminal PAX S90
6 - box office Shtrikh-Nano-F; 7 - kantor tiket Atol 15F; 8 - box office Bar-ON-LINE
9 - pemindai barcode; 10 - terminal PayMe; 11 - meja kas MSPOS-K
Smartphone itu sendiri tidak dapat mencetak tanda terima uang tunai dan menerima pembayaran dengan kartu kredit, sehingga meja kas dan terminal pembayaran diperlukan. Pemindai perangkat keras diperlukan jika kamera ponsel cerdas tidak cocok untuk penggantian penuh pemindai kode batang.
Mata yang melihat semuanya
Bahkan sebelum rilis Cash desk MySklad, kami memutuskan bahwa kamera adalah kamera, tetapi pengguna mungkin memiliki pemindai kode batang perangkat keras yang ingin ia gunakan.
Kami dapat bekerja dengan pemindai dalam bentuk HID (perangkat antarmuka manusia) biasa. Setelah membaca barcode, kami mendapatkan urutan karakter dari pemindai. Ini mungkin integrasi yang paling mudah. Yang paling sederhana, jika bukan dua "tetapi".
Pertama, menjadi "out of the box" pemindai mungkin tidak mengirimkan apa pun yang seharusnya. Kedua, tidak semua model pemindai memberi sinyal kepada kami bahwa pembacaan barcode sudah selesai.
"Tetapi" yang pertama diselesaikan dengan sederhana: jika pemindai mulai mengirimkan bukan apa yang seharusnya dipindai, Anda perlu menemukan instruksi untuk pemindai dan mengkonfigurasinya menggunakan barcode layanan. Biasanya, instruksi lengkap di atas kertas atau dalam bentuk elektronik dari pabrikan. Setelah menjelaskan pengaturan yang tersedia, itu berisi barcode yang memindai dalam urutan yang diinginkan. Jadi, Anda dapat mengkonfigurasi pemindai sesuai kebutuhan.
"Tapi" kedua adalah masalah yang lebih serius. Kebun binatang pemindai sangat luas, dan tidak semua perangkat menunjukkan akhir baris baca. Ada dua opsi untuk menyelesaikan masalah ini. Yang pertama adalah menggunakan barcode layanan yang sama untuk mengatur pengaturan yang akan mengirimkan karakter pemisah baris setelah membaca. Jika Anda tidak beruntung dengan model dan opsi pertama tidak cocok, Anda dapat mengatur akhiran pemindai. Menggunakan barcode layanan, tambahkan karakter di akhir urutan baca yang digunakan untuk menangkap input.
Kami menghubungkan meja kas
Jadi, aplikasi ada di sana, pemindai barcode terhubung, tetapi kami masih tidak dapat mencetak cek. Untuk ini kita perlu box office itu sendiri. Di MySklad kami mendukung KKT Atol dan Shtrikh, juga MSPOS, saya akan menceritakannya di artikel lain.
Ketika datang ke integrasi dengan kasir, jumlah kode besi mulai tumbuh tanpa bisa dielakkan. Kami memutuskan untuk menempatkan semua pekerjaan dengan peralatan yang terhubung ke perpustakaan yang terpisah. Aplikasi mesin kasir itu sendiri telah menjadi klien menarik perpustakaan melalui gradle.
Tergantung pada modelnya, Anda dapat terhubung melalui USB, Bluetooth atau Wi-Fi. Dan juga menurut protokol UART, yang merupakan kopling kaku dari mesin kasir dan perangkat Android dalam satu kasus. Juga, vendor yang berbeda secara radikal berbeda dalam implementasi menghubungkan klien ke checkout. Java wrapper di atas pustaka .so asli, add-on di atas pustaka jPOS open source dan bahkan inti fiskal diakses melalui layanan dengan antarmuka AIDL (bahasa definisi antarmuka Android).
Pada upaya pertama untuk mengintegrasikan satu perangkat dari satu produsen, kami puas dengan skema interaksi Perangkat KKM:

Tetapi dengan mempertimbangkan jumlah implementasi driver, metode koneksi dan keseragaman fungsionalitas, kami memutuskan untuk memikirkan kembali bekerja dengan perangkat keras. Akibatnya, skema sebelumnya sampai pada formulir ini:

T adalah pembungkus driver tingkat rendah khusus
Pengelola Perangkat menyembunyikan implementasi koneksi dari klien. Cukuplah untuk membuat wizard koneksi, yang mengharuskan Anda untuk secara berurutan memilih pabrikan kasir, jenis koneksi, dan menentukan pengaturan. Dalam kasus koneksi yang berhasil, ia mengembalikan kepada kita objek yang mengimplementasikan antarmuka KKMDevice.
KKMDevice menyembunyikan detail bekerja dengan driver vendor individu. Wrappers dari masing-masing pabrikan tertentu berisi tautan ke driver T dan delegasi yang mengimplementasikan serangkaian fungsi tertentu. Misalnya, FiscalDelegate, NonFiscalDelegate, DeviceInfoDelegate.
Saya akan mencatat beberapa poin umum integrasi:
- Pastikan untuk tetap mengikuti pembaruan driver. Selain perbaikan bug dan peningkatan kecepatan, lompatan kualitas sering terjadi. Percayalah, transisi dari perintah HEX tingkat rendah ke antarmuka seperti Java, dan dari itu ke tugas json sangat memudahkan pekerjaan dan membuat kode lebih dimengerti.
- Untuk durasi operasi, blokir UI dengan bilah kemajuan. Tanda itu mengatakan bahwa tombol "Bayar" ditekan beberapa kali berturut-turut dengan PKC yang terhubung adalah pertanda kritik dalam pelacak tugas.
- Pastikan semua operasi dengan CCP dilakukan secara berurutan. Perlombaan aliran yang βberhasilβ dapat menghentikan KKT, sementara bilah kemajuan berputar pada saat yang sama juga merupakan aplikasi.
- Jika Anda perlu mengkonfigurasi transfer data ke operator data fiskal, saya menyarankan Anda untuk memilih jumlah maksimum parameter dari daftar yang telah ditentukan. Karena memasukkan data secara manual dengan drive fiskal militer adalah cara yang bagus untuk menembak diri sendiri, tetapi di sisi pengguna saat menggunakan aplikasi.
Drive fiskal adalah perangkat yang mengumpulkan dan memproses informasi tentang operasi perdagangan. Mungkin harganya lebih mahal daripada box office itu sendiri. Jika drive tidak dikonfigurasikan dengan benar, proses zeroing mungkin diperlukan. Untuk melakukan ini, buka box office, segera garansi terbang.
Mengakuisisi
Jadi, kami memiliki antarmuka meja kas, kami dapat memindai barang dengan barcode dan mencetak cek. Tetap menambah kemampuan membayar dengan kartu.
Aplikasi kami mengintegrasikan dukungan untuk terminal PayMe dan Inpas. Yang pertama terhubung melalui Bluetooth, sedangkan yang terakhir dapat dihubungkan melalui USB atau melalui Wi-Fi.
Skema koneksi untuk terminal pembayaran sangat mirip dengan menghubungkan CCP, kecuali diperlukan otorisasi tambahan.
Tetapi ada perbedaan serius - dalam menangani perilaku abnormal perangkat. Jadi di PKC, operasi apa pun berhasil atau tidak. Jika operasi gagal, Anda dapat mencoba lagi atau membatalkannya. Segala sesuatu yang lain terjadi tanpa intervensi.
Dalam hal terminal, perlu untuk memantau kemungkinan gangguan dari proses pembayaran pada setiap langkah. Kartu bank mungkin tidak dipertimbangkan atau akan ada cukup dana pada kartu tersebut. Anda tidak bisa menunggu respons dari bank atau menunggu, tetapi dapatkan kode HTTP 5xx sebagai tanggapan. Dan pada salah satu tahap koneksi mungkin jatuh.
Selain itu, Anda tidak akan dapat merilis aplikasi yang berfungsi dengan baik dengan dukungan terminal Inpas tanpa sertifikasi. Sertifikasi mencakup memeriksa ketersediaan dan operasi yang benar dari semua operasi pengguna terminal dan peristiwa pemrosesan seperti terputusnya jaringan setelah pembeli telah memasang kartu ke terminal.
Saat menguji terminal, Anda harus mempertimbangkan bank atau sistem pembayaran yang dipasangkan dengannya. Dalam beberapa kasus, bahkan dalam mode pengembangan, uang dikembalikan hanya melalui akun pribadi akun, dan tidak secara otomatis.
Anda juga perlu ingat bahwa bank juga mengambil bagian dalam proses pembayaran. Misalnya, tidak adanya slip-cek dapat terjadi jika tidak ada pengaturan yang diperlukan dalam rekening pribadi bank.
Kesimpulan
Menghubungkan berbagai perangkat ke aplikasi Android adalah proses yang rumit namun menarik. Kami berbicara tentang dia secara keseluruhan, untuk menggambarkan semua hambatan, tentu saja, tidak realistis.
Jika Anda memiliki pertanyaan, saya akan dengan senang hati menjawabnya di komentar. Jika pertanyaan diketik dalam artikel terpisah, tulis :)