在 ASP.NET Core 中调试 Worldpay Webhooks

发布: (2026年1月8日 GMT+8 13:43)
3 min read
原文: Dev.to

Source: Dev.to

介绍

在生产环境的 ASP.NET Core 应用中集成 Worldpay 时,调试 webhook 失败可能是最棘手的问题之一。事件是异步到达的,日志往往缺失,问题通常只有在支付争议或客户投诉后才会显现。完善的事件日志记录可以节省大量调试时间。

Worldpay Webhook 的挑战

  • 异步特性 使得追踪变得困难。
  • 失败往往只在生产环境 中出现。
  • 默认日志 未能捕获完整的事件上下文。
  • 争议可能在数天后 才出现,且没有任何历史记录。
  • 重试的事件 难以与原始尝试关联。

结构化日志记录方法

在生产环境中,Webhook 日志应当:

  • 结构化 —— 以一致的格式存储负载。
  • 全面 —— 包含完整的事件负载、事件类型、时间戳、重试次数以及关联标识符。
  • 持久化 —— 保留记录以供后续审计、争议分析和事件调查使用。

示例:ASP.NET Core 端点

// POST endpoint to log payment events
[HttpPost("log-payment")]
public async Task LogPaymentEvent([FromBody] PaymentEvent paymentEvent)
{
    // Log the payment event
    await _paymentEventLogger.LogAsync(paymentEvent);
    return Ok("Payment event logged successfully!");
}

日志实现

public async Task LogAsync(PaymentEvent paymentEvent)
{
    var eventRecord = new PaymentEvent
    {
        // Populate with provider, event type, status, reference IDs, timestamps, etc.
    };

    // Persist the complete Worldpay event payload and metadata
    await _repository.SaveAsync(eventRecord);
}

日志记录器会将完整的 Worldpay 事件负载以及诸如提供商、事件类型、状态、参考标识符和时间戳等元数据持久化。这使得在审计、争议调查或生产事故分析时能够重建支付事件的完整生命周期。

持久化与审计功能

  • 数据库存储(如 SQL Server、PostgreSQL)以确保可靠保留。
  • 基于关联 ID 和时间戳的索引,实现快速查询。
  • 保留策略,满足合规性要求。

扩展版本

日志记录器的扩展版本包含额外的审计功能,例如变更跟踪和导出功能。

  • GitHub 仓库(免费版):
  • 带持久化和审计功能的扩展版:
Back to Blog

相关文章

阅读更多 »

Python 日志:从 print() 到生产

使用 print 的问题:python printf'Processing user {user_id}' printf'Error: {e}' 缺少的内容:- 没有时间戳 - 没有日志级别 - 没有文件输出 - Can't fil...