Appearance
Tài liệu kỹ thuật Webhook
Method
Method: POST
Header
json
{
'Content-Type: application/json',
'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjoiMDkwMjUwNjA5OSIsImltZWkiOiI0MDE0NC1iZmNiNzJjMGIyMjczNjZiZy'
}
Params POST
json
{
"transactions": [
{
"id": "55834",
"gateway": "MBB",
"transactionDate": "2024-11-02T09:07:10.000Z",
"transactionNumber": "FT24307258002351",
"accountNumber": "0708077478",
"content": "HELLO MBBANK- Ma GD ACSP/ Na453504",
"transferType": "IN",
"transferAmount": 2000,
"checksum": 767c8af6aab9118a40e1e5b2f9afc312
}
]
}
Response
json
{
"success": true,
}
Code mẫu
php
<?php
// Token hợp lệ của bạn
$expectedToken = 'your_expected_token_here'; // Thay bằng Bearer token mong muốn
// Lấy token từ header
$headers = getallheaders();
if (isset($headers['Authorization'])) {
$authHeader = $headers['Authorization'];
// Tách token từ chuỗi Bearer
if (preg_match('/Bearer\s(\S+)/', $authHeader, $matches)) {
$receivedToken = $matches[1];
} else {
// Nếu header Authorization không đúng định dạng
$response = [
'success' => false,
'message' => 'Invalid Authorization header format'
];
http_response_code(401);
header('Content-Type: application/json');
echo json_encode($response);
exit;
}
} else {
// Nếu không có header Authorization
$response = [
'success' => false,
'message' => 'Authorization header not found'
];
http_response_code(401);
header('Content-Type: application/json');
echo json_encode($response);
exit;
}
// So sánh token nhận được với token hợp lệ
if ($receivedToken !== $expectedToken) {
$response = [
'success' => false,
'message' => 'Invalid token'
];
http_response_code(403);
header('Content-Type: application/json');
echo json_encode($response);
exit;
}
// Đặt nội dung JSON từ webhook vào biến
$requestBody = file_get_contents('php://input');
// Chuyển đổi nội dung JSON thành mảng
$data = json_decode($requestBody, true);
if (json_last_error() === JSON_ERROR_NONE) {
// Kiểm tra xem có thuộc tính 'transactions' không
if (isset($data['transactions']) && is_array($data['transactions'])) {
// Xử lý từng giao dịch
foreach ($data['transactions'] as $transaction) {
// Xử lý giao dịch ở đây (ví dụ: lưu vào cơ sở dữ liệu)
// $transaction['id']
// $transaction['gateway']
// $transaction['transactionDate']
// $transaction['transactionNumber']
// $transaction['accountNumber']
// $transaction['content']
// $transaction['transferType']
// $transaction['transferAmount']
}
// Phản hồi thành công
$response = [
'success' => true,
'message' => 'Transactions processed successfully'
];
http_response_code(200);
} else {
// Phản hồi lỗi nếu không có 'transactions'
$response = [
'success' => false,
'message' => 'Invalid payload, transactions not found'
];
http_response_code(400);
}
} else {
// Phản hồi lỗi nếu JSON không hợp lệ
$response = [
'success' => false,
'message' => 'Invalid JSON'
];
http_response_code(400);
}
// Thiết lập header Content-Type là application/json
header('Content-Type: application/json');
// Xuất phản hồi JSON
echo json_encode($response);
js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = process.env.PORT || 3000;
// Token hợp lệ của bạn
const expectedToken = 'your_expected_token_here'; // Thay bằng Bearer token mong muốn
// Sử dụng body-parser để phân tích nội dung JSON
app.use(bodyParser.json());
app.post('/webhook', (req, res) => {
const authHeader = req.headers['authorization'];
// Kiểm tra xem Authorization header có tồn tại và có định dạng Bearer Token
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({
success: false,
message: 'Authorization header not found or invalid',
});
}
// Lấy token từ Authorization header
const token = authHeader.split(' ')[1];
// So sánh token nhận được với token hợp lệ
if (token !== expectedToken) {
return res.status(403).json({
success: false,
message: 'Invalid token',
});
}
const data = req.body;
// Kiểm tra xem có thuộc tính 'transactions' không
if (data && Array.isArray(data.transactions)) {
data.transactions.forEach((transaction) => {
// Xử lý giao dịch ở đây (ví dụ: lưu vào cơ sở dữ liệu)
// transaction.id
// transaction.gateway
// transaction.transactionDate
// transaction.transactionNumber
// transaction.accountNumber
// transaction.content
// transaction.transferType
// transaction.transferAmount
});
// Phản hồi thành công
res.status(200).json({
success: true,
message: 'Transactions processed successfully',
});
} else {
// Phản hồi lỗi nếu không có 'transactions'
res.status(400).json({
success: false,
message: 'Invalid payload, transactions not found',
});
}
});
// Khởi động server
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
python
from flask import Flask, request, jsonify
app = Flask(__name__)
# Token hợp lệ của bạn
expected_token = 'your_expected_token_here' # Thay bằng Bearer token mong muốn
@app.route('/webhook', methods=['POST'])
def webhook():
auth_header = request.headers.get('Authorization')
# Kiểm tra Authorization header có tồn tại và định dạng Bearer Token
if not auth_header or not auth_header.startswith('Bearer '):
return jsonify({
'success': False,
'message': 'Authorization header not found or invalid'
}), 401
# Lấy token từ Authorization header
token = auth_header.split(" ")[1]
# So sánh token nhận được với token hợp lệ
if token != expected_token:
return jsonify({
'success': False,
'message': 'Invalid token'
}), 403
data = request.get_json()
# Kiểm tra xem có thuộc tính 'transactions' không
if data and 'transactions' in data and isinstance(data['transactions'], list):
transactions = data['transactions']
for transaction in transactions:
# Xử lý giao dịch ở đây (ví dụ: lưu vào cơ sở dữ liệu)
pass
# Phản hồi thành công
return jsonify({
'success': True,
'message': 'Transactions processed successfully'
}), 200
else:
# Phản hồi lỗi nếu không có 'transactions'
return jsonify({
'success': False,
'message': 'Invalid payload, transactions not found'
}), 400
if __name__ == '__main__':
app.run(port=5000)
.htaccess Rewrite URL (Nếu lỗi Header)
.htaccess
# Thêm quy tắc cho header Authorization vào file .htaccess
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]