Created
January 8, 2012 19:34
-
-
Save diegok/1579406 to your computer and use it in GitHub Desktop.
Small ruby object to interact with MercadoPago API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MercadoPago | |
require 'rubygems' | |
require 'json/add/core' | |
require 'uri' | |
require 'net/https' | |
attr_accessor :client, :secret, :currency | |
def initialize(options={}) | |
@client = options[:client_id] | |
@secret = options[:secret] | |
end | |
def token | |
@token or get_token | |
end | |
def get_token(url='https://api.mercadolibre.com/oauth/token') | |
data = post_request URI.parse(url), | |
:grant_type => 'client_credentials', | |
:client_id => @client, | |
:client_secret => @secret | |
return @token = data['access_token'] | |
end | |
# prepare checkout and returns reference to it | |
# Accept config as: http://developers.mercadopago.com/ar/api-checkout | |
# :external_reference => Referencia para uso propio del vendedor Opcional | |
# | |
# :items => [ | |
# :id => Código Opcional | |
# :title => Título. Será mostrado en el proceso de pago. Obligatoria | |
# :description => Descripción Opcional | |
# :quantity => Cantidad Obligatoria | |
# :unit_price => Precio unitario Obligatoria | |
# :currency_id => Tipo de moneda. Ver API de Currencies Obligatoria | |
# :picture_url => URL de la imagen Opcional | |
# ], | |
# | |
# :payer => { | |
# :name => Nombre del comprador | |
# :surname Apellido del comprador | |
# :email E-mail del comprador Opcional | |
# }, | |
# | |
# :back_urls => { # URLs de retorno al sitio del vendedor: | |
# :success => URL de pago acreditado | |
# :pending => URL de pago pendiente Opcional | |
# }, | |
# | |
# :payment_methods => { # Configuración de medios de pago a excluír en el proceso de pago: | |
# :excluded_payment_methods => Listado de medios de pagos a excluír: | |
# :excluded_payment_types => Listado de medios de pagos a excluír: | |
# :installments => Cantidad máxima de cuotas que deseas. aceptar con tarjeta de crédito Opcional | |
# }, | |
def create_cart(cart=nil, url='https://api.mercadolibre.com/checkout/preferences') | |
raise "Need cart data!" unless cart; | |
data = post_request URI.parse("#{url}?access_token=#{token}"), | |
:payload => cart.to_json | |
end | |
def get_notification(id=nil) | |
raise "Need notification ID" unless id | |
uri = URI.parse("https://api.mercadolibre.com/collections/notifications/#{id}?access_token=#{token}") | |
req = Net::HTTP::Get.new(uri.request_uri) | |
req['Accept'] = 'application/json' | |
case res = build_agent(uri).request(req) | |
when Net::HTTPSuccess | |
return @last_response = JSON.parse(res.body) | |
else | |
raise res.error! | |
end | |
end | |
private | |
def post_request(uri, data={}) | |
req = Net::HTTP::Post.new(uri.request_uri) | |
req['Accept'] = 'application/json' | |
if req.body = data.delete(:payload) | |
req['Content-Type'] = 'application/json' | |
end | |
req.set_form_data(data) if data.size > 0 | |
case res = build_agent(uri).request(req) | |
when Net::HTTPSuccess | |
return @last_response = JSON.parse(res.body) | |
else | |
raise res.error! | |
end | |
end | |
def build_agent(uri) | |
http = Net::HTTP.new(uri.host, uri.port) | |
http.use_ssl = uri.scheme == 'https' | |
http.verify_mode = OpenSSL::SSL::VERIFY_NONE | |
http | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment