การเริ่มต้นใช้งานแอป Web3 ยังคงเป็นอุปสรรคสำคัญสำหรับผู้ใช้ใหม่ วลีอย่าง Seed phrase, ส่วนขยายเบราว์เซอร์ และค่าธรรมเนียม gas ทำให้การสมัครใช้งานกลายเป็นกระบวนการที่ซับซ้อน Privy API ช่วยลดความยุ่งยากนี้ด้วยการให้กระเป๋าเงินแบบฝัง (embedded wallet) สำหรับผู้ใช้ใหม่ผ่านวิธีเข้าสู่ระบบที่คุ้นเคย เช่น อีเมล, SMS, Google, Apple หรือใช้กระเป๋าเงินเดิมอย่าง MetaMask โดยไม่ต้องติดตั้งส่วนขยายเบราว์เซอร์ใด ๆ ลองใช้ Apidog วันนี้ ปัจจุบัน Privy รองรับกระเป๋าเงินสำหรับ Blackbird, Friend.tech, OpenSea และแอปอื่น ๆ อีกมากมาย รองรับ Ethereum, Solana และเชน EVM ทั้งหมด บทความนี้จะแนะนำขั้นตอนการใช้งาน Privy อย่างครบถ้วน: ตั้งค่าแอป, เชื่อมต่อ React SDK, ตรวจสอบสิทธิ์บนเซิร์ฟเวอร์, ลงนามธุรกรรม และตั้งค่า webhook หากต้องการเปรียบเทียบกับตัวเลือกอื่น เช่น MetaMask developer tools สามารถเปิดคู่มือสลับดูได้ทันที
💡Apidog คือเครื่องมือที่แนะนำสำหรับตรวจสอบและดีบั๊กคำขอ HTTPS ที่ SDK ของ Privy สร้างขึ้น สามารถพร็อกซี, จับ payload จริง และแก้ไขปัญหา auth ได้รวดเร็วกว่าไล่ log เอง ## สรุปโดยย่อ (TL;DR) - Privy รวม embedded wallet กับการเข้าสู่ระบบ (email, SMS, social, external wallet) ใน SDK เดียว - React SDK มี hooks หลัก: `PrivyProvider`, `useLogin`, `useWallets`, `usePrivy` สำหรับยืนยันตัวตนและลงนามธุรกรรม - `@privy-io/server-auth` สำหรับตรวจสอบ access token บนฝั่งเซิร์ฟเวอร์ เชื่อถือ user ID ได้ทุกคำขอ - Embedded wallet รองรับ Ethereum, Solana, เชน EVM พร้อม export และ authorization signature - Webhook แจ้งเตือนเมื่อมี user, login, wallet activity ฐานข้อมูลซิงค์ได้แบบไม่ต้อง polling - Policy engine ของ Privy เพิ่ม MFA, allowlist, transaction rule ได้โดยไม่ต้องแก้โค้ด ## Privy API คืออะไร? Privy คือโครงสร้างพื้นฐานสำหรับการยืนยันตัวตนและกระเป๋าเงิน มอบ UI สำหรับ login, embedded wallet สำหรับผู้ใช้แต่ละคน และ REST endpoint สำหรับฝั่ง server กระเป๋าเงินแบบฝังจัดการใน secure enclave — Privy หรือ backend ของคุณจะไม่เห็น private key ผู้ใช้สามารถ export คีย์ได้ตลอดเวลาเพื่อไปใช้กับ self-custody wallet Privy คิดค่าบริการแบบรายเดือนต่อ active wallet คุณสามารถเริ่มฟรี (1,000 MAW), Pro เริ่ม $149/เดือน และ Enterprise มี SLA แบบ custom ## การยืนยันตัวตนและการตั้งค่า 1. สมัครและสร้างแอปที่ [privy.io](https://www.privy.io/) 2. จดค่า **App ID** (`clxxxxx...`) สำหรับ client SDK และ **App secret** สำหรับ server SDK 3. กำหนด login methods ที่ต้องการ (email, SMS, Google, Apple, Farcaster, wallet), เลือก default chain, และเพิ่ม domain ของคุณใน allowlist ติดตั้ง React SDK: ```bash npm install @privy-io/react-auth ``` ครอบแอปด้วย `PrivyProvider`: ```jsx import { PrivyProvider } from '@privy-io/react-auth'; export default function App({ Component, pageProps }) { return ( ); } ``` แฟล็ก `createOnLogin` จะสร้าง embedded wallet ให้ user ที่ไม่มี wallet ตอน login สามารถเลือก chain ที่รองรับ และสำหรับ Solana ให้ตั้งค่า `solanaClusters` แยกต่างหาก ## Core endpoint และการเรียกใช้ SDK React SDK ของ Privy จัดการทุกอย่างแทบทั้งหมด แต่สำหรับการดีบั๊กหรือ integration ฝั่ง backend/webhook คุณควรเข้าใจโครงสร้าง token และ endpoint พื้นฐาน ### การเข้าสู่ระบบและอ่านข้อมูลผู้ใช้ ```jsx import { usePrivy, useWallets } from '@privy-io/react-auth'; function LoginButton() { const { ready, authenticated, login, logout, user } = usePrivy(); const { wallets } = useWallets(); if (!ready) returnLoading...
; if (!authenticated) return Sign in; const embedded = wallets.find((w) => w.walletClientType === 'privy'); return (Hi {user.email?.address ?? user.id}
<p>Wallet: {embedded?.address}</p>
<button onClick={logout}>Log out</button>
</div>
);
}
`useWallets` คืนค่ากระเป๋าทั้งหมดที่ user เชื่อมไว้ ฟิลด์ `walletClientType` บอกว่าเป็น wallet แบบฝังหรือ external (ดู [ตัวอย่าง embedded wallet ของ Privy](http://apidog.com/blog/best-crypto-wallet-api?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation))
### การลงนามธุรกรรม
```jsx
const { wallets } = useWallets();
const wallet = wallets.find((w) => w.walletClientType === 'privy');
async function sendTx() {
const provider = await wallet.getEthereumProvider();
const hash = await provider.request({
method: 'eth_sendTransaction',
params: [{
to: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb2',
value: '0x38d7ea4c68000', // 0.001 ETH
}],
});
console.log('tx hash', hash);
}
ถ้าใช้ Solana เปลี่ยนเป็น getSolanaProvider และ serialize transaction ได้ (Privy + Alchemy ทำงานร่วมกันได้ดี — Privy ถือคีย์, Alchemy เป็น RPC endpoint)
การตรวจสอบโทเค็นบนเซิร์ฟเวอร์
ติดตั้ง server SDK:
npm install @privy-io/server-auth
ตรวจสอบ access token (JWT) จาก frontend ก่อนใช้งาน user ID:
import { PrivyClient } from '@privy-io/server-auth';
const privy = new PrivyClient(
process.env.PRIVY_APP_ID,
process.env.PRIVY_APP_SECRET
);
export async function GET(req) {
const auth = req.headers.get('authorization')?.replace('Bearer ', '');
try {
const claims = await privy.verifyAuthToken(auth);
// claims.userId คือ Privy user DID
return Response.json({ userId: claims.userId });
} catch (err) {
return new Response('Unauthorized', { status: 401 });
}
}
ดึง user object ทั้งหมด (privy.getUser(userId)) เพื่อตรวจสอบบัญชีที่เชื่อม, wallet address และ custom metadata ได้
การส่งออกกระเป๋าเงินแบบฝัง
ให้ user export private key ได้ง่าย ๆ ด้วย hook:
import { useExportWallet } from '@privy-io/react-auth';
const { exportWallet } = useExportWallet();
<button onClick={() => exportWallet()}>Export private key</button>;
Privy แสดง modal แบบ iframe ที่ปลอดภัย แอปของคุณจะไม่เห็นคีย์เลย
ลายเซ็นการอนุญาตและ Policy engine
สำหรับธุรกรรมสำคัญ (เช่น โอนจำนวนมาก, login อุปกรณ์ใหม่) ใช้ authorization signatures กำหนด policy ใน dashboard แล้วบังคับใช้ MFA, allowlist, หรือ server-signed approval ได้ ดูรายละเอียดที่ คู่มือ Privy authorization key รองรับ MFA (TOTP, SMS, passkey) ลดความเสี่ยง account takeover
Webhooks
เมื่อมีการสร้าง user, login หรือ activity ใน wallet, Privy จะ POST event มาที่ endpoint ของคุณ:
curl -X POST https://yourapp.com/webhooks/privy \
-H "Content-Type: application/json" \
-H "svix-id: msg_..." \
-H "svix-signature: v1,..." \
-d '{
"type": "user.created",
"user": { "id": "did:privy:...", "email": { "address": "a@b.com" } }
}'
ตรวจสอบ header svix-signature ด้วย webhook secret จาก dashboard ก่อนเขียนข้อมูลลงฐานข้อมูล
ข้อผิดพลาดทั่วไปและข้อจำกัดอัตรา (Rate Limits)
-
invalid_token: JWT หมดอายุ เรียกgetAccessToken()จากusePrivyก่อน fetch token อายุ 1 ชม. -
403 origin_not_allowed: URL ไม่อยู่ใน allowlist เพิ่ม domain ที่ dashboard ของ Privy -
wallet_not_ready: อ่านuseWalletsก่อนreadyเป็น true ให้เช็ค flag นี้ก่อนทุกครั้ง -
Rate limits: REST endpoint จำกัด 100 requests/sec/app (free plan) หากเกิน ให้รวม
getUserหรือ cache user ID
ใช้ Apidog ทดสอบ webhook ได้ง่าย วาง payload ดิบ, ปรับ header, รัน dev server ซ้ำ ๆ จน handler ผ่าน
ราคาของ Privy
- ฟรี: 1,000 MAW, login methods หลัก, embedded wallet (EVM, Solana)
- Pro: $149/เดือน, MAW สูงขึ้น, full webhook, staging app
- Enterprise: SLA custom, support เฉพาะ, policy engine ระดับองค์กร
ดู privy.io/pricing สำหรับรายละเอียดล่าสุด
การทดสอบ Privy API ด้วย Apidog
Client SDK ของ Privy ซ่อน HTTPS call ไว้ แต่จุดสำคัญ (token verification, user lookup, webhook) เป็น REST ปกติ ใช้ Apidog สร้าง Privy collection ใส่ app ID/secret เป็น environment variable แล้วเรียก endpoint เช่น GET /api/v1/users/{userId} หรือ POST /api/v1/users/{userId}/wallets ได้เลย
สามารถบันทึก webhook payload จาก dashboard เป็น Apidog request แล้ว replay กับ local tunnel ตั้ง automated test ตรวจสอบ JWT ที่ถูกต้องต้องคืน user object, JWT หมดอายุคืน 401 รันทดสอบทุก deploy ดาวน์โหลด Apidog ฟรี ไม่ต้องใช้ cURL หากย้ายจาก Postman ดู คู่มือ migration
ปุ่ม
คำถามที่พบบ่อย
Privy แตกต่างจาก Web3Auth หรือ Magic อย่างไร?
ทั้งสามมี embedded wallet แต่ Privy เน้น identity แบบผสม (email + wallet + social) และ policy engine สำหรับแอปขนาดใหญ่ Web3Auth เน้น key splitting (MPC), Magic มี magic-link ที่หลากหลาย เลือก Privy หากต้องการ onboarding UI ที่ดีและควบคุมสิทธิ์ wallet ละเอียด
Privy รองรับ Solana หรือไม่?
รองรับเต็มที่ ทั้ง mainnet และ devnet React SDK มี getSolanaProvider() สำหรับ sign/send transaction ตั้งค่า EVM + Solana ในแอปเดียวได้
ผู้ใช้สามารถนำกระเป๋าเงินของตนเองมาใช้ได้หรือไม่?
ได้ทันที ทั้ง MetaMask, Coinbase Wallet, WalletConnect, Phantom และอีกมากมาย Privy treat external wallet เป็น linked account, user DID เดียวกันถือทั้ง embedded และ external key
จะเกิดอะไรขึ้นหาก Privy ไม่สามารถใช้งานได้?
ผู้ใช้ยัง export wallet ได้เสมอ เพราะ key อยู่ใน secure enclave ของเบราว์เซอร์ สำหรับ production app, เปิดใช้งาน export wallet และอธิบายเส้นทาง fallback ดู คู่มือเปรียบเทียบ identity providers
Privy รองรับ MFA หรือไม่?
รองรับ TOTP, SMS, passkey และสามารถบังคับ MFA เฉพาะ action (เช่น โอน token, export wallet) ด้วย policy engine
โค้ดของแอปฉันทำงานฝั่งเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์?
ทั้งสอง Client SDK จัดการ login/sign, Server SDK ตรวจสอบ token และดึงข้อมูล user ห้ามส่ง app secret ไป browser เด็ดขาด
Top comments (0)