แอปพลิเคชัน Fintech สมัยใหม่มักไม่เริ่มต้นจากศูนย์อีกต่อไป เมื่อผู้ใช้เชื่อมโยงบัญชีเช็คกับแอปของคุณ Plaid จะเข้ามาเป็นตัวกลาง แปลงการเข้าสู่ระบบธนาคารให้เป็น JSON ที่พร้อมใช้งานสำหรับแบ็กเอนด์ของคุณ Plaid API ขับเคลื่อนการเชื่อมโยงบัญชี ตรวจสอบยอดคงเหลือ ประวัติธุรกรรม และยืนยันตัวตนให้กับแอปชั้นนำ เช่น Venmo, Robinhood, Chime
คู่มือนี้จะเน้นการใช้งาน Plaid API สำหรับนักพัฒนา: วิธีรับคีย์ วิธีใช้ Link token แบบครบวงจร ผลิตภัณฑ์ที่ควรรู้ และการแก้ปัญหาข้อผิดพลาดที่เกิดขึ้นจริง พร้อมตัวอย่างการทดสอบด้วย Apidog เพื่อให้คุณมั่นใจว่าข้อมูล request ถูกต้อง หากต้องการรายละเอียดเพิ่มเติม ควรเปิด เอกสาร Plaid อย่างเป็นทางการ ควบคู่ไปด้วย
Open banking มีการแข่งขันสูง Plaid เป็นหนึ่งในหลายตัวเลือก หากยังเลือกไม่ได้ คู่มือ API Open banking ที่ดีที่สุด จะช่วยเปรียบเทียบ สำหรับโพสต์นี้ สมมติว่าคุณเลือก Plaid แล้วและพร้อมนำไปใช้งาน
สรุปย่อ (TL;DR)
- Plaid เป็นตัวกลางรวมข้อมูลการเงิน เชื่อมต่อกับธนาคารกว่า 12,000 แห่งในสหรัฐฯ แคนาดา และยุโรป
- มี 3 สภาพแวดล้อมพร้อมใช้งาน: Sandbox (ฟรี, ข้อมูลจำลอง), Development (100 รายการจริงแรกฟรี), Production (คิดเงินตามการใช้งาน)
- โฟลว์เชื่อมโยงประกอบด้วย 4 ขั้นตอน: สร้าง
link_token(เซิร์ฟเวอร์), เปิด Plaid Link (ไคลเอนต์), แลกpublic_tokenเป็นaccess_token, เรียก endpoint ผลิตภัณฑ์ - ผลิตภัณฑ์หลัก: Auth, Balance, Transactions, Identity, Investments, Liabilities, Income เลือกเปิดใช้งานต่อ Item
- ข้อผิดพลาดที่เจอบ่อย:
ITEM_LOGIN_REQUIRED,INVALID_CREDENTIALSตรวจสอบและแก้ไขด้วย Webhook - มี Rate Limit ต่อ Item และต่อไคลเอนต์ แนะนำให้อ่านข้อมูลเป็น batch และฟัง Webhook แทนการ query loop
Plaid คืออะไร?
Plaid เป็นโครงสร้างพื้นฐาน fintech ที่เชื่อมต่อแอปกับธนาคารของผู้ใช้ เมื่อผู้ใช้กรอกข้อมูลเข้าสู่ Plaid Link Plaid จะเชื่อมต่อกับธนาคาร (ผ่าน API หรือ reverse engineering หน้าเว็บ) ดึงข้อมูล ปรับมาตรฐาน และส่ง JSON กลับมาให้แอปของคุณ โดยคุณไม่ต้องจัดการข้อมูล credential โดยตรง Plaid ถือการเชื่อมต่อ (Item) และให้ access_token สำหรับใช้ขอข้อมูลในอนาคต
Item หนึ่งคือการเชื่อมต่อหนึ่งชุดกับสถาบันการเงินหนึ่งแห่ง (แต่รวมหลายบัญชีได้ เช่น เช็ค ออมทรัพย์ เครดิตการ์ด) Plaid ครอบคลุมบัญชีผู้บริโภค บัตรเครดิต เงินกู้ การลงทุน และข้อมูลเงินเดือน แต่ไม่ได้โอนเงินเอง ถ้าต้องการโอนเงิน ACH ให้ใช้ Plaid Auth คู่กับ Payment Processor อื่น (ดู คู่มือ ACH API)
การยืนยันตัวตนและการตั้งค่า
ขั้นตอนที่ 1: สร้างบัญชีนักพัฒนา Plaid
- ลงทะเบียนที่ plaid.com และยืนยันอีเมล
- เข้าสู่ Plaid Dashboard จะมี 3 สภาพแวดล้อม:
-
Sandbox: ธนาคารปลอม ใช้
user_good/pass_goodฟรี - Development: ธนาคารจริง จำกัด 100 Live Items ฟรี
- Production: ธนาคารจริง ไม่จำกัด คิดเงินตามปริมาณ
-
Sandbox: ธนาคารปลอม ใช้
ขั้นตอนที่ 2: ดึงคีย์ของคุณ
- บน Dashboard ไปที่ Team Settings > Keys
- คุณจะได้ 2 ค่า:
-
client_id: เหมือนกันทุก environment -
secret: เฉพาะแต่ละ environment (sandbox, development, production)
-
- เก็บใน Environment Variable ห้าม commit ไป git
ขั้นตอนที่ 3: ติดตั้ง SDK
Node.js SDK ทางการ: github.com/plaid/plaid-node
npm install plaid
ขั้นตอนที่ 4: เริ่มต้นไคลเอนต์
import { Configuration, PlaidApi, PlaidEnvironments } from 'plaid';
const config = new Configuration({
basePath: PlaidEnvironments.sandbox,
baseOptions: {
headers: {
'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID,
'PLAID-SECRET': process.env.PLAID_SECRET,
},
},
});
const client = new PlaidApi(config);
Core Endpoints
ขั้นตอน Link token
กระบวนการเชื่อม Plaid มี 4 ขั้นตอน (ฝั่งเซิร์ฟเวอร์ทำขั้นที่ 1,3 ฝั่งไคลเอนต์ทำขั้นที่ 2):
ขั้นตอนที่ 1: สร้าง link_token
const response = await client.linkTokenCreate({
user: { client_user_id: 'user_123' },
client_name: 'Your App',
products: ['auth', 'transactions'],
country_codes: ['US'],
language: 'en',
});
const linkToken = response.data.link_token;
หรือใช้ cURL:
curl -X POST https://sandbox.plaid.com/link/token/create \
-H 'Content-Type: application/json' \
-d '{
"client_id": "YOUR_CLIENT_ID",
"secret": "YOUR_SANDBOX_SECRET",
"user": { "client_user_id": "user_123" },
"client_name": "Your App",
"products": ["auth", "transactions"],
"country_codes": ["US"],
"language": "en"
}'
ขั้นตอนที่ 2: เปิด Plaid Link ในไคลเอนต์
- ส่ง
link_tokenไป frontend - เรียก Plaid Link SDK ให้ผู้ใช้เลือกธนาคาร กรอกข้อมูล
- จะได้
public_tokenกลับมาที่ callbackonSuccess
ขั้นตอนที่ 3: แลกเปลี่ยน public_token
const exchange = await client.itemPublicTokenExchange({
public_token: publicToken,
});
const accessToken = exchange.data.access_token;
const itemId = exchange.data.item_id;
- เก็บ
accessTokenฝั่งเซิร์ฟเวอร์ ผูกกับ user ของคุณ ใช้สำหรับเรียกข้อมูลในอนาคต
ขั้นตอนที่ 4: เรียก endpoint ผลิตภัณฑ์
const accounts = await client.accountsGet({ access_token: accessToken });
const balance = await client.accountsBalanceGet({ access_token: accessToken });
Endpoints ของผลิตภัณฑ์ที่คุณควรรู้
-
Auth: คืนหมายเลขบัญชี/เส้นทางสำหรับ ACH (
/auth/get) -
Balance: คืนยอดคงเหลือเรียลไทม์ (
/accounts/balance/get) -
Transactions: รายการธุรกรรมย้อนหลังสูงสุด 24 เดือน (
/transactions/sync) -
Identity: ข้อมูลเจ้าของบัญชี (ชื่อ, อีเมล, โทรศัพท์, ที่อยู่) (
/identity/get) หาก KYC เป็น use case หลัก ดู คู่มือ KYC API -
Investments: ข้อมูลการถือครองและธุรกรรมลงทุน (
/investments/holdings/get) -
Liabilities: ข้อมูลเงินกู้นักเรียน, บัตรเครดิต, สินเชื่อบ้าน (
/liabilities/get) -
Income: ข้อมูลเงินเดือนผ่าน Plaid Income (
/credit/payroll_income/get)
การทดสอบ Plaid API ด้วย Apidog
การทดสอบ Plaid แบบ end-to-end ยุ่งยาก เพราะขั้นตอน Link ต้องใช้เบราว์เซอร์ แต่คุณยังสามารถเทสต์ฝั่งเซิร์ฟเวอร์ได้สะดวกด้วย Apidog
- Import OpenAPI spec ของ Plaid เข้า Apidog
- จะได้ endpoint ทั้งหมด พร้อมตัวอย่าง body และ header
- สร้าง environment variable เช่น
client_id,secret,access_tokenแล้วสลับระหว่าง sandbox/production ง่ายๆ - ใช้ chain request ทดสอบ flow เต็ม:
linkTokenCreate→sandboxPublicTokenCreate→itemPublicTokenExchange→accountsGetไม่ต้องเปิดเบราว์เซอร์ - Mock server ของ Apidog มีประโยชน์สำหรับทีม frontend ที่ต้องการ response
/accounts/getก่อน backend เสร็จ - หากย้ายจากเครื่องมืออื่น ดู คู่มือย้ายจาก Postman
- ดาวน์โหลด Apidog แล้ว import spec ของ Plaid เพื่อเริ่มต้น
ข้อผิดพลาดทั่วไปและการจำกัดอัตรา
Plaid คืน error พร้อม error_type, error_code, error_message ควร handle error หลักเหล่านี้:
-
INVALID_CREDENTIALS: ผู้ใช้กรอกรหัสผิด ให้ลองใหม่ผ่าน Plaid Link (โหมดอัปเดต) -
ITEM_LOGIN_REQUIRED: ธนาคาร revoke session (เช่น เปลี่ยนรหัสผ่าน, MFA) ต้องยืนยันตัวตนใหม่ (Webhook จะแจ้งเตือน) -
RATE_LIMIT_EXCEEDED: เกิน Rate Limit ต่อ Item/endpoint ให้ backoff และ retry พร้อม jitter -
PRODUCT_NOT_READY: ข้อมูลยังไม่พร้อม (เช่น ธุรกรรมกำลัง sync) รอ webhookINITIAL_UPDATEแล้วค่อย retry
Webhooks
- ส่ง webhook URL ตอนสร้าง
link_token - Plaid จะ POST แจ้ง update ได้แก่:
-
SYNC_UPDATES_AVAILABLE: ธุรกรรมใหม่ -
ITEM: LOGIN_REQUIRED: ต้องยืนยันตัวตนใหม่ -
ITEM: ERROR: ข้อผิดพลาดถาวร
-
- ตรวจสอบ JWT signature ทุก webhook ก่อน process
การจำกัดอัตรา
- Plaid มี rate limit ต่อ Item/endpoint เช่น
/accounts/balance/get~5 ครั้ง/นาที/Item - มี rate limit รวมระดับไคลเอนต์สำหรับ endpoint ที่ใช้งานหนัก
- แนวทาง: ใช้ webhook, แคชข้อมูลยอดคงเหลือ 2-3 นาที, หลีกเลี่ยงการเรียก Plaid ตรงจาก user-facing route
ราคา Plaid
Plaid ใช้ model จ่ายตามการใช้งาน (production):
- Sandbox: ฟรี
- Development: ฟรี 100 รายการ (Items)
-
Production:
- Auth: ~ $1.50 ต่อบัญชีที่เชื่อมโยง (จ่ายครั้งเดียว)
- Balance: คิดตามการเรียก
- Transactions: ค่าธรรมเนียมรายเดือนต่อรายการ (~ $0.30)
- Identity: คิดตามการเรียก
- Investments / Liabilities / Income: คิดแยกรายการ
- ปริมาณมากสามารถขอราคาพิเศษ ตรวจสอบ หน้าผลิตภัณฑ์ Plaid สำหรับราคาปัจจุบัน
คำถามที่พบบ่อย (FAQ)
access_token มีอายุการใช้งานนานเท่าใด?
ไม่มีหมดอายุจนกว่าผู้ใช้เพิกถอนหรือธนาคาร revoke session เก็บเข้ารหัสไว้ ไม่ต้องตั้งหมดอายุเอง
ใช้ Plaid เพื่อยืนยันตัวตนอย่างเดียวได้ไหม?
ใช้ Plaid Identity ได้ แต่ถ้า use case คือ KYC จริงๆ บริการเฉพาะทางอาจเหมาะกว่า (ดู คู่มือ Stripe Identity API)
Plaid รองรับประเทศไหนบ้าง?
สหรัฐฯ แคนาดา สหราชอาณาจักร และส่วนใหญ่ของยุโรป การรองรับขึ้นกับแต่ละผลิตภัณฑ์ ดูรหัสประเทศใน /link/token/create
หากผู้ใช้เปลี่ยนรหัสผ่านธนาคาร?
Item จะกลายเป็น ITEM_LOGIN_REQUIRED คุณจะได้รับ webhook ให้ trigger Plaid Link (update mode) ให้ผู้ใช้ยืนยันใหม่ โดยไม่ต้องเปลี่ยน access_token
ทดสอบโฟลว์ Link โดยไม่ต้องใช้เบราว์เซอร์ได้หรือไม่?
ได้ ใช้ endpoint /sandbox/public_token/create เพื่อข้ามขั้นตอน Plaid Link และรับ public_token สำหรับ integration test
จัดการ Plaid ใน local dev อย่างไร?
เก็บ sandbox secret ใน .env แล้วชี้ไปที่ PlaidEnvironments.sandbox ใช้ tunneling (ngrok, Cloudflare Tunnel) เพื่อรับ webhook ในเครื่อง
Top comments (0)