GCash
รับชำระเงินจ าก GCash กระเป๋าเงินดิจิทัลอันดับ 1 ของฟิลิปปินส์ที่มีผู้ใช้งานมากกว่า 86 ล้านราย และเป็นวิธีการชำระเงินแบบไม่ใช้เงินสดที่ได้รับความนิยมสูงสุดในประเทศ
ภาพรวม
จำนวนผู้ใช้งานเป็นค่าประมาณและอิงจากข้อมูลที่เปิดเผยต่อสาธารณะ จำนวนผู้ใช้งานที่ใช้งานจริงอาจแตกต่างกัน
GCash คือกระเป๋าเงินมือถือชั้นนำในฟิลิปปินส์ ดำเนินการโดย Mynt (Globe Fintech Innovations) เป็นวิธีการชำระเงินที่ชาวฟิลิปปินส์นิยมใช้ ตั้งแต่การชำระบิลและการส่งเงิน ไปจนถึงอีคอมเมิร์ซและการโอนเงินระหว่างบุคคล
คุณสมบัติหลัก:
- ✅ ผู้นำตลาด - มีผู้ใช้งานมากกว่า 86 ล้านรายทั่วฟิลิปปินส์
- ✅ การยืนยันที่รวดเร็ว - การตรวจสอบการชำระเงินแบบเรียลไทม์เกือบทันที (โดยทั่วไปภายในไม่กี่วินาที)
- ✅ ความไว้วางใจสูง - ได้รับการสนับสนุนจาก Globe Telecom และ Ant Group
- ✅ การยอมรับอย่างกว้างขวาง - ใช้โดยผู้ซื้อออนไลน์มากกว่า 60%
- ✅ หลากหลายการใช้งาน - บิล ช็อปปิ้ง โอนเงิน การลงทุน
- ✅ ความยุ่งยากต่ำ - การยืนยันตัวตน MPIN ที่รวดเร็ว
ภูมิภาคที่รองรับ
| ภูมิภาค | สกุลเงิน | จำนวนเงินขั้นต่ำ | จำนวนเงินสูงสุด | วงเงินรายเดือน |
|---|---|---|---|---|
| ฟิลิปป ินส์ | PHP | ₱1.00 | ₱100,000 | แตกต่างกัน* |
*วงเงินรายเดือนขึ้นอยู่กับระดับการยืนยันบัญชี GCash ของลูกค้า
ข้อจำกัดบัญชีตามระดับการยืนยัน
| ระดับการยืนยัน | วงเงินกระเป๋าเงิน | ต่อธุรกรรม | วงเงินรายเดือน |
|---|---|---|---|
| ไม่ได้ยืนยัน | ₱100,000 | ₱8,000 | ₱100,000 |
| ยืนยันบางส่วน (โทรศัพท์ + ID) | ₱100,000 | ₱50,000 | ₱100,000 |
| ยืนยันเต็มรูปแบบ (KYC เสร็จสมบูรณ์) | ₱500,000 | ₱100,000 | ₱500,000 |
| GSave/GInvest (คุณสมบัติธนาคาร) | ไม่จำกัด | ₱100,000 | ไม่จำกัด |
วิธีการทำงาน
ประสบการณ์ของลูกค้า:
- ลูกค้าเลือก GCash ที่หน้าชำระเงิน
- ถูกเปลี่ยนเส้นทางไปยังหน้าอนุญาต GCash
- แอป GCash เปิดโดยอัตโนมัติ (deep link บนมือถือ)
- ลูกค้าตรวจสอบรายละเอียดการชำระเงิน
- ป้อน MPIN 4 หลักเพื่อยืนยัน
- กลับไปยังเว็บไซต์ผู้ค้า
- ได้รับการยืนยัน SMS จาก GCash
เวลาในการดำเนินการโดยทั่วไป: 30-60 วินาที
ตัวอย่างขั้นตอนการชำระเงิน
ขั้นตอนการชำระเงินบนมือถือ:

