Stripe:没有这样的标记..测试模式中存在类似的对象,但是使用实时模式密钥来发出此请求

时间:2015-03-09 22:34:31

标签: php stripe-payments credit-card

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

  

没有这样的令牌tok_fgfhn ..测试模式中存在类似的对象,但是使用了实时模式密钥来发出此请求

条纹测试模式下一切正常,并且我已切换到实时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'
    ));

我已经等了好几个小时但我仍然遇到这个错误。我该如何解决?

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

它应该是这样的

Stripe.setPublishableKey('pk_test_axEdfdasdfasfsadfsad');

答案 2 :(得分:2)

您的条带帐户中将有两个不同的密钥。请确保您已使用实时密钥替换两个测试密钥:

live sectret key: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();
                }
            }

答案 3 :(得分:0)

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

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

我在<%= ENV.fetch('STRIPE_PU_KEY') %>

中使用.coffee.erb

请注意,如果更改并重新启动服务器,这还不够。您将需要重新生成application.js,否则它仍然会获取catched值。

希望有所帮助

答案 4 :(得分:0)

我有同样的问题。我犯了这个错误:从用户卡上收取一些费用时,我使用了实时密钥,同时对用户信用卡详细信息进行了标记,而我却使用了测试密钥。

然后,我通过在用户卡上付款和令牌化用户的信用卡详细信息时使用实时密钥解决了该问题。