Skip to content

Tài liệu kỹ thuật Webhook

Method

Method: POST
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]