ActiveMerchant 说有效卡的信用卡无效
Posted
技术标签:
【中文标题】ActiveMerchant 说有效卡的信用卡无效【英文标题】:ActiveMerchant says invalid credit card for a valid card 【发布时间】:2014-12-30 01:25:38 【问题描述】:我遇到了ActiveMerchant
的一个奇怪问题。
我正在使用activemerchant
来验证信用卡号,并且它工作正常。但是,我发现它似乎无法验证此卡号3088023605344101
,当我输入JCB
类型的卡号时,也会出现大多数验证问题。这是我的代码的样子
cc = CreditCard.new(
:first_name => client_details[:firstname],
:last_name => client_details[:lastname],
:month => client_details[:month],
:year => client_details[:year],
:number => client_details[:cardnum],
:verification_value => client_details[:cvv]
)
这是我的控制台中正确验证卡的示例。
2.1.1 :052 > cc = CreditCard.new(:first_name => 'Steve',:last_name => 'Smith', :month => '9',:year => '2015',:number => '5201457519355638', :verification_value => '123')
=> #<ActiveMerchant::Billing::CreditCard:0x00000109d3acc0 @first_name="Steve", @last_name="Smith", @month="9", @year="2015", @number="5201457519355638", @verification_value="123">
2.1.1 :053 > cc.valid?
=> true
2.1.1 :054 > cc.brand
=> "master"
虽然这似乎工作正常,但这里有一个引发品牌错误的示例。 起初,我不输入品牌,而是让活跃的商家找到它。
2.1.1 :056 > cc = CreditCard.new(:first_name => 'Steve',:last_name => 'Smith', :month => '9',:year => '2015',:number => '3088023605344101', :verification_value => '123')
=> #<ActiveMerchant::Billing::CreditCard:0x0000010a0d91d8 @first_name="Steve", @last_name="Smith", @month="9", @year="2015", @number="3088023605344101", @verification_value="123">
2.1.1 :057 > cc.valid?
=> false
2.1.1 :058 > cc.errors
=> "brand"=>["is required"], "number"=>[]
所以我喂品牌
2.1.1 :059 > cc = CreditCard.new(:first_name => 'Steve',:last_name => 'Smith', :month => '9',:year => '2015',:number => '3088023605344101', :verification_value => '123', :brand => 'jcb')
=> #<ActiveMerchant::Billing::CreditCard:0x00000109d886c8 @first_name="Steve", @last_name="Smith", @month="9", @year="2015", @number="3088023605344101", @verification_value="123", @brand="jcb">
2.1.1 :060 > cc.valid?
=> false
2.1.1 :061 > cc.errors
=> "number"=>[], "brand"=>["does not match the card number"]
我已经验证了来自不同站点的卡号,它们似乎还不错。我验证卡的网站是 freeformatter 和 igo
我不确定问题是什么,但如果有人知道为什么会这样,请告诉我。
【问题讨论】:
【参考方案1】:我在 active_merchant github 上提出的问题建议他们使用此正则表达式 /^35(28|29|[3-8]\d)\d12$/
来验证卡是否为 JCB
类型。
所以我只是相应地更改了正则表达式,但问题是为什么我提到的那些网站有30
系列卡,而 IIN 是35
。所以我需要澄清这个问题,我现在要针对 SO 提出这个问题。
这是修改后的正则表达式
def type
if @card =~ /^5[1-5][0-9]14$/
return SUPPORTED_CARD_BRANDS[:MASTERCARD]
elsif @card.match(/^4[0-9]12([0-9]3)?$/)
return SUPPORTED_CARD_BRANDS[:VISA]
elsif @card.match(/^3[47][0-9]13$/)
return SUPPORTED_CARD_BRANDS[:AMEX]
elsif @card =~ /^3(0[0-5]|[68][0-9])[0-9]11$/
return SUPPORTED_CARD_BRANDS[:DINNERS]
elsif @card =~ /^6011[0-9]12$/
return SUPPORTED_CARD_BRANDS[:DISCOVER]
elsif @card =~ /^(3[0-9]4|2131|1800)[0-9]11$/
return SUPPORTED_CARD_BRANDS[:JCB]
elsif @card =~ /^(5[06-8]|6)[0-9]10,17$/
return SUPPORTED_CARD_BRANDS[:MAESTRO]
else
return nil
end
end
【讨论】:
以上是关于ActiveMerchant 说有效卡的信用卡无效的主要内容,如果未能解决你的问题,请参考以下文章
使用 ActiveMerchant 和 PayPal 在实时网站上接受虚拟信用卡
ActiveMerchant 如何处理 Authorize.net 上的定期付款取消信用卡帐户?
ActiveMerchant - 向用户汇款的最佳方法?贝宝账户或信用卡