Поддерживает ли ActiveMerchant транзакцию на основе подписки - PullRequest
5 голосов
/ 11 ноября 2010

Я пытаюсь интегрировать ActiveMerchant в мое приложение rails. У меня есть определенные планы, которые в случае подписки ограничивают доступ пользователя. Поскольку вы все знаете, что такое приложение на основе подписки, я не буду объяснять свое приложение. Пожалуйста, предложите мне несколько примеров для того, чтобы это произошло. Я уже просмотрел эпизоды Railscasts с 141 по 146, но Райан продемонстрировал только Paypal Web Payments Standard и Paypal Web Payments Pro. Я также прочитал несколько блогов, но это не помогло.

Пожалуйста, помогите.

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 29 августа 2012

Лучше поздно, чем никогда, а?

Фактическая основная ветвь ActiveMerchant содержит повторяющийся класс, интегрированный как в PaypalGateway, так и в PaypalExpressGateway.

Вот демонстрационный фрагмент, который работает. Я просто не уверен насчет нескольких моментов (я обновлю ответ, как только я их выясню), а именно:

  • Простая установка соглашения о выставлении счета не показывает никакой цены независимо от установки :initial_amount. Включение предмета покажет цену предмета выше billing_agreement[:description]. Поэтому я не уверен, как это влияет на захваты, что я сейчас и тестирую.
  • Уведомления IPN. Они отсутствуют в следующем фрагменте. Обновить следующее ...

    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
    

Вы хотите просмотреть PaypalRecurringAPI и PaypalExpressGateway / PayPalGateway , чтобы увидеть, какие параметры обрабатываются и в каком месте запроса xml.

edit Более новый, пересмотренный скринкаст о PayPal и периодических платежах сделан с отдельным PayPal-периодическим Gem. Может быть, это поможет, если вы не можете заставить его работать с ActiveMerchant.

0 голосов
/ 11 ноября 2010

Активный продавец поддерживает регулярные платежи за некоторые из своих шлюзов (https://github.com/Shopify/active_merchant/wiki/GatewayFeatureMatrix).

Каждый имеет немного различный синтаксис (https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/gateways/authorize_net_cim.rb), но может выполнить то, что вы хотите.

Однако я бы порекомендовал вам выбрать свой платежный шлюз и использовать для него определенный APi. AM несколько отстает (по моему опыту), и регулярные платежи не являются его основной целью.

Существуют также службы, которые будут обрабатывать все взаимодействия шлюза для вас, и вы просто имеете дело с этим API. Это упрощает прием платежей и обработку требований Pci DSS в случае сторонних платежных страниц.

...