有效的Merchant paypal经常性付款

时间:2016-04-10 10:52:29

标签: ruby-on-rails ruby paypal activemerchant

我正在使用Active Merchant gem来处理通过该网站的付款。但现在我想每月重复这些付款。有没有办法使用活跃的商家或?

subscription_controller.rb

    class SubscriptionsController < 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

subscription.rb模型

def purchase
    response = GATEWAY.purchase(999, express_purchase_options)
    response.success?
  end

  def token=(token)
    self[:token] = token
    if new_record? && !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 => remote_ip,
      :token => token,
      :payer_id => payer_id
    }
  end

production.rb environment

config.after_initialize do
    ActiveMerchant::Billing::Base.mode = :production
    ::GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(
      :login => ENV['PAYPAL_LOGIN'],
      :password => ENV['PAYPAL_PASSWORD'],
      :signature => ENV['PAYPAL_SIGNATURE']
    )
  end

1 个答案:

答案 0 :(得分:1)

我认为ActiveMerchant过去常常这样:

    subscription = PAYPAL_EXPRESS_GATEWAY.recurring(@subscription.price_in_cents, nil, 
        :description => 'blah',
        :start_date => Date.tomorrow, 
        :period => 'Year',
        :frequency => 1,
        :amount => price,
        :currency => 'USD'
    )

请参阅此回答Does ActiveMerchant support Subscription Based transaction

另见:https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal_express.rb

https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb