verificación de CVV

Hola a todos,

tengo un problema con la verificación del CVV (Card Verification
Value),
estoy usando ActiveMerchant como plugin y Moneris como el gateway,
funciona
bastante bien la cosa el único problema es que parece ser que no está
validando el CVV, le paso cualquier cosa y me sigue validando las
tarjetas
:(. He buscado por todos lados y nada, compré el peepcode de
ActiveMerchant,
ví los railscast de R. Bates, lo más cercano lo encontré en este thread
[1].

Aca el código que considero relevante:

Aunque esto no creo que sea necesario, pero lo puse por las dudas

#environment.rb
. . .
require ‘active_merchant’
ActiveMerchant::Billing::CreditCard.require_verification_value = true
. . .

order.rb

. . .
def process(order)
Base.mode = :test

    gateway = MonerisGateway.new(:login => "store2", :password =>

“yesguy”)

    credit_card = CreditCard.new(
        :type => order[:card_type],  :number => order[:card_number],
        :month => order[:card_expiration_month], :year =>

order[:card_expiration_year],
:first_name => order[:card_name].split(’ ‘).first,
:last_name =>
order[:card_name].split(’ ').last,
:verification_value => ‘1000’

:verification_value => order[:card_verification_code]

    )

    if credit_card.valid?
        billing_datas = {
            :name => order[:billing_name],
            :address1 => order[:billing_address], :address2 =>

order[:billing_address2],
:phone => order[:contact_phone_number],
:city => order[:billing_city], :state =>
order[:billing_state],
:country => order[:billing_country], # Be sure that here
will be the country code instead the country name
:zip => order[:billing_zip]
}

        options = {
            :order_id => '36012-' + self.id.to_s,
            :billing_address => billing_datas,
            :email => order[:contact_email],
            :subtotal => total,
            :shipping => shipping_price,
            :tax1 => taxes,
            :custom => special_instructions
        }

response = gateway.authorize(pennis , credit_card, options)

response = gateway.authorize(1000 , credit_card, options)

        response = gateway.authorize(1036 , credit_card, options)
        # Pennis Simulation code to CVV verification
        # 10.35 APPROVED         M
        # 10.36 CAPTURE declined N

        # For debug
        cvv_result = response.cvv_result
        puts " ---------------------- "
        puts cvv_result
        puts cvv_result[:code]
        puts cvv_result[:message]
        puts " ----------------------"

        if response.success?
            self.status = 'processed'
        else
           puts response.message # for debug
           self.status = 'failed'
           self.error_message = response.message
           self.decline_times += 1 if

self.error_message.include?(‘ecline’)
end
else # Credit Card is not valid
self.error_message = “Error: credit card is not valid.
#{credit_card.errors.full_messages.join('. ')}”
end
self.save
end
. . .

response.cvv_result siempre es un hash que tiene nil :(. Gracias de
antemano
por cualquier ayuda,
Franco.

[1]
http://groups.google.com/group/activemerchant/browse_thread/thread/3739a1e0f75701b0/7485b7a38f076715?lnk=gst&q=cvv#7485b7a38f076715

def process(order)
¿Qué tienes en el controller?

2009/2/3 Franco B. [email protected]

Algo así

. . .
def place_order
. . .
@order.process(params[:order])

if @order.status == ‘processed’
render :action => ‘receipt’
else
render :template => ‘shopping_carts/checkout’
end
end
. . .

pero de todas formas no creo que sea un problema de que me falte algún
dato
porque he hecho (y estoy haciendo) pruebas con datos fijos y tampoco
nada
:(. Por ejemplo:

gateway = MonerisGateway.new(:login => “store5”, :password => “yesguy”)

credit_card = CreditCard.new(
:type => ‘visa’,
:number => ‘4242424242424242’,
:month => ‘12’,
:year => ‘2012’,
:first_name => ‘first’,
:last_name => ‘last’,
:verification_value => ‘1000’
)
. . .
response = gateway.authorize(1030, credit_card, options)

credit_card = CreditCard.new(
:type => ‘visa’,
:number => ‘4242424242424242’,
:month => ‘12’,
:year => ‘2012’,
:first_name => ‘first’,
:last_name => ‘last’,
:verification_value => ‘1000’
)
Otra chorrada, por probar. Los campos :number, :month,
:verification_value
y :year ponlos sin comillas. Ya te digo que sólo es por probar

No sé, igual esto no te ayuda pero al probarlo te das cuenta de otra
cosa

Un saludo

El 3 de febrero de 2009 20:18, Franco B.
[email protected]escribió:

Gracias, todo sirve, de hecho no lo había probado de esa manera, aunque
tampoco tuve exito, parece que acepta los datos de las dos formas.

Me parece que la mano viene por la forma en que tomo la respuesta; por
la
documentación que he leido el resultado de validar el CVV esta en
response.cvv_result aunque yo siempre lo tengo en null a este hash :'(.

2009/2/3 Andrés gutiérrez [email protected]

Ese Gateway que usas para procesar pagos permite cuentas bancarias
españolas?

options = {
:order_id => ‘36012-’ + self.id.to_s,
:billing_address => billing_datas,
:email => order[:contact_email],
:subtotal => total,
:shipping => shipping_price,
:tax1 => taxes,
:custom => special_instructions
}

Perdona, otra pregunta. veo que casi toda la info que pasas al modelo la
pasas en @order, ¿Pero de donde salen: shipping_price, total, taxes y
special_instructions?2009/2/3 Franco B. [email protected]

2009/2/3 Francesc E. [email protected]

Ese Gateway que usas para procesar pagos permite cuentas bancarias
españolas?

La verdad que no lo sé, pero no creo. Es un gateway muy conocido en
Canada,
de hecho lo estoy usando justamente para una empresa de alla.

Saludos

On Tue, Feb 3, 2009 at 5:59 PM, Andrés gutiérrez
[email protected]wrote:

Perdona, otra pregunta. veo que casi toda la info que pasas al modelo la
pasas en @order, ¿Pero de donde salen: shipping_price, total, taxes y
special_instructions?

esteeeeeeee bueno me hiciste dar cuenta que no necesitaba pasar @order
como
parámentro al método, gracias. De todas formas el tema principal del
thread
sigue sin solución :cry:

Creo que encontré el problema, aunque nose si lo voy a poder resolver de
todas maneras lo voy a intentar. Cambiando palabras en los buscadores
buscando información sobre el tema llegue a [1], después de ver ese
thread
revisé el código del gateway para moneris y parece tener razón, el
gateway
no implementa verificación de VCC o VCD como sea.

Voy a intentar escribir el código, a no ser que aparezca un guru aca y
me
diga que él ya lo ha hecho o que encontró el código en alguna parte :).
Si
tengo exito les aviso sino no sentiran más de mi por un tiempo :D.

Saludos.

[1]
http://groups.google.com/group/activemerchant/browse_thread/thread/156b11253414d747/9b2209336d03b3ce?lnk=gst&q=moneris#9b2209336d03b3ce

2009/2/3 Franco B. [email protected]