You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用沙箱密钥生成Payment Token调用verifyCharge报Invalid Charge Id错误

解决Checkout.com verifyCharge()报错"Invalid Charge id"的问题

看起来你踩了一个很容易混淆的API使用误区——verifyCharge()方法需要的是Charge ID,而不是Payment Token,哪怕文档描述可能让你误以为直接传Payment Token就行。我来帮你梳理正确的流程和代码调整方案:

核心错误原因

Payment Token的作用是创建Charge,而不是直接用来验证。你需要先用Payment Token生成Charge,拿到对应的Charge ID后,再调用verifyCharge()去验证这个Charge的状态。

修正后的实现步骤

1. 调整VerifyPaymentTokenAPI类(或在使用流程中补充创建Charge的步骤)

你需要先通过Payment Token创建Charge,获取Charge ID后再执行验证:

use com\checkout;
class VerifyPaymentTokenAPI {
    private $apiClient;
    private $chargeService;

    function __construct($secretKey) {
        $this->apiClient = new checkout\ApiClient($secretKey);
        $this->chargeService = $this->apiClient->chargeService();
    }

    // 先通过Payment Token创建Charge
    public function createChargeFromToken($paymentToken, $amount, $currency = 'PHP') {
        $chargeCreate = new checkout\ApiServices\Charges\RequestModels\ChargeCreate();
        $chargeCreate->setToken($paymentToken);
        $chargeCreate->setValue($amount);
        $chargeCreate->setCurrency($currency);
        
        return $this->chargeService->createCharge($chargeCreate);
    }

    // 用Charge ID验证Charge
    public function verifyCharge($chargeId) {
        return $this->chargeService->verifyCharge($chargeId);
    }
}

2. 更新使用示例流程

现在的流程应该是:生成Payment Token → 创建Charge → 验证Charge:

// 生成Payment Token
$paymentTokenAPI = new PaymentTokenAPI('sk_test_aaaaaaaaaaaaaaaaa');
$paymentTokenAPI->setInvestmentValue('1000');
$token = null;
try {
    $token = ($paymentTokenAPI->createPaymentToken())->getId();
    echo "生成的Payment Token: {$token}\n";
}catch (checkout\helpers\ApiHttpClientCustomException $e) {
    echo 'Caught exception Message: ', $e->getErrorMessage(), "\n";
    echo 'Caught exception Error Code: ', $e->getErrorCode(), "\n";
    echo 'Caught exception Event id: ', $e->getEventId(), "\n";
    exit;
}

// 创建Charge并验证
$verifyAPI = new VerifyPaymentTokenAPI('sk_test_aaaaaaaaaaaaaaaaa');
try {
    // 第一步:用Payment Token创建Charge
    $charge = $verifyAPI->createChargeFromToken($token, '1000');
    $chargeId = $charge->getId();
    echo "生成的Charge ID: {$chargeId}\n";

    // 第二步:用Charge ID验证Charge
    $verifiedCharge = $verifyAPI->verifyCharge($chargeId);
    var_dump($verifiedCharge); // 输出验证结果
}catch (checkout\helpers\ApiHttpClientCustomException $e) {
    echo 'Caught exception Message: ', $e->getErrorMessage(), "\n";
    echo 'Caught exception Error Code: ', $e->getErrorCode(), "\n";
    echo 'Caught exception Event id: ', $e->getEventId(), "\n";
}

额外排查点

除了流程错误,你还可以检查这几个地方:

  • Payment Token有效期:Payment Token通常只有15分钟左右的有效期,如果生成后隔了很久才验证,可能已经失效,需要重新生成。
  • 沙箱密钥正确性:确认你用的是沙箱环境的sk_test_xxx密钥,没有和生产环境的密钥混用。
  • API版本兼容性:如果你用的是Checkout.com v3 API,方法名和参数可能有变化,比如verifyCharge可能被替换为其他端点,建议核对你使用的API版本对应的官方文档。

内容的提问来源于stack exchange,提问作者Carl Binalla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:19:40