Search code examples
rubye-commercepayment-gatewayactivemerchantpaymill

How to make a payment via Paymill using Ruby


I need to make a payment to Paymill and I want to be able to achieve this using the Ruby language.

UPDATE:

I did publicly release paymill_on_rails on github. It is a Paymill subscription system based on Rails 4.0.0 and paymill-ruby, running on ruby-2.0.0-p247

See also the home project

An example application is also deployed on Heroku. Please feel free to fork & contribute eventually.


Solution

  • I managed to achieve this quite easily using the following steps:

    1. Create a new Account at Paymill.

    2. Get the public and private key from the Paymill settings page

    3. Install the activemerchant gem:

      gem install activemerchant
      
    4. I used the following script below in order to make a purchase

    Please note that as long as you don't activate your account at Paymill it will run in Test mode. So no money will actually be transferred. They also list test credit cards which will never be debited either.

    The script:

    require 'rubygems'
    require 'active_merchant'
    require 'json'
    
    # Use the TrustCommerce test servers
    ActiveMerchant::Billing::Base.mode = :test
    
    gateway = ActiveMerchant::Billing::PaymillGateway.new(
        :public_key => 'MY_PAYMILL_PUBLIC_KEY', 
        :private_key => 'MY_PAYMILL_PRIVATE_KEY')
    
    gateway.default_currency = 'USD'
    
    # ActiveMerchant accepts all amounts as Integer values in cents
    amount = 1000  # $10.00
    
    # The card verification value is also known as CVV2, CVC2, or CID
    credit_card = ActiveMerchant::Billing::CreditCard.new(
        :first_name         => 'Bob',
        :last_name          => 'Bobsen',
        :number             => '5500000000000004',
        :month              => '8',
        :year               => Time.now.year+1,
        :verification_value => '000')
    
    # Validating the card automatically detects the card type
    if credit_card.valid?
    
    # Capture the amount from the credit card
    response = gateway.purchase(amount, credit_card)
    
    if response.success?
    puts "Successfully charged $#{sprintf("%.2f", amount / 100)} to the credit card #{credit_card.display_number}"
    else
    raise StandardError, response.message
    end
    end