README.md
    Node.js integration for aQsi online service

    Note: this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

    - made with ❤︎ by aQsi online.

    Возможности

    •  Взаимодействие с онлайн-кассой по защищенному каналу связи (SSL)
    •  SHA256-RSA подпись сообщений приватным ключом отправителя
    •  Создание чека, соответствующего протоколу aQsi online
    •  Получение статуса ранее отправленного чека
    •  Создание чека коррекции

    Установка

    Для работы с данной библиотекой требуется Node.js версии 8.9.2 (LTS) или выше.

    Используя yarn:

    $ yarn add node-aqsi-online
    

    Используя npm:

    $ npm install --save node-aqsi-online
    

    Использование

    Используйте команду npm test, чтобы запустить выполнение примера в вашей консоли.

    1. Подключите библиотеку в вашем коде:

      const { AqsiOnline, Order } = require('node-aqsi-online');
      
    2. Передайте параметры для установления защищенного соединения в конструктор класса AqsiOnline:

      
      const cert = fs.readFileSync('./keys/client.crt');
      const key = fs.readFileSync('./keys/client.key');
      const passphrase = '1234';
      const ca = fs.readFileSync('./keys/cacert.pem');
      const privateKey = fs.readFileSync('./keys/private_key.pem');
      const apiUrl = 'https://api.aqsi.online:12004/api/v2';
      
      const agent = new AqsiOnline({ apiUrl, cert, key, passphrase, ca, privateKey });
      
    3. Создайте экземпляр класса Order и заполните документ данными соответствующими протоколу:

      const order = new Order({
       id: '123',
       inn: '7725713770',
       group: 'Main',
       type: 1, // Приход
       customerContact: '+79991234567',
       customer: 'покупатель',
       customerINN: '7725713770',
       taxationSystem: 1, // Общая
      });
      
      order
       .addPosition({
          text: 'Тестовый товар',
          quantity: 5,
          price: 10,
          tax: 1,
          paymentMethodType: 1,
          paymentSubjectType: 1,
          nomenclatureCode: 'igQVAAADMTIzNDU2Nzg5MDEyMwAAAQ==',
          supplierINN: '3123011520',
          supplierInfo: { phoneNumbers: ['+79998887766'], name: 'Наименование поставщика' },
       })
       .addPayment({ type: 1, amount: 10 })
       .addPayment({ type: 2, amount: 40 })
       .addAgent({
          agentType: 127,
          paymentTransferOperatorPhoneNumbers: ['+79998887766'],
          paymentAgentOperation: 'Операция агента',
          paymentAgentPhoneNumbers: ['+79998887766'],
          paymentOperatorPhoneNumbers: ['+79998887766'],
          paymentOperatorName: 'Наименование оператора перевода',
          paymentOperatorAddress: 'Адрес оператора перевода',
          paymentOperatorINN: '3123011520',
          supplierPhoneNumbers: ['+79998887766'],
       })
       .addUserAttribute({
          name: 'citation',
          value: 'В здоровом теле здоровый дух, этот лозунг еще не потух!',
       });
      
      
    4. Используйте агента, чтобы отправить сформированный документ:

      const { AqsiOnlineError } = require('node-aqsi-online/lib/errors');
      
      try {
       agent.sendOrder(order);
      } catch (error) {
       if (error instanceof AqsiOnlineError) {
          // AqsiOnline errors contains additional info in `errors` property of type Array
          console.log(error.message, error.errors);
       }
       // general errors handling
      }
      
      
    5. Используйте агента для получения статусов по ранее отправленным документам:

      try {
       const status = agent.getOrderStatus(inn, id);
       if (status) {
          // Документ успешно обработан, status содержит данные документа
       } else {
          // Документ создан и добавлен в очередь на обработку, но еще не обработан
       }
      } catch (error) {
       if (error instanceof AqsiOnlineError) {
          // AqsiOnline errors contains additional info in `errors` property of type Array
          console.log(error.message, error.errors);
       }
       // general errors handling
      }
      
      

    Troubleshooting

    • Ошибка error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag означает неправильный pem формат приватного ключа.

      Если вы воспользовались советом из протокола и сконвертировали xml в pem с помощью онлайн-конвертора, то попробуйте изменить заголовок и окончание ключа. Укажите -----BEGIN PRIVATE KEY----- вместо -----BEGIN RSA PRIVATE KEY-----.

    License

    This project is licensed under the MIT license, copyright (c) 2018 АО ПИ Джи Групп.

    Конвейеры
    0 успешных
    0 с ошибкой