Note: this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Возможности
- Взаимодействие с онлайн-кассой по защищенному каналу связи (SSL)
- SHA256-RSA подпись сообщений приватным ключом отправителя
- Создание чека, соответствующего протоколу ОранжДата
- Получение статуса ранее отправленного чека
- Создание чека коррекции
- Проверка контрольной марки
Установка
Для работы с данной библиотекой требуется Node.js версии 8.9.2 (LTS) или выше.
Используя yarn:
$ yarn add node-orangedata
Используя npm:
$ npm install --save node-orangedata
Использование
Используйте команду npm test
, чтобы запустить выполнение примера в вашей консоли.
-
Подключите библиотеку в вашем коде:
const { OrangeData, Order } = require('node-orangedata');
-
Передайте параметры для установления защищенного соединения в конструктор класса
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 });
-
Создайте экземпляр класса
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: 'В здоровом теле здоровый дух, этот лозунг еще не потух!', });
-
Используйте агента, чтобы отправить сформированный документ:
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 }
-
Используйте агента для получения статусов по ранее отправленным документам:
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 АО “Оранж Дата”.