Guava Pay

iOS, Android
Август 2021 - Март 2022

Guava Pay is a company that develops a unified payment system based on the latest technologies.

We worked on creating an application for card payments for PAX A50, A920, and Verifone Carbon Mobile 5 terminals based on Android, as well as mobile applications for Android and iOS platforms.

All terminals use online cash registers that are under the responsibility of banks.This means that there is special integrated software, and there is no separate payment system for Android and iOS. We needed a card reader with the necessary codebase that could be loaded onto Android and iOS to perform all necessary financial transactions.

The project involved the complete development cycle from pre-project research to support inopen operation. The first stage was a comprehensive project design. After that,we worked on the design. In parallel with the design, backend development was carried out. Then we worked directly with the frontend and mobile operating systems. We integrated with the BPC payment processing system to conduct card transactions based on the ISO 8583 standard. As part of the project, we also underwent certifications from BPC, PA DSS, EMV payment processing.

We used the following stack for development:

- Android – Kotlin
- iOS – Swift
- Backoffice – ReactJS
- Backend - Node.js
- Cache – Redis

What were you doing?

We were integrating with the BPC (Banking Processing Center) as follows:

• First, we would read the customer's card data using PAX and Verifone terminals or enterthem manually.

The PAX terminal turned out to be low-level, which meant that we didn't have ready-madelibraries to work with it. We had to work directly with bank cards, collecting all the data manually.

• Afterthat, we would send the encrypted data to the BPC.

We encountered difficulties with the integration of the BPC. We had to spend time studying encryption and integrating the Bluetooth PIN pad with the iOS application.

The development of the SDK proceeded in two stages.

The first stage involved working with the BPC host, which handles all the banking transactions.

The task was challenging. We had to start from scratch and study the ISO 8583 standard documentation and information about the data exchange process with bank cards.This took a lot of time. We found a solution with the help of BPC's own support, where a specialist explained the connection setup and other nuances.

After that,we implemented the transaction processing with the BPC host. The process looked like this: we would create a command, write the set of data to be sent, and then assemble it into an array of bytes. The array of bytes would be sent tothe host via a socket, and a similar array of bytes would be received inresponse.

During thisprocess, there was an interesting detail regarding data maceration. Essentially, we would collect a hash of encrypted data, sign it with a MAC key, and send it to the server. The server would then perform the reverse operation by parsing the hash into its components, checking the integrity and accuracy of the data.

The second stage was working with the terminal.

Initially, we assumed that the PAX and Verifone terminals would have a high-level integration, but it turned out to be more complicated. For the PAX terminal, we had to implement low-level card handling and do a lot of manual implementation.

Bank cards operate on a data exchange protocol using specific commands. In other words, acommand is sent, and the card returns data. We collected all the data from the card based on the algorithm: the card application with a unique Application ID (MasterCard, Visa, Union Pay, MIR), and the card processing information (necessary for working with the card).

Once we obtained the data, we read the card records extracted from a specific tag on the card, generated the Application Cryptogram, and completed this stage of card reading.

After collecting all the data, we sent a request to the BPC host for processing. It turned out that the host could return necessary scripts that needed to be sent to the card. So, we waited for a response from the host. If there was a response, we sent the scripts to the card; if not, we did nothing.

At some point, we additionally implemented offline PIN code verification for the card using a special command.

Working with the Verifone terminal turned out to be easier. It was a high-levelterminal. It presented a screen for entering the card and PIN code, and it handled the entire data exchange process with the card application on its own, providing all the necessary data for the BPC.

When working with Android, we managed quickly. Card reading is easily done using the NFC chip. Any Android phone with NFC can read a bank card, collect all the necessary data, and send it to the host. However, Android is only suitable for contactless payment. PAX and Verifone terminals work with magnetic stripe and chip transactions, requiring the card to be inserted.

Thus, we have implemented an application for card payment through PAX and Verifone terminals, as well as through mobile applications based on Android and iOS.

The main advantage over standard terminals is that virtually any device with an NFC chip can be turned into a terminal. If necessary, customers can save on purchasing a terminal and instead opt for a simple tablet, where they can install the application. Similar technology has been widespread in European countries and in the United Kingdom for a long time.

Guava Pay – это компания, которая разрабатывает единую платежную систему на основе новейших технологий.

Мы занимались тем, что сделали приложение для оплаты банковскими картами для терминалов PAX A50, A920 и Verifone Carbon Mobile 5 на базе Android, а также мобильные приложения на базе Android и iOS.

