Besser spät als nie, nicht wahr?
Der eigentliche Master-Zweig von ActiveMerchant enthält eine wiederkehrende Klasse, die sowohl in PaypalGateway
als auch in PaypalExpressGateway
integriert ist.
Hier ist ein Demo-Snippet, das funktioniert. Ich bin nur nicht sicher über ein paar Punkte (ich werde so bald die Antwort aktualisieren, wie ich sie herausgefunden), das ist:
- einfach die Abrechnungsvereinbarung Einstellung nicht jeden Preis nicht zeigen, unabhängig
:initial_amount
der Einstellung. Wenn Sie einen Artikel hinzufügen, wird der Artikelpreis über dem billing_agreement[:description]
angezeigt. Ich bin also nicht sicher, wie sich das auf die Gefangenschaft auswirkt, und das teste ich gerade.
IPN-Benachrichtigungen. Sie fehlen im folgenden Codeausschnitt. Aktualisieren Sie folgende ...
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
Sie wollen einen Blick haben in PaypalRecurringAPI und PaypalExpressGateway/PayPalGateway zu sehen, welche Optionen verarbeitet werden und an welchem Ort der XML-Anfrage.
bearbeiten Der neuere, überarbeitete Screencast über Paypal und wiederkehrende Abrechnung erfolgt mit einem separaten paypal-recurring Edelstein. Vielleicht hilft das, wenn Sie ActiveMerchant nicht zum Laufen bringen können.
Dieser Beitrag kann auch hilfreich für Sie sein. http://stackoverflow.com/questions/1683929/paypal-recurring-billing-and-activermerchant –