Tích hợp Salesforce với JavaScript: Lấy Token & Thực hiện CRUD
Salesforce cung cấp các API REST mạnh mẽ cho phép các nhà phát triển tương tác với dữ liệu Salesforce từ các ứng dụng bên ngoài. Trong bài viết này, chúng ta sẽ tìm hiểu cách:
- ✅ Lấy Access Token từ Salesforce bằng JavaScript
- ✅ Thực hiện các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) trên các bản ghi Salesforce
- ✅ Kiểm tra mọi thứ trong một tệp HTML + JS đơn giản mà không cần công cụ bổ sung
🛠️ Điều kiện tiên quyết
Trước khi bắt đầu, bạn sẽ cần:
- Một tài khoản Salesforce Developer Org (miễn phí: đăng ký ở đây)
- Một Connected App được tạo trong Salesforce với OAuth được kích hoạt
- Client ID, Client Secret, Tên người dùng, Mật khẩu và Security Token của bạn
🔑 Bước 1: Tạo một Connected App trong Salesforce
- Truy cập
Setup → App Manager → New Connected App
- Nhập các thông tin sau:
- Tên:
JS Integration
Kích hoạt Cài đặt OAuth ✅
- URL Callback: https://www.postman.com/oauth2/callback (hoặc URL ứng dụng của bạn)
- Tên:
OAuth Scopes:
- Truy cập đầy đủ (full)
- Truy cập và quản lý dữ liệu của bạn (api)
- Thực hiện các yêu cầu thay mặt bạn
(refresh_token, offline_access)
Lưu → Sao chép Client ID và Client Secret
🔑 Bước 2: Lấy Access Token qua JavaScript
Salesforce sử dụng OAuth 2.0 cho xác thực. Trong quá trình thử nghiệm, chúng ta có thể sử dụng Password Grant Flow.
Dưới đây là cách yêu cầu một access token bằng JavaScript:
javascript
function getAccessToken() {
const body = new URLSearchParams({
grant_type: "password",
client_id: "YOUR_CLIENT_ID",
client_secret: "YOUR_CLIENT_SECRET",
username: "YOUR_SALESFORCE_USERNAME",
password: "YOUR_PASSWORD_WITH_SECURITY_TOKEN"
});
return fetch("https://login.salesforce.com/services/oauth2/token", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: body
})
.then(res => res.json())
.then(data => {
console.log("Access Token:", data.access_token);
return data;
});
}
🔨 Bước 3: Thực hiện các thao tác CRUD
Khi bạn có access_token và instance_url, bạn có thể tương tác với các đối tượng Salesforce.
Dưới đây là ví dụ đầy đủ về HTML + JavaScript:
html
<!DOCTYPE html>
<html>
<head>
<title>Ví dụ CRUD Salesforce</title>
</head>
<body>
<h2>CRUD Salesforce qua JavaScript</h2>
<script>
const clientId = "YOUR_CLIENT_ID";
const clientSecret = "YOUR_CLIENT_SECRET";
const username = "YOUR_SALESFORCE_USERNAME";
const password = "YOUR_PASSWORD_WITH_SECURITY_TOKEN";
const loginUrl = "https://login.salesforce.com";
const apiVersion = "v59.0";
let accessToken = "";
let instanceUrl = "";
// 1️⃣ Lấy Access Token
function getAccessToken() {
const body = new URLSearchParams({
grant_type: "password",
client_id: clientId,
client_secret: clientSecret,
username: username,
password: password
});
return fetch(`${loginUrl}/services/oauth2/token`, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: body
})
.then(res => res.json())
.then(data => {
console.log("🔑 Access Token:", data);
accessToken = data.access_token;
instanceUrl = data.instance_url;
return data;
});
}
// 2️⃣ TẠO
function createAccount() {
fetch(`${instanceUrl}/services/data/${apiVersion}/sobjects/Account/`, {
method: "POST",
headers: {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
},
body: JSON.stringify({
Name: "JS Test Account",
Phone: "1234567890"
})
})
.then(res => res.json())
.then(data => {
console.log("✅ Tạo tài khoản thành công:", data);
getAccount(data.id);
});
}
// 3️⃣ ĐỌC
function getAccount(accountId) {
fetch(`${instanceUrl}/services/data/${apiVersion}/sobjects/Account/${accountId}`, {
method: "GET",
headers: { "Authorization": "Bearer " + accessToken }
})
.then(res => res.json())
.then(data => {
console.log("📖 Dữ liệu tài khoản:", data);
updateAccount(accountId);
});
}
// 4️⃣ CẬP NHẬT
function updateAccount(accountId) {
fetch(`${instanceUrl}/services/data/${apiVersion}/sobjects/Account/${accountId}`, {
method: "PATCH",
headers: {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
},
body: JSON.stringify({ Phone: "9876543210" })
})
.then(res => {
if (res.status === 204) {
console.log("✏️ Tài khoản đã được cập nhật!");
deleteAccount(accountId);
} else {
console.log("❌ Cập nhật thất bại");
}
});
}
// 5️⃣ XÓA
function deleteAccount(accountId) {
fetch(`${instanceUrl}/services/data/${apiVersion}/sobjects/Account/${accountId}`, {
method: "DELETE",
headers: { "Authorization": "Bearer " + accessToken }
})
.then(res => {
if (res.status === 204) {
console.log("🗑️ Tài khoản đã bị xóa!");
} else {
console.log("❌ Xóa thất bại");
}
});
}
// 🚀 Chạy: Đăng nhập rồi CRUD
getAccessToken().then(() => createAccount());
</script>
</body>
</html>
🔒 Những điều cần lưu ý về bảo mật
- Password Grant Flow có thể làm lộ mật khẩu Salesforce của bạn → chỉ sử dụng cho thử nghiệm.
- Đối với các ứng dụng sản xuất, luôn sử dụng OAuth Web Server Flow (mã ủy quyền).
- Không bao giờ cam kết Client Secret hoặc Access Token lên GitHub.
🎯 Kết luận
Với chỉ vài dòng JavaScript, bạn có thể:
- Xác thực với Salesforce
- Tạo, Đọc, Cập nhật và Xóa các bản ghi
- Kiểm tra tích hợp API trong trình duyệt
- Cách tiếp cận này rất phù hợp cho việc học hỏi, tạo mẫu hoặc các tác vụ tự động nhỏ.
- Đối với sản xuất, hãy chuyển sang các luồng OAuth an toàn và sử dụng mã phía máy chủ (Node.js, Java, .NET, v.v.).
Câu hỏi thường gặp
1. Làm thế nào để tạo một Connected App trong Salesforce?
Bạn cần truy cập vào Setup
và tìm App Manager
, sau đó chọn New Connected App
để tạo.
2. Sự khác biệt giữa Password Grant Flow và Authorization Code Flow là gì?
Password Grant Flow không an toàn cho môi trường sản xuất vì mật khẩu được gửi qua mạng. Authorization Code Flow là lựa chọn an toàn hơn.
3. Có cách nào khác để tương tác với Salesforce không?
Có, bạn có thể sử dụng các thư viện như jsforce
để đơn giản hóa việc tương tác với API Salesforce.