Поддерживает ли ActiveMerchant транзакцию на основе подписки

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

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

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


person Rohit    schedule 11.11.2010    source источник
comment
Этот связанный пост также может быть вам полезен. stackoverflow.com/questions/1683929/   -  person Nate Bird    schedule 11.11.2010


Ответы (2)


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

Фактическая основная ветвь 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- повторяющийся драгоценный камень. Возможно, это поможет, если вы не можете заставить его работать с ActiveMerchant.

person pdu    schedule 29.08.2012
comment
Согласно this, они откажутся от поддержки повторяющихся платежей в ActiveMerchant v2. - person Atul Khanduri; 29.10.2015

Активный продавец поддерживает регулярные платежи для некоторых своих шлюзов (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 в случае сторонних платежных страниц.

person David Lyod    schedule 11.11.2010
comment
Я хочу использовать Paypal в качестве шлюза, также я хочу, чтобы Paypal обрабатывал транзакцию, т.е. если пользователь нажимает кнопку подписки, он попадает на сайт PayPal, и вся транзакция выполняется там, и в случае успеха IPN отправляется на мой сайт, и после завершения транзакции пользователь возвращается на мой сайт (я думаю, что это что-то вроде стандарта веб-платежей Paypal). Это возможно - person Rohit; 11.11.2010
comment
Это можно сделать за пределами AM, на сайте PayPals. - person David Lyod; 11.11.2010
comment
Но я хочу сделать это через Paypal. Возможно ли, пожалуйста, порекомендуйте что-нибудь. - person Rohit; 16.11.2010
comment
Извините, пожалуйста, замените Paypal на ActiveMerchant в предыдущем комментарии. - person Rohit; 17.11.2010