ActiveMerchant 是否支持基于订阅的交易 [英] Does ActiveMerchant support Subscription Based transaction

查看:14
本文介绍了ActiveMerchant 是否支持基于订阅的交易的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 ActiveMerchant 集成到我的 Rails 应用程序中.我有某些计划,如果订阅会限制用户访问.你们所有人可能都知道基于订阅的应用程序是什么,我不打算解释我的应用程序.请给我一些例子来实现这一点.我已经看过 railscasts 的第 141 到 146 集,但 Ryan 只演示了 Paypal Web Payments Standard 和 Paypal Web Payments Pro.我也阅读了很多博客,但没有帮助.

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 based app is, I am not going into explaining my app. Please suggest me some examples for making this happen. I have already viewed the railscasts episodes 141 through 146 but Ryan has only demonstrated Paypal Web Payments Standard and Paypal Web Payments Pro. I have also read a bunch of blogs but it didn't help.

请帮忙.

提前致谢.

推荐答案

迟到总比不到好,是吧?

Better late than never, huh?

ActiveMerchant 的实际主分支包含一个集成到 PaypalGatewayPaypalExpressGateway 中的循环类.

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:

  • 无论设置:initial_amount,只要设置结算协议就不会显示任何价格.包含商品将在 billing_agreement[:description] 上方显示商品的价格.所以我不确定这会如何影响捕获,这就是我这些天正在测试的内容.
  • IPN 通知.以下代码段中缺少它们.更新以下...

  • 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

你想看看PaypalRecurringAPIPaypalExpressGateway/PayPalGateway 看看有哪些选项处理xml请求的位置.

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 新的、修改过的关于 paypal 和定期计费的截屏视频是通过单独的 paypal-recurring gem.如果您无法使用 ActiveMerchant,这可能会有所帮助.

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.

这篇关于ActiveMerchant 是否支持基于订阅的交易的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