StripeJS createToken需要密钥而不是可发布密钥

时间:2018-10-26 20:13:27

标签: stripe-payments

假设以下代码:

const stripe = window.Stripe('pk_xxx', { stripeAccount: 'acct_xxx' });
const elements = stripe.elements();
const card = elements.create('card');

stripe.createToken(card);

它在4种可能的设置(测试环境进行LIVE条纹调用,测试环境进行TEST条纹调用,实时环境进行LIVE条纹调用)中的3种设置中都取得了成功,但是在实时环境中进行TEST条纹调用的情况下却没有成功。

它失败并显示403错误和以下响应:

{
  "error": {
    "code": "secret_key_required",
    "doc_url": "https://stripe.com/docs/error-codes/secret-key-required",
    "message": "This API call cannot be made with a publishable API key. Please use a secret API key. You can find a list of your API keys at https://dashboard.stripe.com/account/apikeys.",
    "type": "invalid_request_error"
  }
}

JS调用如何要求密钥?每个人都会看到它。

这是HTTP请求:

card[number]: 4242424242424242
card[cvc]: 242
card[exp_month]: 04
card[exp_year]: 24
card[address_zip]: 42424
guid: 282d554c-4271-4730-9df4-ad142b19a812
muid: 722e4d63-4df0-40db-8d60-100f841d1718
sid: d5f44fce-9835-497b-a4dd-766894b4c23a
payment_user_agent: stripe.js/3b5fc4c8; stripe-js-v3/3b5fc4c8
referrer: https://app.myowndomain.com/
key: pk_test_xxx (also tried the pk_live_xxx - no difference)
_stripe_account: acct_xxx

2 个答案:

答案 0 :(得分:0)

创建令牌将永远不需要密钥API密钥。这将是一个真正的安全问题,这就是为什么Stripe有一对密钥:服务器端代码的Secret密钥和客户端代码的Publishable密钥。

您共享的代码将始终与可发布的密钥一起使用,并且创建令牌永远不会因该错误而失败。 Publishable密钥也是所记录的:https://stripe.com/docs/stripe.js

在您的示例中说出导致此问题的原因很棘手,但必须与该行代码无关。创建令牌后,将触发代码中的其他内容,并且该其他部分必须配置错误,并在服务器端拥有可发布密钥。我建议跟Stripe的支持团队联系,因为他们可以直接调查您的帐户:https://support.stripe.com/email

答案 1 :(得分:0)

问题是使用Stripe Connect请求的范围。它设置为“ read_only”,而我需要“ read_write”。

条带支持人员承认以下事实:当前错误消息根本不直观,并且已将信息传递给工程团队,因此对开发人员而言不那么混乱。