Все терминалы пользуются онлайн-кассами, которые находятся под ответственностью банков. То есть существует специальное интегрированное ПО, а отдельной оплаты через Android и iOS нет. Требовался считыватель карт с необходимой кодовой базой, который можно было бы загрузить на Android и iOS и проводить все необходимые финансовые операции.

По проекту был выполнен полный цикл разработки от предпроектного исследования до поддержки в открытой эксплуатации. Первым этапом была полноценная проектировка проекта. После делали дизайн. Параллельно с дизайном шла разработка бекенда. Потом работали непосредственно с фронтом и мобильными операционными системами. Сделали интеграцию с процессингом платежей BPC для проведения карточных транзакций на основе стандарта ISO 8583. В рамках проекта также прошли сертификации процессинга BPC, PA DSS, EMV.

При разработке использовали следующий стэк: 

Android - Kotlin
iOS - Swift
Backoffice - ReactJS 
Backend - Node.js
Кэш - Redis

Что делали? 

Интеграцию с процессингом BPC (банковский процессинговый центр) делали следующим образом:

• сначала считывали данные карты клиента с помощью терминалов PAX и Verifone или вводили их вручную

Терминал PAX оказался низкоуровневым, а это значит, что готовых библиотек для работы с ним у нас не было. Пришлось напрямую работать с банковскими картами, собирая все данные вручную.

• после отправляли данные зашифрованными в BPC

Сложность возникла с интеграцией BPC. Пришлось потратить время на изучение шифрования и интеграцию по Bluetooth пинпада с приложением на iOS. 

Разработка SDK велась в два этапа.

Первый этап – работа с хостом процессинга (BPC хостом), который проводит все банковские транзакции. 

Задача была сложная. Необходимо было с нуля изучить документацию по стандарту ISO 8583 и информацию по процессу обмена данных с банковскими картами. Это заняло много времени. Решение нашлось после подключения к этому вопросу поддержки самого BPC, где специалист объяснил настройку соединения и прочие нюансы.

После этого мы реализовали проведение транзакций с BPC хостом. Выглядело это следующим образом: формируем команду, записываем набор данных, которые нужно отправить, а потом собираем это в массив байт. Массив байт по сокету засылается на хост и в ответ приходит подобный массив байтов. 

В рамках этого процесса была интересная деталь в виде того, что мы занимались макированием данных. По сути, мы собирали хэш шифрованных данных, подписывали их мак-ключом и отправляли на сервер. Соответственно сервер выполнял обратную операцию. Он разбирал хэш на составляющие, проверял сообщение на цельность и точность данных. 

Второй этап – работа с терминалом.

Изначально мы предполагали, что у терминалов PAX и Verifone будет высокоуровневая работа, однако все оказалось сложнее. У PAX пришлось реализовывать низкоуровневую работу с карточками. Потребовалось много ручной реализации.

Банковские карточки работают по протоколу обмена данных с помощью специальных команд. То есть описывается команда, и карточка возвращает данные. С карт мы собрали все данные по алгоритму: из карточного приложения с уникальным идентификатором Application ID  (приложения MasterCard, Visa, Union Pay, МИР), процессинг карты (набор информации, необходимый для работы с картой). 

Получив их, считали записи карточки, которые вынули из определенного тега на карте, сгенерировали Application Cryptogram и закончили на этом этап считывания карты.

После сбора всех данных отправили запрос на BPC хост в процессинг. Как оказалось, хост может вернуть в ответ необходимые скрипты, которые нужно отправить на карточку. Соответственно мы ждали ответ от хоста. Если был ответ – отправляли на карту скрипты, если не было – ничего не делали.

В какой-то момент мы дополнительно реализовали оффлайн проверку пин-кода карты через специальную команду.

С терминалом Verifone все оказалось проще. Он был высокоуровневый. На экране предлагалось ввести карту и пин-код, а весь процесс обмена данных с карточным приложением терминал реализовывал сам, в том числе на выходе отдавал все необходимые данные для BPC.

При работе с Android мы справились быстро. Считывание карт легко происходит с помощью чипа NFC. Любой телефон Android с NFC может считать банковскую карточку, собрать все нужные данные и отправить их на хост. Однако Android подходит только для бесконтактной оплаты. Терминалы PAX и Verifone работают с магнитной полоской, а также с чиповыми транзакциями, когда карту надо вставить.

Таким образом мы реализовали приложение по оплате картой через терминалы PAX и Verifone, а также через мобильные приложения на базе Android и iOS. 

