ruby-on-rails 有没有更安全的方法可以同时使用Stripe和ActiveMerchant?Ruby on Rails

ego6inou  于 2022-12-24  发布在  Ruby
关注(0)|答案(3)|浏览(169)

我正在尝试在我的rails应用程序中使用Stripe进行支付。我记得在我的一次实习中,我们使用active merchant gem通过使用网关来抽象流程。不过,在实习时,我们使用的是Authorize.net。我们没有使用Stripe。对于这个特定的应用程序,我希望同时使用Stripe和ActiveMerchant。
查看Active Merchant GitHub页面上的文档,我发现我可以使用Active Merchant gem提供的StripeGateway连接到Stripe。

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 on rails文档,但表单非常简单。它只有一个信用卡号码,到期日期和CVC条目,以及电子邮件。但我需要一个帐单地址以及。这是我的理由使用积极的商人。它Stripe使用起来非常简单,在创建自定义表单的同时,它还能抽象出很多细节。但是,我在使用Stripe时一直遇到这个错误,我不知道如何修复它。
任何帮助都是感激的!

ljsrvy3e

ljsrvy3e1#

使用Stripe网关,ActiveMerchant的purchaseauthorize方法应该接受一个card对象(正如您在上面传递的)或一个令牌值(字符串)

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

https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/stripe.rb#L96
出于PCI兼容性的原因,您可以使用Stripe的CheckoutElements库在客户端创建令牌,将源/令牌id传递给后端(应该类似于tok_xxxyyyzzz或src_xxxyyyyz),然后将该值传递给授权请求的第二个card_hash_or_token参数,而不是传递原始卡详细信息。

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

yrefmtwq2#

https://dashboard.stripe.com/account/integration/settings
直接处理卡信息我们强烈建议您不要将卡信息直接传递到Stripe的API,因为这意味着您的集成直接处理敏感的卡信息。了解详细信息。(https://stripe.com/docs/security#validating-pci-compliance)
我不建议你这样做,但这是你会如何让ActiveMerchant工作,他们的方式你想要的,并删除该错误.它大大增加了PCI的合规性,你需要处理.

dm7nw8vv

dm7nw8vv3#

不推荐,但您可以在条带 Jmeter 板中关闭此要求。可以方便地用于测试目的。
https://dashboard.stripe.com/settings/integration

相关问题