PAYWISE
zh
← 全部文章

开发者

从每个网站单独密钥迁移到统一的 Webhook 密钥

PAYWISE 现在用一个商户密钥为所有 Webhook 签名。之前设置的网站会保留旧密钥,直到您切换。以下是如何在不漏掉任何 Webhook 的情况下完成切换。

发布于 10 十月 2026 阅读约 2 分钟

其他语言版本: English, Indonesia

从每个网站单独密钥迁移到统一的 Webhook 密钥

PAYWISE 用一个签名密钥为您整个账户的所有 Webhook 签名。它显示在网站与 Webhook 页面上,需要时可以点击创建新密钥来更换。

如果您在这次变更之前添加了带有独立 Webhook URL 的网站,该网站仍使用自己的旧密钥签名。没有任何东西坏掉:您现有的对接继续正常运行。该网站会显示提示*"此网站仍在使用自己的旧密钥"*以及切换到主密钥按钮。

无中断切换:服务器同时接受两个密钥,点击切换到主密钥,然后删除旧密钥

为什么要切换?

  • 只需保存一个密钥。 所有服务器校验同一个值,需要同步的内容更少。
  • 一处更换。 如果密钥泄露,一次点击即可为所有网站更换。
  • 减少错误。 大多数"签名不匹配"问题都是因为服务器使用了错误的密钥。

不漏掉任何 Webhook 的切换方法

点击切换到主密钥的那一刻,用旧密钥生成的签名就会失效。为避免哪怕很短的空档,请让服务器暂时同时接受两个密钥:

$raw = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_PAYWISE_SIGNATURE'] ?? '';
$secrets = [getenv('PAYWISE_WEBHOOK_SECRET'), getenv('PAYWISE_OLD_SITE_SECRET')];

$valid = false;
foreach (array_filter($secrets) as $secret) {
    if (hash_equals(hash_hmac('sha256', $raw, $secret), $signature)) {
        $valid = true;
        break;
    }
}
if (! $valid) {
    http_response_code(401);
    exit;
}

然后按以下步骤操作:

  1. 从网站与 Webhook 页面复制主签名密钥,添加到服务器上,与旧密钥并存。
  2. 部署后点击发送测试 Webhook,确认用主密钥签名的投递能被接受。
  3. 在该网站上点击切换到主密钥。
  4. 查看投递历史:新的投递应返回 HTTP 2xx。
  5. 运行一天没有问题后,从服务器上删除旧密钥。

多个网站在不同服务器上?

每个网站执行一次上述步骤。每个网站单独切换,因此可以逐个迁移。

还是漏掉了 Webhook?

失败的投递会自动重试,大约在 1 分钟、5 分钟、30 分钟和 2 小时之后。您也可以对任何失败的投递点击立即重试。重试使用您当前的密钥签名。

更多签名相关内容:验证 PAYWISE Webhook 签名。

更多文章

今天就从沙盒密钥开始。

创建账户、生成沙盒密钥,几分钟内即可在调试台发送第一笔交易。