其他

管理Webhooks

Adyen通过Webhooks通知您的系统,在使用管理API时,关于您的Adyen公司、商户账户、商店、支付终端和支付方法发生的事件。当事件发生时,Adyen会发送通知。

查看官方文档 ↗

接入教程

1. 登录Adyen账户并访问管理API设置页面
2. 在Webhooks部分配置接收通知的端点URL
3. 选择要订阅的事件类型并保存设置
4. 在您的服务器上实现Webhook处理器以接收事件
5. 验证接收到的Webhook签名以确保安全性
6. 测试Webhook功能并进行集成验证

Python Webhook验证示例

python
import hmac
import hashlib
from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook_handler():
    payload = request.get_data(as_text=True)
    signature = request.headers.get('X-Adyen-Signature')
    webhook_key = 'YOUR_WEBHOOK_KEY'
    
    calculated_signature = hmac.new(
        webhook_key.encode('utf-8'),
        payload.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()
    
    if hmac.compare_digest(calculated_signature, signature):
        event_data = request.json
        # 处理事件逻辑
        return {'status': 'processed'}, 200
    else:
        return {'error': 'Invalid signature'}, 401

if __name__ == '__main__':
    app.run(port=3000)

PHP Webhook接收示例

php
<?php

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_ADYEN_SIGNATURE'] ?? '';
$webhookKey = 'YOUR_WEBHOOK_KEY';

$calculatedSignature = hash_hmac('sha256', $payload, $webhookKey);

if (hash_equals($calculatedSignature, $signature)) {
    $eventData = json_decode($payload, true);
    
    // 处理事件逻辑
    $eventType = $eventData['type'] ?? '';
    $eventId = $eventData['id'] ?? '';
    
    // 记录或处理事件
    file_put_contents('webhook_log.txt', 
        date('Y-m-d H:i:s') . " - {$eventType}: {$eventId}\n", 
        FILE_APPEND
    );
    
    http_response_code(200);
    echo json_encode(['status' => 'processed']);
} else {
    http_response_code(401);
    echo json_encode(['error' => 'Invalid signature']);
}
?>

Node.js Webhook服务器示例

javascript
const express = require('express');
const crypto = require('crypto');

const app = express();
app.use(express.json());

const WEBHOOK_KEY = 'YOUR_WEBHOOK_KEY';

app.post('/webhook', (req, res) => {
    const payload = JSON.stringify(req.body);
    const signature = req.headers['x-adyen-signature'];
    
    const calculatedSignature = crypto
        .createHmac('sha256', WEBHOOK_KEY)
        .update(payload)
        .digest('hex');
    
    if (crypto.timingSafeEqual(
        Buffer.from(calculatedSignature, 'hex'),
        Buffer.from(signature, 'hex')
    )) {
        const eventData = req.body;
        console.log('Received event:', eventData.type);
        
        // 处理事件逻辑
        // ...
        
        res.status(200).json({ status: 'processed' });
    } else {
        res.status(401).json({ error: 'Invalid signature' });
    }
});

app.listen(3000, () => {
    console.log('Webhook server listening on port 3000');
});

常见问题

如何验证Webhook请求的真实性?

Adyen使用HMAC SHA256签名验证Webhook请求。每个请求都包含X-Adyen-Signature头,您需要使用预共享的Webhook密钥对请求体计算HMAC SHA256签名,并与请求头中的签名进行比较验证。

Webhook服务器应该返回什么HTTP状态码?

成功处理Webhook后应返回2xx状态码(推荐200)。如果签名验证失败应返回401,服务器错误返回5xx。Adyen可能会重试非2xx响应的请求。

Webhook事件包含哪些常见字段?

典型Webhook事件包含:事件类型(type)、事件ID(id)、时间戳(timestamp)、相关资源ID(resourceId)和事件详情(data)。具体字段结构请参考Adyen官方文档。

相似接口推荐

AWS SSO Identity Store

AWS SSO Identity Store是AWS IAM Identity Center(原AWS单点登录)使用的身份存储服务,提供一个统一的位置检索所有身份信息(用户和群组)。该服务简化了身份管理流程,帮助集中管理

待确认
Amazon Honeycode

Amazon Honeycode是一项全托管服务,让您无需编程即可快速为团队构建移动和Web应用。可用于管理项目、客户、运营、审批、资源乃至团队协作等各类事务。

待确认
AWS Glue

AWS Glue 是一项完全托管的提取、转换和加载(ETL)服务,可简化数据准备和集成工作。它自动发现、编目数据,并支持在数据湖和数据仓库之间进行ETL操作。

待确认
亚马逊Glacier

亚马逊S3 Glacier(简称Glacier)是一款针对“冷数据”的存储解决方案。这项超低成本的存储服务为数据备份和归档提供安全、持久且易于使用的存储方案。用户可经济高效地存储数据数月、数年甚至数十年。

待确认