Ruby on rails 有没有一种更安全的方法可以同时使用Stripe和ActiveMerchant?RubyonRails

Ruby on rails 有没有一种更安全的方法可以同时使用Stripe和ActiveMerchant?RubyonRails,ruby-on-rails,stripe-payments,activemerchant,Ruby On Rails,Stripe Payments,Activemerchant,我正在尝试在rails应用程序中使用Stripe进行付款。我记得在我的一次实习中,我们使用activemerchantgem通过网关来抽象流程。虽然在实习期间,我们使用了Authorize.net。我们没有使用条纹。对于这个特殊的应用程序,我想同时使用Stripe和ActiveMerchant 查看活动商户GitHub页面上的文档,我发现我可以使用活动商户gem提供的StripeGateway连接到Stripe。我就是这样做的: ActiveMerchant::Billing::Base.mod

我正在尝试在rails应用程序中使用Stripe进行付款。我记得在我的一次实习中,我们使用
activemerchant
gem通过网关来抽象流程。虽然在实习期间,我们使用了Authorize.net。我们没有使用条纹。对于这个特殊的应用程序,我想同时使用Stripe和ActiveMerchant

查看活动商户GitHub页面上的文档,我发现我可以使用活动商户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的RubyonRails文档,但是表单非常简单。它只有信用卡号、过期数据、CVC条目以及电子邮件。但我也需要一个账单地址。这就是我使用主动商户的理由。它的使用非常简单,并且在仍然能够创建自定义表单的情况下抽象出许多绒毛。但是,我在Stripe中不断遇到这个错误,我不知道如何修复它


感谢您的帮助

使用Stripe gateway,ActiveMerchant的
购买
授权
方法应采用您在上面传递的卡对象或令牌值(字符串)

例如,您可以使用Stripe或库在客户端创建令牌,而不是传递原始卡详细信息,将源/令牌id传递到后端(它应该看起来像tok_xxxyyzzz或src_xxxyyyyz),然后将该值传递到授权请求的第二个
卡哈希_或\u令牌
参数中

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

使用Stripe gateway,ActiveMerchant的
购买
授权
方法应采用您在上面传递的卡对象或令牌值(字符串)

例如,您可以使用Stripe或库在客户端创建令牌,而不是传递原始卡详细信息,将源/令牌id传递到后端(它应该看起来像tok_xxxyyzzz或src_xxxyyyyz),然后将该值传递到授权请求的第二个
卡哈希_或\u令牌
参数中

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

直接处理卡片信息 我们强烈反对将卡信息直接传递给Stripe的API,因为这意味着您的集成将直接处理敏感卡信息。了解更多。()

我不是建议你这样做,但这是你如何让ActiveMerchant以你想要的方式工作,并消除错误。它大大提高了您需要处理的PCI遵从性。

直接处理卡片信息 我们强烈反对将卡信息直接传递给Stripe的API,因为这意味着您的集成将直接处理敏感卡信息。了解更多。()


我不是建议你这样做,但这是你如何让ActiveMerchant以你想要的方式工作,并消除错误。它大大提高了您需要处理的PCI遵从性。

hmm,这种情况会剥夺灵活性。我不想存储信用卡信息,但我确实想存储账单地址以便发货。但是,如果整个表单由诸如Checkout或Elements之类的javascript库处理,我就不能这样做。这个javascript库在某种程度上混淆了rails关注点的需要,对吗?我需要的信息存储在我的后端,而不是stripe的。你仍然可以轻松地存储账单/发货信息;在前端表单上包含地址等字段。是的,在创建带条带的令牌(创建令牌调用的第二个参数,)时将其传递给后端表单提交并存储。不幸的是,PCI的当前需求/状态意味着,如果你自己触摸卡,那么合规性就有一个真正的负担。嗯,这种情况剥夺了灵活性。我不想存储信用卡信息,但我确实想存储账单地址以便发货。但是,如果整个表单由诸如Checkout或Elements之类的javascript库处理,我就不能这样做。这个javascript库在某种程度上混淆了rails关注点的需要,对吗?我需要的信息存储在我的后端,而不是stripe的。你仍然可以轻松地存储账单/发货信息;在前端表单上包含地址等字段。是的,在创建带条带的令牌(创建令牌调用的第二个参数,)时将其传递给后端表单提交并存储。不幸的是,PCI的当前需求/状态意味着,如果您自己触摸卡,那么法规遵从性将面临真正的负担。