For any operation with puntopagos you need a request object, this object provide 2 methods to create a transaction and retrieve the status. Creating a PuntopagosRequest object is as simple as next example.
>>> from puntopagos.request import PuntopagosRequest
>>> request = PuntopagosRequest(key='API-KEY', secret='API-SECRET')
The request instanciated above use a HTTPSConnection from httplib, if you want to use a different kind of connection, you need to emulate the API of this class and pass it as a parameter.
>>> request = PuntopagosRequest(key='API-KEY', secret='API-SECRET', connection=MyOwnConnection('www.puntopagos.com'))
An useful implementation of this API is HTTPConnection (without the S), if you don’t want SSL encryption.
>>> request = PuntopagosRequest(key='API-KEY', secret='API-SECRET', connection=HTTPConnection('www.puntopagos.com'))
We provide an useful function to create connections for puntopagos.
>>> from puntopagos.util import get_connection
>>> connection = get_connection(ssl=True, sandbox=True, debug=3)
<httplib.HTTPSConnection instance at 0x1748ef0>
>>> connection.host
'sandbox.puntopagos.com'
>>> connection.debuglevel
3
Creating a transaction needs 4 arguments, [trx_id, medio_pago, monto, detalle] as detailed in PuntoPagos - Manual Técnico (REST API) v0.99, p. 3.
>>> from decimal import Decimal
>>> from puntopagos.request import PuntopagosRequest
>>> request = PuntopagosRequest(key='API=KEY', secret='API-SECRET')
>>> response = request.create(trx_id='123', medio_pago='3', monto=Decimal('2000'), detalle='Foo bar product')
Note the monto is a Decimal from built-in module decimal.
To retrieve a transaction’s status, you need 3 arguments [trx_id, monto, token] as detailed in PuntoPagos - Manual Técnico (REST API) v0.99, p. 7.
>>> response = request.status(trx_id='123', monto=Decimal('2000'), token='ABF56SDCL2345')
The create and status method both returns a PuntopagosResponse instance. This class provide several attributes for understanding the response of puntopagos.
For instance, if you don’t provide a correct combination between trx_id, monto and token for a status request, puntopagos will return a 400 Bad Request response. You can check the complete, if False then http_error exists and contains the http error code.
>>> response = request.status(trx_id='123', monto=Decimal('2000'), token='ABF56SDCL2345')
>>> response.complete
False
>>> response.http_error
400
In case the response is success you will have an immutable attribute _data for the info retrieved by puntopagos, and a get_data() method for a dict with the same information.
>>> response = request.status(trx_id='79', monto=Decimal('15000'), token='LY26HNR6XNG8KN9W')
>>> response.complete
True
>>> response.get_data()
{u'medio_pago': u'3', u'codigo_autorizacion': u'281172', u'medio_pago_descripcion': u'WebPay Transbank', u'tipo_pago': None, u'respuesta': u'00', u'monto': Decimal('15000.00'), u'num_cuotas': 0, u'tipo_cuotas': u'Sin Cuotas', u'fecha_aprobacion': u'2012-01-19T17:07:47', u'primer_vencimiento': None, u'numero_operacion': u'6998364387', u'token': u'LY26HNR6XNG8KN9W', u'trx_id': u'79', u'error': None, u'numero_tarjeta': u'6623', u'valor_cuota': 0}
respuesta meaning 00 Transaccion completada OK 1 Transaccion rechazada 2 Transaccion anulada 3 Transaccion ya existe 4 Transaccion no existe 5 Transaccion ya procesada 6 Transaccion incompleta 7 Error del financiador 8 Error del sistema 9 IP no autorizada para realizar esta accion 11 Cargo realizado con problemas, revise su estado de cuenta