我正在尝试在我的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时一直遇到这个错误,我不知道如何修复它。
任何帮助都是感激的!
3条答案
按热度按时间ljsrvy3e1#
使用Stripe网关,ActiveMerchant的
purchase
和authorize
方法应该接受一个card对象(正如您在上面传递的)或一个令牌值(字符串)https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/stripe.rb#L96
出于PCI兼容性的原因,您可以使用Stripe的Checkout或Elements库在客户端创建令牌,将源/令牌id传递给后端(应该类似于tok_xxxyyyzzz或src_xxxyyyyz),然后将该值传递给授权请求的第二个
card_hash_or_token
参数,而不是传递原始卡详细信息。yrefmtwq2#
https://dashboard.stripe.com/account/integration/settings
直接处理卡信息我们强烈建议您不要将卡信息直接传递到Stripe的API,因为这意味着您的集成直接处理敏感的卡信息。了解详细信息。(https://stripe.com/docs/security#validating-pci-compliance)
我不建议你这样做,但这是你会如何让ActiveMerchant工作,他们的方式你想要的,并删除该错误.它大大增加了PCI的合规性,你需要处理.
dm7nw8vv3#
不推荐,但您可以在条带 Jmeter 板中关闭此要求。可以方便地用于测试目的。
https://dashboard.stripe.com/settings/integration