Есть ли более безопасный способ использовать Stripe и ActiveMerchant вместе? Рубин на рельсах - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь использовать Stripe для платежей в приложении rails. Я помню, что во время одной из наших стажировок мы использовали гем active merchant, чтобы абстрагировать процесс с помощью шлюзов. Хотя на стажировке мы использовали Authorize.net. Мы не использовали Stripe. Для этого конкретного приложения я хотел бы использовать Stripe и ActiveMerchant вместе.

Просматривая документацию на странице GitHub Active Merchant, я обнаружил, что могу подключиться к Stripe с помощью StripeGateway, предоставляемого гемом Active Merchant. Вот как я это сделал:

ActiveMerchant::Billing::Base.mode = :test

# Create a new credit card object
credit_card = ActiveMerchant::Billing::CreditCard.new(
  :number     => '4242424242424242',
  :month      => '8',
  :year       => '2022',
  :first_name => 'Tobias',
  :last_name  => 'Luetke',
  :verification_value  => '123'
)

if credit_card.valid?
  gateway = ActiveMerchant::Billing::StripeGateway.new(
    login: Rails.application.credentials.development[:stripe_private_key]
  )

  # Authorize for $10 dollars (1000 cents)
  response = gateway.authorize(1000, credit_card)

  if response.success?
    # Capture the money
    gateway.capture(1000, response.authorization)
  else
    raise StandardError, response.message
  end
end

Однако это проблема. Всякий раз, когда я запускаю это, я получаю странную ошибку:

StandardError (Sending credit card numbers directly to the Stripe API is generally unsafe. We suggest you use test tokens that map to the test card you are using, see https://stripe.com/docs/testing.)

Я понимаю, что это проблема безопасности, но я не понимаю, как это сделать с помощью Active Merchant. Я пытался использовать документацию Stripe для ruby ​​на рельсах, но форма была очень простой. Он имел только номер кредитной карты, данные об истечении срока действия и запись CVC, а также электронную почту. Но мне нужен также платежный адрес. Это мое обоснование использования Active Merchant. Он очень прост в использовании и абстрагирует много пуха, в то же время он может создавать собственные формы. Но я получаю эту ошибку здесь с Stripe, и я не знаю, как ее исправить.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 23 января 2019

При использовании Stripe gateway методы ActiveMerchant purchase и authorize должны принимать либо объект карты, как вы проходите выше, либо значение токена (строка)

#   purchase(money, card_hash_or_token, { ... })

https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/stripe.rb#L96

Вместо того чтобы передавать необработанные данные карты, по соображениям соответствия PCI вы можете создать токен на стороне клиента, используя библиотеки Stripe Checkout или Elements , передайте идентификатор источника / токена в свой бэкэнд (он должен выглядеть как tok_xxxyyyzzz или src_xxxyyyyz), а затем передайте это значение во второй card_hash_or_token параметр вашего запроса на авторизацию.

response = gateway.authorize(1000, params[:stripeToken])
...