在激活的条带账户中进行测试交易

Making test transactions in an activated stripe account

我有一个 stripe 独立帐户,它已激活并正在接受实时交易并连接到一个平台 stripe 帐户。我在下面给出了我用于接受实时付款的代码。

 \Stripe\Stripe::setApiKey("LIVE_PLATFORM_API_KEY");
 $strtok = \Stripe\Token::create(
             array(
              "card" => array(
                      "number" => $cardnumber,
                      "exp_month" => $cardexpmonth,
                      "exp_year" => $cardexpyear,
                      "cvc" => $creditcardcvv
                  )
                ),
                array('stripe_account' => "live_account_header")
              );
 $strtoken = $strtok->id;
 $charge = \Stripe\Charge::create(array(
                  'amount' => $amts,
                  'currency' => 'usd',
                  'application_fee' => $appfee,
                  'source' => $strtoken
            ), array('stripe_account' => "live_account_header"));

我想在我的代码中设置一个调试模式,该模式将使用条带测试密钥接受测试交易,即使条带独立帐户和平台帐户都已激活并处于实时模式。我想要调试而不是进行实时交易时应该使用的条带调用。我的意思是当我突然想进行测试交易而不是实时交易时,我应该如何更改上述代码并使用测试密钥,即使平台和独立账户都已激活并生效?

交易是在测试模式还是实时模式下处理完全取决于您使用的是哪一组 API 键。如果您使用测试 API 键,交易将在测试模式下处理。如果您使用实时 API 密钥,交易将以实时模式处理。

所以你需要做的是根据你可以触发的一些条件来决定你要使用哪组键。

基本上,你需要替换这个:

\Stripe\Stripe::setApiKey("LIVE_PLATFORM_API_KEY");

像这样:

if ($test_condition) {
    \Stripe\Stripe::setApiKey("TEST_PLATFORM_API_KEY");
} else {
    \Stripe\Stripe::setApiKey("LIVE_PLATFORM_API_KEY");
}

请记住,您还需要在前端代码中使用测试可发布密钥(用于使用 Checkout or Elements 创建令牌)——如果令牌是使用实时密钥将不起作用。

在您提供的示例代码中,您正在从后端代码创建令牌(通过 \Stripe\Token::create(...))。这意味着您的服务器直接提供卡数据。这在测试时很好,但在实时模式下,应始终通过 Checkout 或 Elements 在前端创建令牌。否则,您将不再符合 PCI SAQ A 的资格,并且需要对您的解决方案进行 PCI 合规性审核。