条纹:没有这样的令牌.测试模式下存在类似的对象,但使用实时模式键发出此请求


Stripe: No such token.. a similar object exists in test mode, but a live mode key was used to make this request

在实时模式下使用 Stripe 时,我收到以下 PHP 错误:

没有这样的令牌tok_fgfhn..测试模式下存在类似的对象,但使用实时模式键发出此请求

在 Stripe 测试模式下一切正常,而且我已经切换到实时 API 密钥。

我像这样创建一个新客户:

$token  = $_POST['stripeToken'];
    $email  = $_POST['email'];
$customer = 'Stripe'Customer::create(array(
      'email' => $email,
      'card'  => $token
    ));
    //charge for user ads
    $charge = 'Stripe'Charge::create(array(
      'customer' => $customer->id,
      'amount'   => $amount,
      'currency' => 'eur'
    ));

我已经测试了很多小时,但我仍然收到此错误。 我该如何解决它?

听起来您正在尝试向存在于您的测试帐户中的客户收费,而不是在您的真实帐户中。确保您使用实时密钥结交新客户,并使用他们的令牌创建费用。

查看使用测试公共 API 密钥来检索令牌的 JavaScript。将其更改为您的实时公共 API 密钥。

应该是这样的

Stripe.setPublishableKey('pk_test_axEdfdasdfasfsadfsad');

您的 stripe 账户中将有两个不同的密钥。请确保您已将两个测试密钥替换为实时密钥:

活的教派密钥:sk_live_00000000000000000000000

实时发布密钥:pk_live_00000000000000000000000

1-密钥将替换所有正在充电的php脚本

  'Stripe'Stripe::setApiKey("sk_live_00000000000000000000");

2-发布密钥将替换您通过该文件验证付款表单的.JS,该文件在成功验证后还会创建令牌。它可能调用 stripe.js或者可能需要找到此文件的其他名称,它将具有您需要从测试到实时替换的发布密钥:

 Stripe.setPublishableKey('pk_live_0000000000000'); //this would be publish key
            function stripeResponseHandler(status, response) { //token function
                if (response.error) {
                    // re-enable the submit button
                    $('.submit-button').removeAttr("disabled");
                    // show hidden div
                    document.getElementById('a_x200').style.display = 'block';
                    // show the errors on the form
                    $(".payment-errors").html(response.error.message);
                } else {
                    var form$ = $("#payment-form");
                    // token contains id, last4, and card type
                    var token = response['id'];
                    // insert the token into the form so it gets submitted to the server
                    form$.append("<input type='hidden' name='stripeToken' value='" + token + "' />");
                    // and submit
                    form$.get(0).submit();
                }
            }

花了几个小时之后。如果它可能对其他人有所帮助,我会在这里放这个:

我在 Heroku 上部署了一个应用程序,其中秘密和可发布的密钥存储在 heroku 的环境变量中。

我在.coffee.erb中使用<%= ENV.fetch('STRIPE_PU_KEY') %>

请注意,如果您更改并重新启动服务器,那是不够的。您将需要重新生成应用程序.js否则它仍将采用捕获的值。

希望对你有帮助

我遇到了同样的问题。我犯了这个错误:当从用户卡进行一些收费时,我正在使用实时密钥,同时标记用户信用卡详细信息,我使用的是测试密钥。

然后,我通过使用实时密钥从用户卡付款和标记用户的信用卡详细信息来解决这个问题。

同样的问题(但使用Django)。

我的解决方案:我正在将客户 ID 链接到成员资格模型。但是,我创建了成员资格(将测试客户 ID 与成员资格一起存储),然后切换到实时模式。显然,将customer_id设置为 None(或 null ,对于 PHP 人员)修复了 isuse