title: Active Merchant paypal recurring payments
body: <p>I am using Active Merchant gem to handle payments through the site. But now i want to make these payments recurring, on a monthly basis. Is there a way using active merchant or?</p>
  
  <p>subscription_controller.rb</p>
  
  <pre><code>    class SubscriptionsController &lt; 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
  </code></pre>
  
  <p>subscription.rb model</p>
  
  <pre><code>def purchase
      response = GATEWAY.purchase(999, express_purchase_options)
      response.success?
    end
  
    def token=(token)
      self[:token] = token
      if new_record? &amp;&amp; !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 =&gt; remote_ip,
        :token =&gt; token,
        :payer_id =&gt; payer_id
      }
    end
  </code></pre>
  
  <p>production.rb environment</p>
  
  <pre><code>config.after_initialize do
      ActiveMerchant::Billing::Base.mode = :production
      ::GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(
        :login =&gt; ENV['PAYPAL_LOGIN'],
        :password =&gt; ENV['PAYPAL_PASSWORD'],
        :signature =&gt; ENV['PAYPAL_SIGNATURE']
      )
    end
  </code></pre>