Does ActiveMerchant support Subscription Based transaction

后端 未结 2 1936
情书的邮戳
情书的邮戳 2021-02-06 14:58

I am trying to integrate ActiveMerchant in my rails app. I have certain plans that if subscribed limit the user access. As you all guyz might be knowing what a subscription base

2条回答
  •  夕颜
    夕颜 (楼主)
    2021-02-06 15:26

    Better late than never, huh?

    The actual master branch of ActiveMerchant contains a recurring class integrated into both the PaypalGateway and PaypalExpressGateway.

    Here's a demo snippet which works. I'm just not sure about a few points (I will update the answer as soon as I figured them out), which are:

    • Just setting the billing agreement does not show any price regardless of setting :initial_amount. Including an Item will show the item's price above the billing_agreement[:description]. So I am not sure how this affects capturings, which is what I am testing these days.
    • IPN notifications. They're missing in the following snippet. Update following...

      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
      

    You want to have a look into PaypalRecurringAPI and PaypalExpressGateway / PayPalGateway to see which options are processed and in which place of the xml request.

    edit The newer, revised screencast about paypal and recurring billing is done with a separate paypal-recurring gem. Maybe this helps if you can't get it to work with ActiveMerchant.

提交回复
热议问题