Comment transformer un smartphone en caisse à part entière

Chaque jour, dans les magasins, nous voyons différentes caisses - toutes sortes de solutions intégrées avec des boutons mystérieux. Derrière ces caisses se trouvent des caissiers qui crient «Galya, nous avons annulé». Ceci est gênant pour les caissiers et les acheteurs.


L'interface de paiement devient plus conviviale au fil du temps, et Gali est déjà moins nécessaire, mais le paiement est toujours un artefact lourd et complexe.



Je m'appelle Vladimir Sarbeev, je suis développeur Android sur MySklad. Et je suis sûr que la caisse enregistreuse peut être compacte et pratique. De plus, vous pouvez transformer votre smartphone en caissier.


Dans MyStore, nous avons créé l'application mobile Kassa MyStore. Il s'agit d'un box-office complet à l'intérieur du smartphone.


Cela fonctionne comme ceci: après autorisation, le caissier peut ouvrir et fermer des quarts, vendre des marchandises directement ou sur réservation, prendre en compte les espèces. Vous pouvez connecter les appareils requis pour travailler à la caisse. Ils sont sur la photo:



1 - billetterie Atol Sigma 10; 2 - l'application n'est pas prise en charge, intégration avec les employés
3 - billetterie Atol 11F; 4 - borne Verifone VX820; 5 - borne PAX S90
6 - billetterie Shtrikh-Nano-F; 7 - billetterie Atol 15F; 8 - billetterie Bar-ON-LINE
9 - scanner de codes à barres; 10 - Terminal PayMe; 11 - caisse MSPOS-K


Le smartphone lui-même ne peut pas imprimer les reçus de caisse et accepter le paiement par carte de crédit, donc des caisses et des terminaux de paiement sont nécessaires. Un scanner matériel est nécessaire si l'appareil photo du smartphone ne convient pas pour un remplacement complet du scanner de codes-barres.


Oeil qui voit tout


Même avant la sortie de la caisse MySklad, nous avons décidé que la caméra était une caméra, mais l'utilisateur peut avoir un scanner de code-barres matériel qu'il souhaite utiliser.


Nous pouvons travailler avec des scanners sous la forme d'un HID ordinaire (dispositif d'interface humaine). Après avoir lu le code-barres, nous obtenons une séquence de caractères du scanner. Il s'agit peut-être de l'intégration la plus simple. Le plus simple, sinon deux «mais».


Premièrement, étant «prêt à l'emploi», un scanner peut ne pas transmettre du tout ce qu'il devrait. Deuxièmement, tous les modèles de scanner ne nous signalent pas que la lecture du code-barres est terminée.


Le premier «mais» est résolu simplement: si le scanner commence à transmettre ce qu'il ne doit pas scanner, vous devez trouver les instructions du scanner et le configurer à l'aide des codes-barres de service. En règle générale, les instructions sont complètes sur papier ou sous forme électronique auprès du fabricant. Après avoir décrit les paramètres disponibles, il contient des codes-barres qui scannent dans la séquence souhaitée. Vous pouvez donc configurer le scanner selon vos besoins.


Le deuxième «mais» est un problème plus grave. Le zoo des scanners est vaste et tous les appareils ne montrent pas la fin d'une ligne de lecture. Il existe deux options pour résoudre ce problème. La première consiste à utiliser les mêmes codes-barres de service pour définir un paramètre qui transmettra le caractère de saut de ligne après la lecture. Si vous n'êtes pas chanceux avec le modèle et que la première option ne convient pas, vous pouvez définir le suffixe du scanner. À l'aide des codes-barres de service, ajoutez un caractère à la fin de la séquence de lecture pour attraper la fin de l'entrée.


Nous connectons la caisse


Donc, l'application est là, le scanner de codes-barres est connecté, mais nous ne pouvons toujours pas imprimer le chèque. Pour cela, nous avons besoin du box-office lui-même. Dans MySklad, nous soutenons KKT Atol et Shtrikh, également MSPOS, je vais en parler dans un autre article.


En ce qui concerne l'intégration avec le caissier, la quantité de code de fer a commencé à croître inexorablement. Nous avons décidé de mettre tout le travail avec l'équipement connecté dans une bibliothèque séparée. L'application de caisse enregistreuse elle-même est devenue un client tirant une bibliothèque à travers gradle.


Selon le modèle, vous pouvez vous connecter via USB, Bluetooth ou Wi-Fi. Et aussi selon le protocole UART, qui est un couplage rigide de la caisse enregistreuse et d'un appareil Android dans un cas. En outre, différents fournisseurs diffèrent radicalement dans la mise en œuvre de la connexion du client à la caisse. Wrapper Java au-dessus des bibliothèques natives .so, un module complémentaire sur la bibliothèque open source jPOS et même le noyau fiscal accessible via un service avec une interface AIDL (langage de définition d'interface Android).


