Skip to content
/ tbk Public
forked from pedroburon/tbk

Python implementation of Transbank's Webpay protocol

License

Notifications You must be signed in to change notification settings

rulz/tbk

 
 

Repository files navigation

tbk - Transbank's Webpay protocol

Attention: Beta not ready for production

Python implementation of Transbank's Webpay protocol.

Latest Version Development Status Build Status Coverage Status Code Health Downloads Documentation Status

Installation

pip install tbk

Usage

Set environment variable for Commerce and initialize.

os.environ['TBK_COMMERCE_ID'] = "597026007976"
os.environ['TBK_COMMERCE_KEY'] = "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAn3HzPC1ZBzCO3edUCf/XJiwj3bzJpjjTi/zBO9O+DDzZCaMp...""

from tbk.webpay.commerce import Commerce

commerce = Commerce.create_commerce()
# for development purposes you can use
# commerce = Commerce(testing=True)

If you want to set the official webpay log (for certification issues):

from tbk.webpay.logging import configure_logger
from tbk.webpay.logging.official import WebpayOfficialHandler

configure_logger(WebpayOfficialHandler(LOG_BASE_PATH))

Create a new payment and redirect user.

from tbk.webpay.payment import Payment

payment = Payment(
    request_ip='127.0.0.1', # customer request ip
    commerce=commerce,
    success_url='http://localhost:8080/webpay/success/',
    confirmation_url='http://111.122.133.144:8080/webpay/confirmation/', # callback url with IP
    failure_url='http://localhost:8080/webpay/failure/',
    session_id='SOME_SESSION_VALUE',
    amount=123456, # could be int, str or Decimal
    order_id=1,
)
payment.redirect_url

Then to confirm payment, use an endpoint with:

from tbk.webpay.confirmation import Confirmation

def confirm_payment(request):
    confirmation = Confirmation(
        commerce=commerce,
        request_ip=request.ip_address,
        data=request.POST
    )

    # validate_confirmation validate if order_id and amount are valid.
    if confirmation.is_success() and validate_confirmation(confirmation.order_id, confirmation.amount):
        return HttpResponse(commerce.acknowledge)

    return HttpResponse(commerce.reject)

About webpay communication protocol: http://sagmor.com/rants/technical/webpay-communication-protocol/

Development

After cloning the repo:

python setup.py develop

For testing purposes:

python setup.py test

Recommended:

pip install nosy
nosy

Credits

This is a port from ruby implementation http://github.com/sagmor/tbk.

About

Python implementation of Transbank's Webpay protocol

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%