Attention: Beta not ready for production
Python implementation of Transbank's Webpay protocol.
pip install tbk
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/
After cloning the repo:
python setup.py develop
For testing purposes:
python setup.py test
Recommended:
pip install nosy nosy
This is a port from ruby implementation http://github.com/sagmor/tbk.