Главное преимущество перед стандартными терминалами в том, что превратить в условный терминал можно практически любое устройство, у которого есть чип NFC. При необходимости клиент может сэкономить на покупке терминала и приобрести простой планшет, куда установит приложение. Подобная технология давно распространена в странах Европы и в Великобритании.

Связаться с нами

Guava Pay

iOS, Android
Август 2021 - Март 2022

Guava Pay is a company that develops a unified payment system based on the latest technologies.

We worked on creating an application for card payments for PAX A50, A920, and Verifone Carbon Mobile 5 terminals based on Android, as well as mobile applications for Android and iOS platforms.

All terminals use online cash registers that are under the responsibility of banks.This means that there is special integrated software, and there is no separate payment system for Android and iOS. We needed a card reader with the necessary codebase that could be loaded onto Android and iOS to perform all necessary financial transactions.

The project involved the complete development cycle from pre-project research to support inopen operation. The first stage was a comprehensive project design. After that,we worked on the design. In parallel with the design, backend development was carried out. Then we worked directly with the frontend and mobile operating systems. We integrated with the BPC payment processing system to conduct card transactions based on the ISO 8583 standard. As part of the project, we also underwent certifications from BPC, PA DSS, EMV payment processing.

We used the following stack for development:

- Android – Kotlin
- iOS – Swift
- Backoffice – ReactJS
- Backend - Node.js
- Cache – Redis

What were you doing?

We were integrating with the BPC (Banking Processing Center) as follows:

• First, we would read the customer's card data using PAX and Verifone terminals or enterthem manually.

The PAX terminal turned out to be low-level, which meant that we didn't have ready-madelibraries to work with it. We had to work directly with bank cards, collecting all the data manually.

• Afterthat, we would send the encrypted data to the BPC.

We encountered difficulties with the integration of the BPC. We had to spend time studying encryption and integrating the Bluetooth PIN pad with the iOS application.

The development of the SDK proceeded in two stages.

The first stage involved working with the BPC host, which handles all the banking transactions.

The task was challenging. We had to start from scratch and study the ISO 8583 standard documentation and information about the data exchange process with bank cards.This took a lot of time. We found a solution with the help of BPC's own support, where a specialist explained the connection setup and other nuances.

After that,we implemented the transaction processing with the BPC host. The process looked like this: we would create a command, write the set of data to be sent, and then assemble it into an array of bytes. The array of bytes would be sent tothe host via a socket, and a similar array of bytes would be received inresponse.

During thisprocess, there was an interesting detail regarding data maceration. Essentially, we would collect a hash of encrypted data, sign it with a MAC key, and send it to the server. The server would then perform the reverse operation by parsing the hash into its components, checking the integrity and accuracy of the data.

The second stage was working with the terminal.

Initially, we assumed that the PAX and Verifone terminals would have a high-level integration, but it turned out to be more complicated. For the PAX terminal, we had to implement low-level card handling and do a lot of manual implementation.

Bank cards operate on a data exchange protocol using specific commands. In other words, acommand is sent, and the card returns data. We collected all the data from the card based on the algorithm: the card application with a unique Application ID (MasterCard, Visa, Union Pay, MIR), and the card processing information (necessary for working with the card).

Once we obtained the data, we read the card records extracted from a specific tag on the card, generated the Application Cryptogram, and completed this stage of card reading.

After collecting all the data, we sent a request to the BPC host for processing. It turned out that the host could return necessary scripts that needed to be sent to the card. So, we waited for a response from the host. If there was a response, we sent the scripts to the card; if not, we did nothing.

At some point, we additionally implemented offline PIN code verification for the card using a special command.

Working with the Verifone terminal turned out to be easier. It was a high-levelterminal. It presented a screen for entering the card and PIN code, and it handled the entire data exchange process with the card application on its own, providing all the necessary data for the BPC.

When working with Android, we managed quickly. Card reading is easily done using the NFC chip. Any Android phone with NFC can read a bank card, collect all the necessary data, and send it to the host. However, Android is only suitable for contactless payment. PAX and Verifone terminals work with magnetic stripe and chip transactions, requiring the card to be inserted.

Thus, we have implemented an application for card payment through PAX and Verifone terminals, as well as through mobile applications based on Android and iOS.

The main advantage over standard terminals is that virtually any device with an NFC chip can be turned into a terminal. If necessary, customers can save on purchasing a terminal and instead opt for a simple tablet, where they can install the application. Similar technology has been widespread in European countries and in the United Kingdom for a long time.

I want the same