README.md
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 АО “Оранж Дата”.

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