Mejor tarde que nunca, ¿eh?
La rama maestra real de ActiveMerchant contiene una clase recurrente integrada tanto en PaypalGateway
como en PaypalExpressGateway
.
Aquí hay un fragmento de demostración que funciona. No estoy seguro acerca de solo unos pocos puntos (Voy a actualizar la respuesta tan pronto como me di cuenta de ellos), que son:
- Sólo establecer el acuerdo de pago no muestra ningún precio independientemente de lo programado
:initial_amount
. Si se incluye un artículo, se mostrará el precio del artículo por encima del billing_agreement[:description]
. Así que no estoy seguro de cómo esto afecta las capturas, que es lo que estoy probando en estos días.
notificaciones IPN. Faltan en el siguiente fragmento. Actualizar siguiente ...
class PaymentsController < ApplicationController
include ActiveMerchant::Billing
# GET /subscriptions/:id/checkout
def checkout
payment_request = PAYPAL_EXPRESS_GATEWAY.setup_purchase(@subscription.price_in_cents,
:billing_agreement => {
:type => 'RecurringPayments',
:description => 'Subscription agreement',
},
:currency => 'CHF',
:no_shipping => true,
:allow_guest_checkout => true,
:allow_note => false,
:initial_amount => @subscription.price_in_cents,
:locale => 'de',
:ip => request.remote_ip,
:return_url => url_for(:action => :confirm, :only_path => false),
:cancel_return_url => url_for(:action => :cancel, :only_path => false),
# Looks like :notify_url is not used here, but in the next section
)
if payment_request.success?
redirect_to PAYPAL_EXPRESS_GATEWAY.redirect_url_for(payment_request.token)
else
# Render something informal
render :text => payment_request.inspect.to_s and return
end
end
# POST /subscriptions/:id/confirm
# params having token and PayerID
def confirm
profile = PAYPAL_EXPRESS_GATEWAY.recurring(@subscription.price_in_cents, nil,
:description => 'Subscription agreement',
:start_date => Date.tomorrow, # PayPal throws an error if the date is not in the future
:period => 'Year',
:frequency => 1,
:amount => @subscription.price_in_cents,
:currency => 'CHF',
:initial_amount => @subscription.price_in_cents,
:auto_bill_outstanding => true,
:token => params[:token]
)
# profile has profile_id and profile_status. remember status because this gets updated via IPN.
@debug = {:params => params.inspect.to_s, :profile => profile.inspect.to_s }
# Render something informal
render :text => @debug.to_s and return
end
# implement instead of just log
def notification
log = Logger.new 'log/ipn.log'
log.debug params.inspect
render :text => params.inspect.to_s and return
end
# Private methods omitted
end
Usted quiere tener una mirada en PaypalRecurringAPI y PaypalExpressGateway/PayPalGateway para ver qué opciones se procesan y en el que el lugar de la solicitud XML.
editar El nuevo screencast revisado sobre paypal y facturación recurrente se realiza con una gema separada paypal-recurring. Tal vez esto ayude si no puedes hacer que funcione con ActiveMerchant.
Esta publicación relacionada también puede ser útil para usted. http://stackoverflow.com/questions/1683929/paypal-recurring-billing-and-activemerchant –