Hướng dẫn từng bước tích hợp QuickBooks Online với NodeJS
By manhnv, at: 10:01 Ngày 24 tháng 11 năm 2024
Thời gian đọc ước tính: __READING_TIME__ minutes


Hướng dẫn từng bước tích hợp QuickBooks Online với NodeJS
QuickBooks Online (QBO) là một nền tảng kế toán phổ biến được sử dụng bởi các doanh nghiệp ở mọi quy mô. Tích hợp QBO với Node.js cho phép các nhà phát triển tự động hóa các tác vụ như đồng bộ hóa hóa đơn, cập nhật hồ sơ khách hàng và truy xuất báo cáo theo chương trình.
Trong hướng dẫn này, chúng ta sẽ cùng nhau trải qua quy trình tích hợp QuickBooks Online với Node.js từng bước một. Theo sau là https://developer.intuit.com/app/developer/qbo/docs/develop/sdks-and-samples-collections/nodejs
Điều kiện tiên quyết
Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:
1. Tài khoản QuickBooks Online: Đăng ký tại QuickBooks Online.
2. Tài khoản Intuit Developer: Đăng ký và tạo ứng dụng tại Intuit Developer.
3. Node.js đã được cài đặt: Phiên bản khuyến nghị 14.x trở lên.
4. Các gói cần cài đặt:
express
axios
dotenv
quickbooks
Cài đặt các gói này bằng npm:
npm install express axios dotenv quickbooks
5. Thông tin xác thực OAuth: Lấy ID Khách hàng, Bí mật Khách hàng và URI Chuyển hướng từ cổng Intuit Developer.
Bước 1: Thiết lập môi trường Node.js của bạn
1. Tạo một thư mục dự án mới:
mkdir quickbooks-node-integration
cd quickbooks-node-integration
npm init -y
Cài đặt các phụ thuộc cần thiết:
npm install express axios dotenv quickbooks
Tạo một tệp .env
để lưu trữ thông tin xác thực của bạn:
CLIENT_ID=Your_Client_ID
CLIENT_SECRET=Your_Client_Secret
REDIRECT_URI=http://localhost:3000/callback
Bước 2: Cấu hình xác thực OAuth 2.0
Để truy cập API của QuickBooks, bạn phải triển khai luồng OAuth 2.0 để lấy mã thông báo truy cập.
Máy chủ Express tối thiểu cho OAuth
Đây là một ví dụ về việc thiết lập xác thực OAuth với Express:
const express = require('express');
const axios = require('axios');
require('dotenv').config();
const app = express();
const port = 3000;
const authUrl = `https://appcenter.intuit.com/connect/oauth2?client_id=${process.env.CLIENT_ID}&redirect_uri=${process.env.REDIRECT_URI}&response_type=code&scope=com.intuit.quickbooks.accounting`;
app.get('/', (req, res) => {
res.send(`Kết nối với QuickBooks`);
});
app.get('/callback', async (req, res) => {
const authCode = req.query.code;
try {
const response = await axios.post(
'https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer',
new URLSearchParams({
grant_type: 'authorization_code',
code: authCode,
redirect_uri: process.env.REDIRECT_URI
}),
{
auth: {
username: process.env.CLIENT_ID,
password: process.env.CLIENT_SECRET
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
);
const { access_token, refresh_token } = response.data;
res.send(`Mã thông báo truy cập: ${access_token}
Mã thông báo làm mới: ${refresh_token}`);
} catch (error) {
res.status(500).send('Lỗi khi trao đổi mã thông báo: ' + error.message);
}
});
app.listen(port, () => console.log(`Máy chủ đang chạy tại http://localhost:${port}`));
Bước 3: Kết nối với API QuickBooks
Sau khi bạn có mã thông báo truy cập, bạn có thể sử dụng thư viện quickbooks
để tương tác với API.
Thiết lập khách hàng QuickBooks
const QuickBooks = require('quickbooks');
// Thay thế những cái này bằng giá trị của bạn
const qb = new QuickBooks(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.REDIRECT_URI,
'access_token_here', // Thay thế bằng mã thông báo truy cập thực tế của bạn
false, // Đặt thành true cho chế độ sandbox
true // Bật hỗ trợ minorVersion
);
Bước 4: Thực hiện các thao tác cơ bản
Truy xuất khách hàng
const QuickBooks = require('quickbooks');
// Thay thế những cái này bằng giá trị của bạn
const qb = new QuickBooks(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.REDIRECT_URI,
'access_token_here', // Thay thế bằng mã thông báo truy cập thực tế của bạn
false, // Đặt thành true cho chế độ sandbox
true // Bật hỗ trợ minorVersion
);
Thêm khách hàng
qb.createCustomer(
{
DisplayName: 'John Doe',
PrimaryEmailAddr: { Address: '[email protected]' }
},
(err, customer) => {
if (err) {
console.error('Lỗi khi tạo khách hàng:', err);
} else {
console.log('Khách hàng đã được tạo:', customer);
}
}
);
Cập nhật khách hàng
qb.updateCustomer(
{
Id: '1', // Thay thế bằng ID khách hàng thực tế
SyncToken: '0', // Thay thế bằng SyncToken thực tế
DisplayName: 'John Doe Updated'
},
(err, customer) => {
if (err) {
console.error('Lỗi khi cập nhật khách hàng:', err);
} else {
console.log('Khách hàng đã được cập nhật:', customer);
}
}
);
Bước 5: Xử lý lỗi và gỡ lỗi
- Mã thông báo không hợp lệ: Triển khai logic làm mới mã thông báo bằng
refresh_token
.
- Giới hạn tốc độ: Tuân thủ giới hạn tốc độ API và thử lại với độ trễ theo cấp số nhân.
Làm mới mã thông báo
async function refreshToken(refreshToken) {
try {
const response = await axios.post(
'https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer',
new URLSearchParams({
grant_type: 'refresh_token',
refresh_token: refreshToken
}),
{
auth: {
username: process.env.CLIENT_ID,
password: process.env.CLIENT_SECRET
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
);
console.log('Mã thông báo truy cập mới:', response.data.access_token);
} catch (error) {
console.error('Lỗi khi làm mới mã thông báo:', error);
}
}
Bước 6: Triển khai và bảo mật
- Sử dụng thư viện cấu hình bảo mật như
dotenv
để lưu trữ các biến môi trường.
- Triển khai an toàn trên nền tảng đám mây như AWS, Azure hoặc Heroku.
- Xoay vòng và làm mới mã thông báo thường xuyên.
Kết luận
Tích hợp QuickBooks Online với Node.js có thể tự động hóa quy trình kế toán của bạn và cải thiện hiệu quả kinh doanh. Bằng cách làm theo hướng dẫn này, bạn đã thiết lập xác thực OAuth 2.0, thực hiện các cuộc gọi API để quản lý khách hàng và tìm hiểu các thực tiễn tốt nhất để xử lý lỗi và bảo mật.
Tài nguyên bổ sung