Skip to content

del1e/node-orangedata

 
 

Repository files navigation

Forked for expand dictionary (API VERSION: 2.23.0)

Node.js integration for OrangeData 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 OrangeData and contributors.

Возможности

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

Установка

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

Используя yarn:

$ yarn add node-orangedata

Используя npm:

$ npm install --save node-orangedata

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

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

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

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

    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://apip.orangedata.ru:2443/api/v2';
    
    const agent = new OrangeData({ 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 { OrangeDataError } = require('node-orangedata/lib/errors');
    
    try {
      agent.sendOrder(order);
    } catch (error) {
      if (error instanceof OrangeDataError) {
        // OrangeData 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 OrangeDataError) {
        // OrangeData 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) 2017 АО "Оранж Дата".

About

Node.js integration for OrangeData service

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%