2016-04-10 11 views
0

Ich benutze Active Merchant Gem, um Zahlungen über die Website zu behandeln. Aber jetzt möchte ich diese Zahlungen monatlich wiederholen. Gibt es einen Weg mit aktiven Händler oder?Active Merchant paypal wiederkehrende Zahlungen

subscription_controller.rb

class SubscriptionsController < ApplicationController 
    def new 
    @home_page = true 
    @white = true 
    @subscription = Subscription.new(token: params[:token]) 
    if !logged_in? 
     redirect_to signup_url 
    end 
    end 

    def create 
    @subscription = Subscription.new(subscription_params) 
    @subscription.remote_ip = request.remote_ip 
    @subscription.user_id = current_user.id 
    if @subscription.save 
     if @subscription.purchase 
     @subscription.send_thank_you_email 
     redirect_to thankyou_path 
     else 
     raise ActiveRecord::Rollback 
     flash[:notice] = "It seems something went wrong with the paypal transaction. Please check that your credit card is valid and has credit in it and try again." 
     redirect_to :back 
     end 
    else 
     flash[:notice] = "Something went wrong with marking your purchase as complete. Please contact support to check it out." 
     redirect_to :back 
    end 
    end 

    def purchase 
    response = GATEWAY.setup_purchase(999, 
     ip: request.remote_ip, 
     return_url: new_subscription_url, 
     cancel_return_url: root_url, 
     currency: "USD", 
     items: [{name: "Order", description: "Recurring payment for ******", quantity: "1", amount: 999}] 
    ) 
    redirect_to GATEWAY.redirect_url_for(response.token) 
    end 

    def thank_you 
    @home_page = true 
    @white = true 
    end 

    private 

    def subscription_params 
     params.require(:subscription).permit(:token) 
    end 


end 

subscription.rb Modell

def purchase 
    response = GATEWAY.purchase(999, express_purchase_options) 
    response.success? 
    end 

    def token=(token) 
    self[:token] = token 
    if new_record? && !token.blank? 
     # you can dump details var if you need more info from buyer 
     details = GATEWAY.details_for(token) 
     puts details.params["PayerInfo"]["PayerName"].inspect 
     self.payer_id = details.payer_id 
     self.first_name = details.params["PayerInfo"]["PayerName"]["FirstName"] 
     self.last_name = details.params["PayerInfo"]["PayerName"]["LastName"] 
    end 
    end 

    # send thank you email 
    def send_thank_you_email 
    UserMailer.thank_you(self).deliver_now 
    end 

    private 

    def express_purchase_options 
    { 
     :ip => remote_ip, 
     :token => token, 
     :payer_id => payer_id 
    } 
    end 

production.rb Umgebung

config.after_initialize do 
    ActiveMerchant::Billing::Base.mode = :production 
    ::GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(
     :login => ENV['PAYPAL_LOGIN'], 
     :password => ENV['PAYPAL_PASSWORD'], 
     :signature => ENV['PAYPAL_SIGNATURE'] 
    ) 
    end 

Antwort

1

Ich denke ActiveMerchant so etwas haben verwendet:

subscription = PAYPAL_EXPRESS_GATEWAY.recurring(@subscription.price_in_cents, nil, 
     :description => 'blah', 
     :start_date => Date.tomorrow, 
     :period => 'Year', 
     :frequency => 1, 
     :amount => price, 
     :currency => 'USD' 
    ) 

Siehe diese Antwort Does ActiveMerchant support Subscription Based transaction

dies Siehe auch: https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal_express.rb

https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb

+0

aber, wie ich es verwenden? Wo implementiere ich es in meinem Fall? –

+0

Scheint, dass Sie eine Aktion in einem Ihrer Controller erstellen können, ActiveMerchant benötigen und dann die Anfrage mit Ihren Produktinformationen erstellen. –

+1

nach der Forschung denke ich paypal wiederkehrend ist veraltet. So habe ich jetzt das paypal_recurring Juwel implementiert, das die Arbeit gut macht. –