Sermepa web TPV

Add simple web payment tpv to your rails application. This version is compliance with new hmac 256 signature. For older sha1 signature use version 0.0.2.

Example app source at: https://github.com/ritxi/sermepa_web_tpv_sample_app

Steps to use it:

  1. Create a new rails application

    rails new payment_app

  2. Add sermepa_web_tpv to your Gemfile

    gem 'sermepa_web_tpv'

  3. Add a transaction model with an amount and transaction_number fields

    rails g model Transaction amount:float transaction_number:integer

  4. Configure tpv options

module MyApp
  class Application < Rails::Application
    config.web_tpv.bank_url = 'https://sis-t.sermepa.es:25443/sis/realizarPago'
    config.web_tpv.response_host = 'https://my_application_host.com'
    config.web_tpv.merchant_code = '000000000'
    config.web_tpv.terminal = 1
    config.web_tpv.callback_response_path = '/payments/validate'
    config.web_tpv.redirect_success_path = '/payments/success'
    config.web_tpv.redirect_failure_path = '/payments/failure'
    config.web_tpv.merchant_secret_key = 'superseeeecretstring'
    config.web_tpv.currency = 978 # Euro

    config.web_tpv.transaction_type = 0
    config.web_tpv.language = '003' #Catala
    config.web_tpv.merchant_name = 'MY MERCHANT NAME'
    config.web_tpv.pay_methods = 'C' # Only credit card
  end
end
  1. Add a controller payment to perform a new request payment and receive payment result
MyApp::Application.routes.draw do
  get 'payments/new' => 'payments#new', :as => 'new_payment'
  post 'payments/validate' => 'payments#validate', :as => 'payment_validate'
  get  'payments/success' => 'payments#success', :as => 'payment_success'
  get  'payments/failure' => 'payments#failure', :as => 'payment_failure'
end
class PaymentsController
  skip_before_filter :verify_authenticity_token

  def new
    transaction = Transaction.new(amount: 10)
    request = SermepaWebTpv::Request.new(transaction, "Transaction description")
    request.transact {|t| t.save }
    render json: { options: sermepa_request.options, url: sermepa_request.bank_url }
    # Submit a form with given options to the url
  end

  def success
    flash[:notice] = "Payment done successfuly!"
    redirect_to root_path
  end

  def failure
    flash[:failure] = "Payment failed, try again later."
    redirect_to root_path
  end

  def validate
    response = SermepaWebTpv::Response.new(params)
    if response.valid? && response.success?
      # mark your transaction as finished
    end
  end
end