StripeJS createToken требует секретный ключ вместо публикуемого ключа

Предположим следующий код:

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

stripe.createToken(card);

Он преуспевает в 3 из 4 возможных настроек (тестовая среда, выполняющая вызовы полосы LIVE, среда тестирования, выполняющая вызовы полосы TEST, среда в реальном времени, выполняющая вызовы полосы LIVE), но не когда в реальной среде выполняются вызовы полосы 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
828
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для создания токена никогда не потребуется секретный ключ API. Это было бы реальной проблемой безопасности, и поэтому Stripe имеет пару ключей: секретный ключ для вашего серверного кода и публикуемый ключ для вашего клиентского кода.

Код, которым вы поделились, всегда будет работать с публикуемым ключом, и создание токена никогда не приведет к сбою с этой ошибкой. Ключ Publishable также задокументирован: https://stripe.com/docs/stripe.js

Сложно сказать, что вызывает это в вашем примере, но это должно быть что-то не связанное с этой строкой кода. Что-то еще в коде будет активировано после создания токена, и эта другая часть должна быть неправильно настроена и иметь ваш публикуемый ключ на стороне сервера. Я бы порекомендовал связаться с командой поддержки Stripe по этому поводу, так как они могут напрямую изучить вашу учетную запись: https://support.stripe.com/email

Ответ принят как подходящий

Проблема заключалась в запрошенной области с использованием Stripe Connect. Было установлено значение read_only, а мне нужно было read_write.

Служба поддержки Stripe признала тот факт, что текущее сообщение об ошибке совсем не интуитивно понятно, и передала информацию группе инженеров, чтобы это не сбивало разработчиков с толку.

Другие вопросы по теме