Stripe 401 Unauthorized - 未提供有效的API密钥

时间:2014-05-06 11:51:42

标签: ruby-on-rails stripe-payments activemerchant

我跟随瑞安贝茨的Railscast'整合活跃的商家'在一些摆弄它工作之后或者至少我没有在Rails中收到任何错误。当我检查我的Stripe帐户中的日志时,我看到以下内容:

type: "invalid_request_error" message: "This API call cannot be made with a publishable API key. Please use a secret API key.

发生401 Unauthorized - No valid API key provided.错误。

我的开发环境中有以下内容。我已经仔细检查了密钥,看看它们是否已经混淆了,而且它们没有。

ActiveMerchant::Billing::Base.mode = :test
::GATEWAY = ActiveMerchant::Billing::StripeGateway.new(

  :login => 'pk_test_yfredactedredactedfA',
  :password => 'sk_test_Rrredactedredacted2J')

Development.log显示:

Processing by OrdersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZWredactedredactedredactedredactedad4=", "order"=>{"first_name"=>"", "last_name"=>"", "email"=>"", "address_1"=>"", "address_2"=>"", "city"=>"", "postal_code"=>"", "country_code"=>"United Kingdom", "card_number"=>"", "security_code"=>"", "card_expires_on(3i)"=>"1", "card_expires_on(2i)"=>"5", "card_expires_on(1i)"=>"2014"}, "commit"=>"Confirm and pay"}
[1m[36mProduct Load (0.1ms)[0m  [1mSELECT "products".* FROM "products" WHERE "products"."id" = ? LIMIT 1[0m  [["id", 2]]
[1m[35m (0.1ms)[0m  begin transaction
[1m[36mSQL (0.4ms)[0m  [1mINSERT INTO "orders" ("created_at", "updated_at") VALUES (?, ?)[0m  [["created_at", Tue, 06 May 2014 11:05:16 UTC +00:00], ["updated_at", Tue, 06 May 2014 11:05:16 UTC +00:00]]
[1m[36m (6.1ms)[0m  [1mcommit transaction[0m
[1m[35m (0.2ms)[0m  SELECT SUM("products"."price") AS sum_id FROM "products" WHERE "products"."id" IN (2)

虽然我不确定它会帮助

由于

1 个答案:

答案 0 :(得分:1)

根据Stripe docs

  

除了实时和测试模式,   还有两种类型的密钥秘密可发布的密钥。

     

可发布的 API密钥仅用于通过Stripe识别您的帐户,它们不是秘密。换句话说,它们可以安全地发布在诸如Stripe.js javascript代码之类的地方,或者在Android或iPhone应用程序中。可发布密钥只能创建令牌。

     

秘密绝不应发布API密钥,并且必须在您自己的服务器上保密。这些密钥可以不受限制地对Stripe执行任何API请求。

您永远不需要同时使用它们,您可以使用其中一种。您发布的错误说明:

  

无法使用可发布的API密钥进行此API调用。请使用秘密API密钥。

您可以将键与前几个字符区分开来:

pk_test_... - publishable key for test mode
sk_test_... - secret key for test mode

因此,您需要提供之前提供可发布密钥的密钥。使用ActiveMerchant的密钥Here's an example

transaction = ActiveMerchant::Billing::StripeGateway.new(:login => STRIPE_SECRET_KEY)

(注意没有给出:password。)