ประสบการณ์กระเป๋าเงินมือถือที่ราบรื่น:
- ❶ เลือก GCash - ลูกค้าแตะ GCash ที่หน้าชำระเงินบนมือถือ
- ❷ เปลี่ยนเส้นทางแอป - Deep link เปิดแอป GCash โดยอัตโนมัติ
- ❸ ตรวจสอบการชำระเงิน - แสดงรายละเอียดธุรกรรม (ผู้ค้า, จำนวนเงิน)
- ❹ ยืนยันตัวตน - ป้อน MPIN 4 หลักเพื่ออนุญาต
- ❺ ประมวลผลการชำระเงิน - หักเงินจากกระเป๋าเงิน GCash
- ❻ การยืนยัน SMS - รับข้อความยืนยันธุรกรรม
- ❼ กลับไปยังผู้ค้า - เปลี่ยนเส้นทางกลับไปยังหน้าความสำเร็จของผู้ค้า
ขั้นตอนการชำระเงินบนเดสก์ท็อป:

การสแกน QR code สำหรับเดสก์ท็อป:
- ❶ เลือก GCash - ลูกค้าเลือกการชำระเงิน GCash บนเดสก์ท็อป
- ❷ สร้าง QR - ระบบสร้าง QR code การชำระเงิน GCash ที่ไม่ซ้ำกัน
- ❸ แสดง QR - แสดง QR code บนหน้าจอพร้อมรายละเอียดการชำระเงิน
- ❹ เปิดแอป GCash - ลูกค้าเปิด GCash บนอุปกรณ์มือถือ
- ❺ สแกน QR - ใช้สแกนเนอร์ในแอปเพื่อจับภาพ QR code
- ❻ ตรวจสอบรายละเอียด - แสดงจำนวนเงินและชื่อผู้ค้า
- ❼ ป้อน MPIN - ยืนยันตัวตนด้วย PIN มือถือ 4 หลัก
- ❽ ยืนยัน - แตะเพื่ออนุญาตการชำระเงิน
- ❾ สำเร็จ - เดสก์ท็อปแสดงการยืนยัน การชำระเงินเสร็จสมบูรณ์
การนำไปใช้
ขั้นตอนที่ 1: สร้าง GCash Source
- cURL
- Node.js
- PHP
- Python
- Ruby
- Go
curl https://api.omise.co/sources \
-u skey_test_YOUR_SECRET_KEY: \
-d "type=gcash" \
-d "amount=50000" \
-d "currency=PHP"
const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});
const source = await omise.sources.create({
type: 'gcash',
amount: 50000, // ₱500.00
currency: 'PHP'
});
console.log('GCash source:', source.id);
<?php
$source = OmiseSource::create(array(
'type' => 'gcash',
'amount' => 50000,
'currency' => 'PHP'
));
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
source = omise.Source.create(
type='gcash',
amount=50000,
currency='PHP'
)
require 'omise'
Omise.api_key = 'skey_test_YOUR_SECRET_KEY'
source = Omise::Source.create({
type: 'gcash',
amount: 50000,
currency: 'PHP'
})
source, err := client.Sources().Create(&operations.CreateSource{
Type: "gcash",
Amount: 50000,
Currency: "PHP",
})
Response:
{
"object": "source",
"id": "src_test_5rt6s9vah5lkvi1rh9c",
"type": "gcash",
"flow": "redirect",
"amount": 50000,
"currency": "PHP"
}
ขั้นตอนที่ 2: สร้าง Charge และ Redirect
app.post('/checkout/gcash', async (req, res) => {
try {
const { amount, order_id, customer_email, customer_mobile } = req.body;
// ตรวจสอบจำนวนเงิน
if (amount < 100) { // ขั้นต่ำ ₱1.00
return res.status(400).json({
error: 'Minimum amount is ₱1.00'
});
}
if (amount > 10000000) { // สูงสุด ₱100,000
return res.status(400).json({
error: 'Maximum amount is ₱100,000'
});
}
// สร้าง source
const source = await omise.sources.create({
type: 'gcash',
amount: amount,
currency: 'PHP'
});
// สร้าง charge
const charge = await omise.charges.create({
amount: amount,
currency: 'PHP',
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`,
metadata: {
order_id: order_id,
customer_email: customer_email,
customer_mobile: customer_mobile,
payment_method: 'gcash'
}
});
// Redirect ไปยัง GCash
res.redirect(charge.authorize_uri);
} catch (error) {
console.error('GCash error:', error);
res.status(500).json({ error: error.message });
}
});
ขั้นตอนที่ 3: จัดการ Return Callback
app.get('/payment/callback', async (req, res) => {
try {
const chargeId = req.query.charge_id;
const charge = await omise.charges.retrieve(chargeId);
if (charge.status === 'successful') {
await processOrder(charge.metadata.order_id);
res.redirect(`/order-success?order=${charge.metadata.order_id}`);
} else if (charge.status === 'failed') {
res.redirect(`/payment-failed?reason=${charge.failure_message}`);
} else {
res.redirect('/payment-pending');
}
} catch (error) {
res.redirect('/payment-error');
}
});
ขั้นตอนที่ 4: จัดการ Webhook
app.post('/webhooks/omise', async (req, res) => {
const event = req.body;
if (event.key === 'charge.complete') {
const charge = event.data;
if (charge.source.type === 'gcash') {
if (charge.status === 'successful') {
await fulfillOrder(charge.metadata.order_id);
await sendSMSConfirmation(charge.metadata.customer_mobile);
} else if (charge.status === 'failed') {
await handleFailedPayment(charge.metadata.order_id);
}
}
}
res.sendStatus(200);
});
ตัวอย่างการนำไปใช้แบบสมบูรณ์
const express = require('express');
const omise = require('omise')({
secretKey: process.env.OMISE_SECRET_KEY
});
const app = express();
app.use(express.json());
// การกำหนดค่า GCash
const GCASH_CONFIG = {
currency: 'PHP',
minAmount: 100, // ₱1.00
maxAmount: 10000000, // ₱100,000
displayName: 'GCash',
timeout: 15 * 60 * 1000 // 15 นาที
};
// สร้างการชำระเงิน GCash
app.post('/checkout/gcash', async (req, res) => {
try {
const { amount, order_id, customer_email, customer_mobile, customer_name } = req.body;
// ตรวจสอบสกุลเงิน
if (req.body.currency && req.body.currency !== 'PHP') {
return res.status(400).json({
error: 'GCash only supports PHP currency'
});
}
// ตรวจสอบจำนวนเงิน
if (amount < GCASH_CONFIG.minAmount) {
return res.status(400).json({
error: `Minimum amount is ₱${GCASH_CONFIG.minAmount / 100}`
});
}
if (amount > GCASH_CONFIG.maxAmount) {
return res.status(400).json({
error: `Maximum amount is ₱${GCASH_CONFIG.maxAmount / 100}`
});
}
// สร้าง source
const source = await omise.sources.create({
type: 'gcash',
amount: amount,
currency: GCASH_CONFIG.currency
});
// สร้าง charge
const charge = await omise.charges.create({
amount: amount,
currency: GCASH_CONFIG.currency,
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`,
metadata: {
order_id: order_id,
customer_email: customer_email,
customer_mobile: customer_mobile,
customer_name: customer_name,
payment_method: 'gcash'
}
});
// บันทึกสำหรับการติดตาม
console.log(`GCash payment initiated: ${charge.id} for order ${order_id}`);
// ส่งคืน authorization URL
res.json({
authorize_uri: charge.authorize_uri,
charge_id: charge.id
});
} catch (error) {
console.error('GCash error:', error);
res.status(500).json({ error: error.message });
}
});
// Payment callback
app.get('/payment/callback', async (req, res) => {
try {
const charge = await omise.charges.retrieve(req.query.charge_id);
if (charge.status === 'successful') {
res.redirect(`/order-confirmation?order=${charge.metadata.order_id}`);
} else {
res.redirect(`/payment-failed?charge=${req.query.charge_id}`);
}
} catch (error) {
res.redirect('/payment-error');
}
});
// Webhook handler
app.post('/webhooks/omise', async (req, res) => {
const event = req.body;
if (event.key === 'charge.complete' && event.data.source.type === 'gcash') {
const charge = event.data;
if (charge.status === 'successful') {
await fulfillOrder(charge.metadata.order_id);
await sendReceipt(charge.metadata.customer_email, charge);
console.log(`GCash payment successful: ${charge.id}`);
} else {
await cancelOrder(charge.metadata.order_id);
console.log(`GCash payment failed: ${charge.id}`);
}
}
res.sendStatus(200);
});
app.listen(3000);
การรองรับการคืนเงิน
GCash รองรับการคืนเงินเต็มจำนวนและบางส่วนภายใน180 วัน:
// คืนเงินเต็มจำนวน
const fullRefund = await omise.charges.refund('chrg_test_...', {
amount: 50000 // จำนวนเงินเต็ม
});
// คืนเงินบางส่วน
const partialRefund = await omise.charges.refund('chrg_test_...', {
amount: 25000 // จำนวนเงินบางส่วน
});
console.log('Refund status:', fullRefund.status);
การคืนเงินจะถูกประมวลผลกลับไปยังกระเป๋าเงิน GCash ของลูกค้าภายใน 5-7 วันทำการ
ปัญหาทั่วไปและการแก้ไขปัญหา
ปัญหา: ลูกค้าไม่มีแอป GCash
สาเหตุ: ลูกค้าเลือก GCash แต่ไม่มีแอปที่ติดตั้ง
วิธีแก้ไข:
// แสดงความต้องการแอปและลิงก์ดาวน์โหลด
function checkGCashApp() {
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
if (!isMobile) {
alert('GCash is only available on mobile devices.');
return false;
}
// แสดงลิงก์แอป
const isAndroid = /Android/i.test(navigator.userAgent);
const appLink = isAndroid
? 'https://play.google.com/store/apps/details?id=com.globe.gcash.android'
: 'https://apps.apple.com/ph/app/gcash/id520020791';
showMessage(`GCash app required. <a href="${appLink}">Download here</a>`);
return true;
}
ปัญหา: ยอดเงินไม่เพียงพอ
ข้อผิดพลาด: การชำระเงินถูกปฏิเสธ - เงินไม่เพียงพอ
วิธีแก้ไข:
if (charge.failure_code === 'insufficient_balance') {
showMessage(
'Kulang ang GCash balance. Mag-cash in muna o gumamit ng ibang payment method.'
);
showCashInOptions();
}
ปัญหา: เกินวงเงินธุรกรรม
ข้อผิดพลาด: ธุรกรรมเกินวงเงินบัญชี
วิธีแก้ไข:
if (charge.failure_code === 'transaction_limit_exceeded') {
showMessage(
'Lumampas sa limit ng iyong GCash account. ' +
'I-verify ang account o gumamit ng ibang payment method.'
);
showVerificationLink();
}
ปัญหา: หมดเวลาชำระเงิน
สาเหตุ: ลูกค้าไม่ได้ชำระเงินภายใน 15 นาที
วิธีแก้ไข:
const TIMEOUT = 15 * 60 * 1000;
setTimeout(() => {
if (!paymentCompleted) {
showMessage('Nag-timeout ang payment. Subukan ulit.');
enableRetry();
}
}, TIMEOUT);
แนวทางปฏิบัติที่ดีที่สุด
1. แสดงเป็นภาษาฟิลิปิโน/ตากาล็อก
<div class="gcash-payment">
<h3>Magbayad gamit ang GCash</h3>
<div class="instructions">
<ol>
<li>Siguruhing nakainstall ang GCash app</li>
<li>May sapat na balance sa GCash wallet</li>
<li>Ide-redirect ka sa GCash app</li>
<li>I-enter ang iyong 4-digit MPIN</li>
</ol>
</div>
<p class="help-text">
Wala pang GCash?
<a href="https://www.gcash.com" target="_blank">Mag-register dito</a>
</p>
</div>
2. การตรวจจับเฉพาะมือถือ
function validateGCashPayment() {
const userAgent = navigator.userAgent;
const isMobile = /Android|iPhone|iPad|iPod/i.test(userAgent);
if (!isMobile) {
return {
valid: false,
message: 'GCash ay available lang sa mobile devices'
};
}
return { valid: true };
}
3. จัดการ Deep Links
function openGCashApp(authorizeUri) {
// Redirect ไปยัง GCash
window.location = authorizeUri;
// Fallback หากแอปไม่เปิด
setTimeout(() => {
if (!document.hidden) {
showInstallPrompt();
}
}, 2500);
}
function showInstallPrompt() {
const isAndroid = /Android/i.test(navigator.userAgent);
const downloadUrl = isAndroid
? 'https://play.google.com/store/apps/details?id=com.globe.gcash.android'
: 'https://apps.apple.com/ph/app/gcash/id520020791';
if (confirm('GCash app hindi nakainstall. I-download ngayon?')) {
window.location = downloadUrl;
}
}
4. การจัดรูปแบบจำนวนเงิน
function formatPHP(amount) {
return new Intl.NumberFormat('en-PH', {
style: 'currency',
currency: 'PHP',
minimumFractionDigits: 2,
maximumFractionDigits: 2
}).format(amount / 100);
}
// การใช้งาน
const displayAmount = formatPHP(50000); // "₱500.00"
5. แสดงตัวเลือก Cash-In
<div class="gcash-cash-in">
<h4>Paano mag-cash in sa GCash:</h4>
<ul>
<li><strong>ธนาคาร Transfer</strong> - BPI, BDO, UnionBank, etc.</li>
<li><strong>7-Eleven</strong> - CLiQQ Kiosk</li>
<li><strong>Remittance</strong> - Cebuana, M Lhuillier, Palawan</li>
<li><strong>Online Banking</strong> - Instapay, PESONet</li>
<li><strong>GCash Padala</strong> - Bayad Centers nationwide</li>
</ul>
</div>
การทดสอบ
ข้อมูลรับรองการทดสอบ
ใช้ข้อมูลรับรองโหมดทดสอบ Omise:
- Secret Key:
skey_test_YOUR_SECRET_KEY - Public Key:
pkey_test_YOUR_PUBLIC_KEY
จำนวนเงินทดสอบ
| จำนวนเงิน (PHP) | ผลลัพธ์ที่คาดหวัง |
|---|---|
| 100 - 99999 | Success |
| 100000 | Insufficient balance |
| 100001 | Transaction declined |
ขั้นตอนการทดสอบ
- สร้าง charge ด้วยข้อมูลรับรองการทดสอบ
- ใช้จำนวนเงินทดสอบข้างต้น
- ชำระเงินใน GCash test environment
- ตรวจสอบว่าได้รับ webhook
- ตรวจสอบสถานะ charge
คำถามที่พบบ่อย
GCash คืออะไร?
GCash คือกระเป๋าเงินมือถือชั้นนำของฟิลิปปินส์ที่มีผู้ใช้งานมากกว่า 86 ล้านราย ดำเนินการโดย Mynt (Globe Fintech Innovations) และเป็นวิธีการชำระเงินแบบไม่ใช้เงินสดที่ได้รับความนิยมมากที่สุดในฟิลิปปินส์
ลูกค้าจำเป็นต้องมีบัญชี GCash หรือไม่?
ใช่ ลูกค้าต้องติดตั้งแอปมือถือ GCash และมีบัญชี GCash ที่เปิดใช้งานซึ่งเชื่อมโยงกับหมายเลขโทรศัพท์มือถือของพวกเขา
ข้อจำกัดการทำธุรกรรมคืออะไร?
- ขั้นต่ำ: ₱1.00
- สูงสุด: ₱100,000 ต่อธุรกรรม
ข้อจำกัดยังขึ้นอยู่กับระดับการยืนยันบัญชีของลูกค้า (ไม่ได้ยืนยัน, ยืนยันบางส่วน, ยืนยันเต็มรูปแบบ)
การชำระเงิ นใช้เวลานานเท่าไร?
การชำระเงิน GCash โดยทั่วไปเกิดขึ้นภายใน 1-3 วันทำการ ตรวจสอบแดชบอร์ด Omise ของคุณสำหรับตารางการชำระเงินเฉพาะ
ฉันสามารถคืนเงินการชำระเงิน GCash ได้หรือไม่?
ได้ GCash รองรับการคืนเงินเต็มจำนวนและบางส่วนภายใน 180 วันของธุรกรรมเดิม
จะเกิดอะไรขึ้นหากลูกค้ามียอดเงินไม่เพียงพอ?
การชำระเงินจะถูกปฏิเสธ ลูกค้าสามารถเติมเงินเข้ากระเป๋าเงิน GCash ผ่าน:
- การโอนเงินธนาคาร (BPI, BDO, UnionBank ฯลฯ)
- 7-Eleven CLiQQ kiosks
- ศูนย์โอนเงิน (Cebuana, M Lhuillier, Palawan)
- ธนาคารออนไลน์ (Instapay, PESONet)
- ศูนย์ GCash Padala ทั่วประเทศ
GCash ทำงานบนเดสก์ท็อปหรือไม่?
ไม่ GCash ต้องใช้แอปมือถือและเป็นเฉพาะมือถือเท่านั้น ผู้ใช้เดสก์ท็อปควรได้รับแสดงวิธีการชำระเงินทางเลือกเช่นบัตรเครดิตหรือธนาคารออนไลน์
ฉันควรแสดงคำแนะนำเป็นภาษาฟิลิปิโน/ตากาล็อกหรือไม่?
ใช่! เนื่องจาก GCash เป็นเฉพาะฟิลิปปินส์ การแสดงคำแนะนำเป็นภาษาฟิลิปิโนหรือตากาล็อกจะช่วยปรับปรุงประสบการณ์ผู้ใช้และอัตราการแปลงอย่างมาก
การทดสอบ
โหมดทดสอบ
GCash สามารถทดสอบได้โดยใช้ test API keys ของคุณ ในโหมดทดสอบ:
ข้อมูลรับรองการทดสอบ:
- ใช้ test API keys (skey_test_xxx)
- สกุลเงิน: PHP (เ ปโซฟิลิปปินส์)
- ไม่ต้องมีบัญชี GCash จริงสำหรับการทดสอบ
ขั้นตอนการทดสอบ:
- สร้าง source และ charge ด้วย test API keys
- ลูกค้า redirect ไปยัง test
authorize_uri - หน้า test จำลองการอนุญาต GCash
- ใช้ Actions ของ Omise Dashboard เพื่อทำเครื่องหมาย charge เป็นสำเร็จ/ล้มเหลว
- ตรวจสอบการจัดการ webhook และ return_uri
การนำไปใช้การทดสอบ:
// ทดสอบการชำระเงิน GCash
const source = await omise.sources.create({
type: 'gcash',
amount: 10000, // ₱100.00
currency: 'PHP'
});
const charge = await omise.charges.create({
amount: 10000,
currency: 'PHP',
source: source.id,
return_uri: 'https://example.com/callback'
});
console.log('Test authorize URL:', charge.authorize_uri);
สถานการณ์ทดสอบ:
- การชำระเงินสำเร็จ: ตรวจสอบขั้นตอนการปฏิบัติตามคำสั่งซื้อ
- การชำระเงินล้มเหลว: ทดสอบการจัดการข้อผิดพลาด
- ข้อจำกัดจำนวนเงิน: ทดสอบจำนวนเงินขั้นต่ำและสูงสุด
- ขั้นตอนมือถือ: ทดสอบการเชื่อมโยงลึกไปยังแอป GCash
- ยอดเงินไม่เพียงพอ: จำลองยอดเงินในกระเป๋าเงินต่ำ
- หมดเวลา: ทดสอบสถานการณ์การชำระเงินที่ถูกละทิ้ง
- การส่ง Webhook: ตรวจสอบการแจ้งเตือน webhook ทั้งหมด
หมายเหตุที่สำคัญ:
- โหมดทดสอบไม่เชื่อมต่อกับเซิร์ฟเวอร์ GCash จริง
- ใช้แดชบอร์ดเพื่อจำลองผลลัพธ์การชำระเงิน
- ทดสอบขั้นตอนแอปมือถืออย่างละเอียด
- ตรวจสอบการจัดการ webhook สำหรับสถานะ charge ทั้งหมด
- ทดสอบการตรวจสอบจำนวนเงินสำหรับสกุลเงิน PHP
สำหรับแนวทางการทดสอบที่ครอบคลุม โปรดดูเอกสารการทดสอบ
แหล่งข้อมูลที่เกี่ยวข้อง
- ภาพรวมกระเป๋าเงินดิจิทัล - ตัวเลือกกระเป๋าเงินทั้งหมด
- Alipay+ - GCash ผ่านเครือข่าย Alipay+
- การชำระเงิน QR - การชำระเงินมือถือทางเลือก
- การคืนเงิน - นโยบายการคืนเงิน
- การทดสอบ - ทดสอบการรวม GCash
- Webhooks - นำ webhooks ไปใช้