เชื่อมระบบกับ TUNGKAO
API เดียว ใช้ key เดียวรูปแบบเดียวกันทุกบริการ — Base URL: https://api.tungkao.com
เริ่มต้นใช้งาน
ทุกบริการใช้รูปแบบเดียวกัน: สร้าง API key ในหน้าร้านค้า (1 key ต่อ 1 บริการ) แล้วส่ง key ใน header Authorization ทุกคำขอ
ขั้นตอน
- สมัคร/เข้าสู่ระบบที่ app.tungkao.com ด้วย Gmail แล้วเติมเครดิต (1 บาท = 100 เครดิต)
- เมนู API key → เลือกการ์ดบริการ → ตั้งอายุ key → สร้าง → คัดลอก key เก็บไว้ (แสดงครั้งเดียว)
- เก็บ key ไว้ที่เซิร์ฟเวอร์ (ตัวแปรแวดล้อม TUNGKAO_KEY) ห้ามใส่ในหน้าเว็บ/แอปมือถือ
- เริ่มด้วย key โหมด test (tk_test_…) ไม่คิดเครดิต แล้วค่อยเปลี่ยนเป็น live
/v1/account — ทดสอบ key: ดูเครดิตคงเหลือcurl -X GET https://api.tungkao.com/v1/account \
-H "Authorization: Bearer $TUNGKAO_KEY"// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/account", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}` },
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/account");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY")],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.get(
"https://api.tungkao.com/v1/account",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
timeout=30,
)
print(r.json())เซ็นคำขอ (เมื่อเปิดคีย์เซ็น)
import crypto from "node:crypto";
async function tungkao(method, path, body) {
const raw = body ? JSON.stringify(body) : "";
const ts = Math.floor(Date.now() / 1000).toString();
const hash = crypto.createHash("sha256").update(raw).digest("hex");
const sig = crypto.createHmac("sha256", process.env.TUNGKAO_SIGNING_SECRET).update(`${ts}.${method}.${path}.${hash}`).digest("hex");
const r = await fetch("https://api.tungkao.com" + path, { method, body: raw || undefined, headers: {
Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json",
"X-Tungkao-Timestamp": ts, "X-Tungkao-Signature": sig } });
return r.json();
}
console.log(await tungkao("GET", "/v1/account"));<?php
function tungkao(string $method, string $path, ?array $body = null) {
$raw = $body ? json_encode($body) : "";
$ts = (string) time();
$sig = hash_hmac("sha256", "$ts.$method.$path." . hash("sha256", $raw), getenv("TUNGKAO_SIGNING_SECRET"));
$ch = curl_init("https://api.tungkao.com" . $path);
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => $method, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $raw ?: null,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json", "X-Tungkao-Timestamp: $ts", "X-Tungkao-Signature: $sig"]]);
return json_decode(curl_exec($ch), true);
}
print_r(tungkao("GET", "/v1/account"));import hashlib, hmac, json, os, time, requests
def tungkao(method, path, body=None):
raw = json.dumps(body, separators=(",", ":")) if body else ""
ts = str(int(time.time()))
msg = f"{ts}.{method}.{path}.{hashlib.sha256(raw.encode()).hexdigest()}"
sig = hmac.new(os.environ["TUNGKAO_SIGNING_SECRET"].encode(), msg.encode(), hashlib.sha256).hexdigest()
return requests.request(method, "https://api.tungkao.com" + path, data=raw or None, timeout=30, headers={
"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}", "Content-Type": "application/json",
"X-Tungkao-Timestamp": ts, "X-Tungkao-Signature": sig}).json()
print(tungkao("GET", "/v1/account"))- ทุกคำตอบเป็น JSON มี success และ request_id — ถ้าผิดพลาดจะมี error.code (เช่น KEY_EXPIRED, INSUFFICIENT_CREDITS) ดูทั้งหมดที่ /errors
- key มีวันหมดอายุตามที่เลือก (1–24 เดือน หรือไม่หมด) เราเตือนก่อน 30/7/1 วันทาง webhook api_key.expiring ต่ออายุได้ในหน้าร้าน key เดิมใช้ต่อได้
- ยืนยันโดเมน: key live 1 ตัวผูกได้ 1 เว็บ ไปที่ API key → 'ยืนยันโดเมน' ใส่โดเมน ดาวน์โหลดไฟล์ tungkao-verify-….html ไปวางที่ https://โดเมนคุณ/ (หรือใส่ DNS TXT _tungkao-verify.โดเมน) แล้วกดตรวจสอบ — ยังไม่ยืนยันจะได้ error DOMAIN_NOT_VERIFIED ยืนยันแล้วเปลี่ยนโดเมนไม่ได้ และบัญชีอื่นใช้โดเมนนี้ไม่ได้
- Secret key หลุด: กด 'รีคีย์ทันที' ได้ไม่จำกัดครั้ง key เก่าใช้ไม่ได้ทันที / key ของบริการหนึ่งใช้กับบริการอื่นไม่ได้ (WRONG_PRODUCT)
- ความปลอดภัยขั้นสูง (ทางเลือก): เปิด 'เซ็นคำขอ' ที่ key จะได้คีย์เซ็น tksign_… แล้วทุกคำขอต้องมี X-Tungkao-Timestamp และ X-Tungkao-Signature = HMAC-SHA256(คีย์เซ็น, เวลา.METHOD.path.sha256(body)) — ถึง Secret key หลุดก็ใช้ไม่ได้
- ส่ง header Accept-Language: th, en, lo, my, zh-CN, ko, ja, vi, km, id เพื่อเลือกภาษาข้อความ
ตรวจสลิปธนาคาร
slip_verifyตรวจว่าสลิปโอนเงินเป็นของจริง ยอดตรง โอนเข้าบัญชีคุณ และยังไม่เคยใช้ — เหมาะกับร้านที่ให้ลูกค้าแนบสลิป
ขั้นตอน
- ลูกค้าอัปโหลดรูปสลิป เว็บคุณอ่าน QR บนสลิป (ข้อความยาวๆ ขึ้นต้น 0041…)
- ส่ง qr_payload + ยอดที่ต้องได้ + บัญชีรับของคุณ มาที่ API
- รับออเดอร์เฉพาะเมื่อ status = VALID เท่านั้น
/v1/slip/verifycurl -X POST https://api.tungkao.com/v1/slip/verify \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"qr_payload":"0041000600000101030040220014…","expected_amount":"500.00","receivers":[{"bank":"KBANK","account_number":"1234567890"}]}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/slip/verify", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"qr_payload": "0041000600000101030040220014…",
"expected_amount": "500.00",
"receivers": [
{
"bank": "KBANK",
"account_number": "1234567890"
}
]
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/slip/verify");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"qr_payload" => "0041000600000101030040220014…",
"expected_amount" => "500.00",
"receivers" => [
[
"bank" => "KBANK",
"account_number" => "1234567890"
]
]
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/slip/verify",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"qr_payload": "0041000600000101030040220014…",
"expected_amount": "500.00",
"receivers": [
{
"bank": "KBANK",
"account_number": "1234567890"
}
]
},
timeout=30,
)
print(r.json())- ส่ง header Idempotency-Key (เช่นเลขออเดอร์) ถ้าเน็ตหลุดแล้วส่งซ้ำ จะไม่ถูกคิดเงินซ้ำ
- สลิปเดิมใช้ได้ครั้งเดียวต่อ key (ครั้งที่สองได้ DUPLICATE)
ฝากเงินด้วยสลิป
slip_depositระบบเติมเงินให้สมาชิกของเว็บคุณ: ตรวจสลิป บันทึกยอดฝากของสมาชิกคนนั้น และส่ง webhook บอกเว็บคุณ
ขั้นตอน
- ตั้งบัญชีรับเงินและ Webhook URL ที่ key ในหน้าร้าน
- ส่งสลิปพร้อม customer_ref (รหัสสมาชิกของคุณ)
- เมื่อได้ webhook deposit.succeeded (ตรวจลายเซ็นก่อน) ให้เติมเงินให้สมาชิก
/v1/deposits/slipcurl -X POST https://api.tungkao.com/v1/deposits/slip \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"qr_payload":"0041000600000101030040220014…","customer_ref":"member-1001","expected_amount":"300.00"}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/deposits/slip", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"qr_payload": "0041000600000101030040220014…",
"customer_ref": "member-1001",
"expected_amount": "300.00"
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/deposits/slip");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"qr_payload" => "0041000600000101030040220014…",
"customer_ref" => "member-1001",
"expected_amount" => "300.00"
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/deposits/slip",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"qr_payload": "0041000600000101030040220014…",
"customer_ref": "member-1001",
"expected_amount": "300.00"
},
timeout=30,
)
print(r.json())/v1/deposits/dep_xxxcurl -X GET https://api.tungkao.com/v1/deposits/dep_xxx \
-H "Authorization: Bearer $TUNGKAO_KEY"// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/deposits/dep_xxx", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}` },
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/deposits/dep_xxx");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY")],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.get(
"https://api.tungkao.com/v1/deposits/dep_xxx",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
timeout=30,
)
print(r.json())ตรวจลายเซ็น webhook
ทุก webhook มี header X-Tungkao-Signature: t=…,v1=… ต้องตรวจก่อนเชื่อข้อมูล (webhook secret ได้ตอนตั้ง URL ในหน้าร้าน)
import crypto from "node:crypto";
// ใช้ raw body (ข้อความดิบ) เท่านั้น ห้าม JSON.stringify ซ้ำ
function verify(rawBody, header, secret) {
const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header || "");
if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
const want = crypto.createHmac("sha256", secret).update(`${m[1]}.${rawBody}`).digest("hex");
return crypto.timingSafeEqual(Buffer.from(want), Buffer.from(m[2]));
}<?php
function verify(string $raw, string $header, string $secret): bool {
if (!preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m) || abs(time() - (int)$m[1]) > 300) return false;
return hash_equals(hash_hmac("sha256", $m[1] . "." . $raw, $secret), $m[2]);
}
$ok = verify(file_get_contents("php://input"), $_SERVER["HTTP_X_TUNGKAO_SIGNATURE"] ?? "", getenv("TUNGKAO_WEBHOOK_SECRET"));import hmac, hashlib, re, time
def verify(raw: bytes, header: str, secret: str) -> bool:
m = re.fullmatch(r"t=(\d+),v1=([0-9a-f]{64})", header or "")
if not m or abs(time.time() - int(m[1])) > 300:
return False
want = hmac.new(secret.encode(), m[1].encode() + b"." + raw, hashlib.sha256).hexdigest()
return hmac.compare_digest(want, m[2])ล็อกอินให้เว็บคุณ (Google, LINE, Facebook, TikTok, Discord)
ใส่ปุ่ม 'เข้าสู่ระบบด้วย …' ในเว็บคุณได้ทันที ไม่ต้องสมัครกับแต่ละค่ายเอง ได้ชื่อ อีเมล รูป รหัสสมาชิกถาวร และหน้าดูรายชื่อสมาชิก/ประวัติล็อกอิน แยกบริการตามค่าย: google_login, line_login, facebook_login, tiktok_login, discord_login
ขั้นตอน
- สร้าง key ของค่ายที่ต้องการ แล้วไปหน้า 'สมาชิกล็อกอิน' ตั้งชื่อเว็บ + Redirect URI (หน้าเว็บคุณที่รับผู้ใช้กลับ ต้องเป็น https และตรงทุกตัวอักษร)
- ปุ่มเข้าสู่ระบบของคุณพาผู้ใช้ไป /oauth/authorize พร้อม client_id (id ของ key), redirect_uri และ state (ค่าสุ่มใหม่ทุกครั้ง เก็บใน session)
- ผู้ใช้กลับมาที่ redirect_uri?code=…&state=… → ตรวจ state ให้ตรง → เซิร์ฟเวอร์เรียก POST /v1/login/token ภายใน 2 นาที
- ใช้ data.user (เช่น 7F3K9QX2-yourshopcom) เป็นรหัสสมาชิก คนเดิมได้รหัสเดิมเสมอ
/v1/login/tokencurl -X POST https://api.tungkao.com/v1/login/token \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"จาก redirect","redirect_uri":"https://yourshop.com/auth/callback"}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/login/token", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"code": "จาก redirect",
"redirect_uri": "https://yourshop.com/auth/callback"
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/login/token");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"code" => "จาก redirect",
"redirect_uri" => "https://yourshop.com/auth/callback"
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/login/token",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"code": "จาก redirect",
"redirect_uri": "https://yourshop.com/auth/callback"
},
timeout=30,
)
print(r.json())/v1/login/users?limit=50curl -X GET https://api.tungkao.com/v1/login/users?limit=50 \
-H "Authorization: Bearer $TUNGKAO_KEY"// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/login/users?limit=50", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}` },
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/login/users?limit=50");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY")],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.get(
"https://api.tungkao.com/v1/login/users?limit=50",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
timeout=30,
)
print(r.json())ตัวอย่างครบทั้งระบบ (ปุ่ม + รับกลับ + แลก code)
// npm i express express-session
import express from "express";
import session from "express-session";
import crypto from "node:crypto";
const KEY = process.env.TUNGKAO_KEY; // API key (tk_live_…) เก็บที่เซิร์ฟเวอร์เท่านั้น
const CLIENT_ID = process.env.TUNGKAO_CLIENT_ID; // id ของ key (เห็นในหน้าร้าน) ไม่ใช่ความลับ
const REDIRECT = "https://yourshop.com/auth/callback"; // ต้องตรงกับที่ลงทะเบียนทุกตัวอักษร
const app = express();
app.use(session({ secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, cookie: { secure: true, sameSite: "lax" } }));
// 1) ปุ่ม "เข้าสู่ระบบ" ลิงก์มาที่นี่
app.get("/auth/login", (req, res) => {
req.session.state = crypto.randomBytes(24).toString("base64url");
const u = new URL("https://api.tungkao.com/oauth/authorize");
u.search = new URLSearchParams({ client_id: CLIENT_ID, redirect_uri: REDIRECT, state: req.session.state });
res.redirect(u);
});
// 2) ผู้ใช้กลับมาพร้อม code
app.get("/auth/callback", async (req, res) => {
if (!req.query.state || req.query.state !== req.session.state) return res.status(400).send("state ไม่ตรง");
delete req.session.state;
if (req.query.error) return res.redirect("/login?cancelled=1");
// 3) แลก code เป็นข้อมูลผู้ใช้ (ภายใน 2 นาที)
const r = await fetch("https://api.tungkao.com/v1/login/token", {
method: "POST",
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ code: req.query.code, redirect_uri: REDIRECT }),
});
const j = await r.json();
if (!j.success) return res.status(400).send(j.error.message);
req.session.user = j.data; // j.data.user = รหัสสมาชิกถาวร เช่น 7F3K9QX2-yourshopcom
res.redirect("/");
});
app.listen(3000);<?php
// login.php — ปุ่ม "เข้าสู่ระบบ" ลิงก์มาที่ไฟล์นี้
session_start();
$CLIENT_ID = getenv("TUNGKAO_CLIENT_ID");
$REDIRECT = "https://yourshop.com/callback.php";
$_SESSION["state"] = bin2hex(random_bytes(24));
header("Location: https://api.tungkao.com/oauth/authorize?" . http_build_query([
"client_id" => $CLIENT_ID, "redirect_uri" => $REDIRECT, "state" => $_SESSION["state"],
]));
<?php
// callback.php — ผู้ใช้กลับมาที่นี่
session_start();
$REDIRECT = "https://yourshop.com/callback.php";
if (empty($_GET["state"]) || !hash_equals($_SESSION["state"] ?? "", $_GET["state"])) { http_response_code(400); exit("state ไม่ตรง"); }
unset($_SESSION["state"]);
if (!empty($_GET["error"])) { header("Location: /login.php?cancelled=1"); exit; }
$ch = curl_init("https://api.tungkao.com/v1/login/token");
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["code" => $_GET["code"], "redirect_uri" => $REDIRECT]),
]);
$j = json_decode(curl_exec($ch), true);
if (!$j["success"]) { http_response_code(400); exit($j["error"]["message"]); }
$_SESSION["user"] = $j["data"]; // $j["data"]["user"] = รหัสสมาชิกถาวร
header("Location: /");# pip install flask requests
import os, secrets, requests
from urllib.parse import urlencode
from flask import Flask, session, request, redirect, abort
app = Flask(__name__)
app.secret_key = os.environ["SESSION_SECRET"]
KEY = os.environ["TUNGKAO_KEY"]
CLIENT_ID = os.environ["TUNGKAO_CLIENT_ID"]
REDIRECT = "https://yourshop.com/auth/callback"
@app.get("/auth/login")
def login():
session["state"] = secrets.token_urlsafe(24)
return redirect("https://api.tungkao.com/oauth/authorize?" + urlencode({"client_id": CLIENT_ID, "redirect_uri": REDIRECT, "state": session["state"]}))
@app.get("/auth/callback")
def callback():
if not request.args.get("state") or not secrets.compare_digest(request.args["state"], session.pop("state", "")):
abort(400)
if request.args.get("error"):
return redirect("/login?cancelled=1")
r = requests.post("https://api.tungkao.com/v1/login/token", headers={"Authorization": f"Bearer {KEY}"},
json={"code": request.args["code"], "redirect_uri": REDIRECT}, timeout=30).json()
if not r["success"]:
abort(400, r["error"]["message"])
session["user"] = r["data"] # r["data"]["user"] = รหัสสมาชิกถาวร
return redirect("/")| ค่าย | บริการ | ได้อะไร |
|---|---|---|
| G Google | google_login | ชื่อ อีเมล (ยืนยันแล้ว) รูป |
| L LINE | line_login | ชื่อ รูป อีเมล (ถ้าผู้ใช้ยินยอม) |
| f Facebook | facebook_login | ชื่อ รูป อีเมล |
| ♪ TikTok | tiktok_login | ชื่อที่แสดง รูป (ไม่มีอีเมล) |
| D Discord | discord_login | ชื่อ รูป อีเมล |
- คิดเครดิตตอนผู้ใช้ล็อกอินสำเร็จ: ค่าต่อครั้ง + ค่าสมาชิกใหม่ (ครั้งแรก) ดูราคาปัจจุบันในการ์ดบริการ
- key โหมด test ใช้ Redirect URI http://localhost ได้และไม่คิดเครดิต
- ห้ามใส่ API key ในลิงก์หรือหน้าเว็บ — /oauth/authorize ใช้แค่ client_id (id ของ key) ซึ่งเปิดเผยได้
แจ้งเตือนทาง Telegram
telegram_notifyส่งข้อความถึงสมาชิกของคุณทาง Telegram ผ่านบอทกลางของ TUNGKAO ไม่ต้องสร้างบอทเอง เช่น แจ้งยอดเข้า สถานะออเดอร์ รหัส OTP
ขั้นตอน
- ขอลิงก์เชื่อมให้สมาชิก (ref = รหัสสมาชิกของคุณ) แล้วแสดงปุ่ม 'เชื่อม Telegram' ที่เปิดลิงก์นั้น (อายุ 30 นาที ใช้ครั้งเดียว)
- สมาชิกกด Start กับบอท → เชื่อมต่อแล้ว (ดูรายชื่อได้ที่ /v1/telegram/recipients)
- ส่งข้อความด้วย ref เดียว หรือ refs ได้สูงสุด 100 คน ใส่ตัวหนา (parse_mode: HTML) และปุ่มลิงก์ได้
/v1/telegram/linkcurl -X POST https://api.tungkao.com/v1/telegram/link \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"ref":"member-1001"}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/telegram/link", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"ref": "member-1001"
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/telegram/link");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"ref" => "member-1001"
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/telegram/link",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"ref": "member-1001"
},
timeout=30,
)
print(r.json())/v1/telegram/sendcurl -X POST https://api.tungkao.com/v1/telegram/send \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"ref":"member-1001","text":"<b>ยอดเข้าแล้ว</b> 500 บาท","parse_mode":"HTML","button":{"text":"ดูรายการ","url":"https://yourshop.com/orders/1"}}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/telegram/send", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"ref": "member-1001",
"text": "<b>ยอดเข้าแล้ว</b> 500 บาท",
"parse_mode": "HTML",
"button": {
"text": "ดูรายการ",
"url": "https://yourshop.com/orders/1"
}
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/telegram/send");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"ref" => "member-1001",
"text" => "<b>ยอดเข้าแล้ว</b> 500 บาท",
"parse_mode" => "HTML",
"button" => [
"text" => "ดูรายการ",
"url" => "https://yourshop.com/orders/1"
]
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/telegram/send",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"ref": "member-1001",
"text": "<b>ยอดเข้าแล้ว</b> 500 บาท",
"parse_mode": "HTML",
"button": {
"text": "ดูรายการ",
"url": "https://yourshop.com/orders/1"
}
},
timeout=30,
)
print(r.json())/v1/telegram/messagescurl -X GET https://api.tungkao.com/v1/telegram/messages \
-H "Authorization: Bearer $TUNGKAO_KEY"// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/telegram/messages", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}` },
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/telegram/messages");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY")],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.get(
"https://api.tungkao.com/v1/telegram/messages",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
timeout=30,
)
print(r.json())- คิดเครดิตเฉพาะข้อความที่ส่งถึง — ส่งไม่ได้ (เช่น ผู้ใช้บล็อกบอท) คืนเครดิตอัตโนมัติ และผู้รับนั้นจะถูกพัก
แจ้งเตือนทาง Discord
discord_notifyส่งข้อความเข้าห้อง Discord ของคุณหรือของลูกค้า เช่น แจ้งออเดอร์ใหม่ให้ทีมงาน
ขั้นตอน
- ใน Discord: ตั้งค่าห้อง → Integrations → Webhooks → New Webhook → Copy Webhook URL
- ลงทะเบียน URL กับ API พร้อม ref (ชื่อเรียกห้องของคุณ) — เราเก็บ URL แบบเข้ารหัส
- ส่งข้อความด้วย ref (ปิดการ @everyone ให้อัตโนมัติ)
/v1/discord/webhookscurl -X POST https://api.tungkao.com/v1/discord/webhooks \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"ref":"orders-room","url":"https://discord.com/api/webhooks/123/abc…"}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/discord/webhooks", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"ref": "orders-room",
"url": "https://discord.com/api/webhooks/123/abc…"
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/discord/webhooks");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"ref" => "orders-room",
"url" => "https://discord.com/api/webhooks/123/abc…"
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/discord/webhooks",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"ref": "orders-room",
"url": "https://discord.com/api/webhooks/123/abc…"
},
timeout=30,
)
print(r.json())/v1/discord/sendcurl -X POST https://api.tungkao.com/v1/discord/send \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"ref":"orders-room","text":"🛒 ออเดอร์ใหม่ #1001 ยอด 590 บาท"}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/discord/send", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"ref": "orders-room",
"text": "🛒 ออเดอร์ใหม่ #1001 ยอด 590 บาท"
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/discord/send");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"ref" => "orders-room",
"text" => "🛒 ออเดอร์ใหม่ #1001 ยอด 590 บาท"
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/discord/send",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"ref": "orders-room",
"text": "🛒 ออเดอร์ใหม่ #1001 ยอด 590 บาท"
},
timeout=30,
)
print(r.json())รับชำระคริปโต (เร็วๆ นี้)
cryptoให้สมาชิกแต่ละคนมีที่อยู่ USDT-TRC20 / BTC / USDT-BEP20 ของตัวเอง เงินเข้าแล้วแจ้งเว็บคุณทาง webhook — กำลังเปิดให้บริการ
ขั้นตอน
- ขอที่อยู่ให้สมาชิก
- สมาชิกโอนเข้า
- เติมเงินเมื่อได้ webhook crypto.deposit.confirmed
/v1/crypto/addressescurl -X POST https://api.tungkao.com/v1/crypto/addresses \
-H "Authorization: Bearer $TUNGKAO_KEY" \
-H "Content-Type: application/json" \
-d '{"asset":"USDT-TRC20","customer_ref":"member-1001"}'// Node.js 18+ (ไม่ต้องติดตั้งอะไรเพิ่ม)
const res = await fetch("https://api.tungkao.com/v1/crypto/addresses", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TUNGKAO_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"asset": "USDT-TRC20",
"customer_ref": "member-1001"
}),
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.tungkao.com/v1/crypto/addresses");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TUNGKAO_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"asset" => "USDT-TRC20",
"customer_ref" => "member-1001"
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);import os, requests # pip install requests
r = requests.post(
"https://api.tungkao.com/v1/crypto/addresses",
headers={"Authorization": f"Bearer {os.environ['TUNGKAO_KEY']}"},
json={
"asset": "USDT-TRC20",
"customer_ref": "member-1001"
},
timeout=30,
)
print(r.json())