Lors des premières tentatives d'intégration d'un appareil d'un fabricant, nous étions satisfaits du schéma d'interaction de l'appareil KKM:



Mais en tenant compte du nombre d'implémentations de pilotes, des méthodes de connexion et de l'uniformité des fonctionnalités, nous avons décidé de repenser le travail avec le matériel. En conséquence, le schéma précédent a pris la forme suivante:



T est un wrapper de pilote de bas niveau spécifique


Le Gestionnaire de périphériques masque l'implémentation de la connexion au client. Il suffit de créer un assistant de connexion, qui vous obligera à sélectionner systématiquement le fabricant du caissier, le type de connexion et à configurer les paramètres. Dans le cas d'une connexion réussie, il nous renvoie un objet qui implémente l'interface KKMDevice.


KKMDevice masque les détails de l'utilisation d'un pilote de fournisseur individuel. Les wrappers de chaque fabricant spécifique contiennent un lien vers le pilote T et des délégués qui implémentent certains ensembles de fonctions. Par exemple, FiscalDelegate, NonFiscalDelegate, DeviceInfoDelegate.


Je noterai quelques points généraux d'intégration:


  • Assurez-vous de rester à l'écoute pour les mises à jour du pilote. En plus des corrections de bugs et de la vitesse accrue, des sauts de qualité se produisent souvent. Croyez-moi, la transition des commandes HEX de bas niveau à une interface de type Java, et de celle-ci aux tâches json, facilite grandement le travail et rend le code plus compréhensible.
  • Pendant la durée des opérations, bloquez l'interface utilisateur avec une barre de progression. Le panneau indique que le bouton "Payer" appuyé plusieurs fois de suite avec un CCP connecté est un signe avant-coureur de critiques dans le traqueur de tâches.
  • Assurez-vous que toutes les opérations avec CCP sont effectuées de manière strictement séquentielle. Une course de flux «réussie» peut bloquer le KKT, tandis que la barre de progression qui tourne en même temps est également une application.
  • Si vous devez configurer le transfert de données vers l'opérateur de données fiscales, je vous conseille de sélectionner le nombre maximum de paramètres dans une liste prédéfinie. Parce que la saisie manuelle de données avec une impulsion fiscale militaire est un excellent moyen de se tirer une balle dans le pied, mais du côté de l'utilisateur lors de l'utilisation de l'application.

Une impulsion fiscale est un appareil qui collecte et traite des informations sur les opérations de trading. Cela peut coûter plus cher que le box-office lui-même. Si le lecteur n'est pas configuré correctement, la mise à zéro du processus peut être requise. Pour ce faire, ouvrez la billetterie, immédiatement la garantie s'envole.


Acquérir


Donc, nous avons l'interface de caisse, nous pouvons scanner les marchandises par code à barres et imprimer le chèque. Reste à ajouter la possibilité de payer par carte.


Notre application intègre la prise en charge des terminaux PayMe et Inpas. Les premiers sont connectés via Bluetooth, tandis que les seconds peuvent être connectés via USB ou via Wi-Fi.


Le schéma de connexion des terminaux de paiement est très similaire à la connexion d'un CCP, sauf autorisation supplémentaire requise.


Mais il existe de sérieuses différences - dans la gestion du comportement anormal de l'appareil. Ainsi, dans le PCC, toute opération a réussi ou non. Si l'opération a échoué, vous pouvez réessayer ou l'annuler. Tout le reste se passe sans intervention.


Dans le cas des terminaux, il est nécessaire de surveiller les éventuelles interruptions du processus de paiement à n'importe quelle étape. Une carte bancaire peut ne pas être prise en compte ou les fonds seront insuffisants sur la carte. Vous ne pouvez pas attendre une réponse de la banque ou attendre, mais obtenez un code HTTP 5xx en réponse. Et à n'importe quelle étape, la connexion peut simplement tomber.


De plus, vous ne pourrez pas publier une application fonctionnant correctement avec le support du terminal Inpas sans certification. La certification comprend la vérification de la disponibilité et du bon fonctionnement de toutes les opérations utilisateur du terminal et le traitement des événements tels que la déconnexion du réseau après que l'acheteur a déjà attaché une carte au terminal.


Lors du test du terminal, vous devez tenir compte de la banque ou du système de paiement auquel il est associé. Dans certains cas, même en mode développement, l'argent est remboursé uniquement via le compte personnel du compte et non automatiquement.


Vous devez également vous rappeler que la banque participe également au processus de paiement. Par exemple, l'absence d'un bordereau peut se produire s'il n'y a pas de paramétrage nécessaire dans le compte personnel de la banque.


Conclusion


La connexion de divers appareils à une application Android est un processus compliqué mais intéressant. Nous avons parlé de lui dans son ensemble, pour décrire tous les obstacles, bien sûr, est irréaliste.


Si vous avez des questions, je me ferai un plaisir d'y répondre dans les commentaires. Si les questions sont saisies dans un article séparé, écrivez :)

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


All Articles