Skip to main content

API wrapper for Payu written in Python

Project description

payu-python-v2

payu-python is an API wrapper for Payu written in Python. Currently only works for supported credit cards in the supported countries in Latam.

Supported countries:

  • Argentina
  • Brazil
  • Chile
  • Colombia
  • Mexico
  • Panama
  • Peru

Read Utils section to find out how to get the supported credit cards for a country.

Read TODO section to find out what's missing in this library.

Installing

pip install payu-python-2

Usage

Client instantiation in sandbox mode (test)

TEST_API_LOGIN = 'pRRXKOl8ikMmt9u'
TEST_API_KEY = '4Vj8eK4rloUd272L48hsrarnUA'
TEST_MERCHANT_ID = 508029
TEST_ACCOUNT_ID = 512321

client = Client(TEST_API_LOGIN, TEST_API_KEY, TEST_MERCHANT_ID, TEST_ACCOUNT_ID, sandbox=True, language='en', debug=True)

Example data for sandbox mode

BUYER_EXAMPLE = {
    "merchantBuyerId": "1",
    "fullName": "First name and second buyer name",
    "emailAddress": "buyer_test@test.com",
    "contactPhone": "7563126",
    "dniNumber": "5415668464654",
    "shippingAddress": {
        "street1": "calle 100",
        "street2": "5555487",
        "city": "Medellin",
        "state": "Antioquia",
        "country": "CO",
        "postalCode": "000000",
        "phone": "7563126"
    }
}

PAYER_EXAMPLE = {
    "merchantPayerId": "1",
    "fullName": "First name and second payer name",
    "emailAddress": "payer_test@test.com",
    "contactPhone": "7563126",
    "dniNumber": "5415668464654",
    "billingAddress": {
        "street1": "calle 93",
        "street2": "125544",
        "city": "Bogota",
        "state": "Bogota DC",
        "country": "CO",
        "postalCode": "000000",
        "phone": "7563126"
    }
}

CREDIT_CARD_EXAMPLE = {
    "number": "4097440000000004",
    "securityCode": "321",
    "expirationDate": "2022/12",
    "name": "APPROVED"
}

EXTRA_EXAMPLE = {
    "INSTALLMENTS_NUMBER": 1
}

Payments Module

Ping service

r = client.payments.ping()

Get payments method

r = client.payments.get_payments_methods()

Make a payment (AUTHORIZATION AND CAPTURE)

r = client.payments.make_payment(reference_code='TestPayU01', description='Test Payment', tx_value=1000, tx_tax=0, 
                                 tx_tax_return_base=0, currency='COP', buyer=BUYER_EXAMPLE, payer=PAYER_EXAMPLE, 
                                 credit_card=CREDIT_CARD_EXAMPLE, payment_method='VISA', payment_country='CO', 
                                 device_session_id='vghs6tvkcle931686k1900o6e1', 
                                 ip_address='127.0.0.1', cookie='pt1t38347bs6jc9ruv2ecpv7o2', 
                                 user_agent='Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0', 
                                 extra_parameters=EXTRA_EXAMPLE,
                                 notify_url='https://ed60769e.ngrok.io/payu/notification/')

Make authorization (ONLY AUTHORIZATION)

r = client.payments.make_authorization(reference_code='TestPayU02', description='Test Payment', tx_value=1000, tx_tax=0, 
                                       tx_tax_return_base=0, currency='COP', buyer=BUYER_EXAMPLE, payer=PAYER_EXAMPLE, 
                                       credit_card=CREDIT_CARD_EXAMPLE, payment_method='VISA', payment_country='CO', 
                                       device_session_id='vghs6tvkcle931686k1900o6e1', 
                                       ip_address='127.0.0.1', cookie='pt1t38347bs6jc9ruv2ecpv7o2', 
                                       user_agent='Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0', 
                                       extra_parameters=EXTRA_EXAMPLE,
                                       notify_url='https://ed60769e.ngrok.io/payu/notification/')

Make capture (ONLY CAPTURE)

r = client.payments.make_capture(order_id='844928300', parent_transaction_id='4d7f240d-084a-426f-aa27-42c3b2a2b265')

Refund a payment

r = client.payments.refund_payment(order_id='844928300', parent_transaction_id='4d7f240d-084a-426f-aa27-42c3b2a2b265',
                                   reason='Client asked for refund.')

Tokenization Module

Create a single token

r = client.tokenization.create_single_token(payer_id='1', name='Full name', identification_number='32144457', 
                                            payment_method='VISA', number='4111111111111111', expiration_date='2022/01')

Make a payment

r = client.tokenization.make_payment(reference_code='TestPayU03', description='Test Payment', tx_value=1000, 
                                     currency='COP', buyer=BUYER_EXAMPLE, payer=PAYER_EXAMPLE, payment_method='VISA', 
                                     payment_country='CO', device_session_id='vghs6tvkcle931686k1900o6e1', 
                                     ip_address='127.0.0.1', cookie='pt1t38347bs6jc9ruv2ecpv7o2',
                                     user_agent='Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0',
                                     credit_card_token_id='b01877c3-b044-455a-99f5-82aed33795e9')

Make authorization (ONLY AUTHORIZATION)

r = client.tokenization.make_authorization(reference_code='TestPayU03', description='Test Payment', tx_value=1000, 
                                           currency='COP', buyer=BUYER_EXAMPLE, payer=PAYER_EXAMPLE, payment_method='VISA', 
                                           payment_country='CO', device_session_id='vghs6tvkcle931686k1900o6e1', 
                                           ip_address='127.0.0.1', cookie='pt1t38347bs6jc9ruv2ecpv7o2',
                                           user_agent='Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0',
                                           credit_card_token_id='b01877c3-b044-455a-99f5-82aed33795e9')

Make capture (ONLY CAPTURE)

r = client.tokenization.make_capture(order_id='844928300', parent_transaction_id='4d7f240d-084a-426f-aa27-42c3b2a2b265')

Get tokens for a payer (for the last year)

import datetime

r = client.tokenization.get_tokens(payer_id='1', credit_card_token_id='b65c63e9-ec0c-49ac-a67d-1414c3dc3ccc', 
                                   start_date=datetime.datetime.now().replace(year=2017), 
                                   end_date=datetime.datetime.now()))

Remove a token

r = client.tokenization.remove_token(payer_id='1', credit_card_token_id='d70889d2-0f82-482d-a2ed-3c0a2813d57c')

Recurring Payments Module

Create a plan

r = client.recurring.create_plan(plan_code='PLAN_CODE', description='Test Plan', interval='MONTH', interval_count=1,
                                 max_payments_allowed=12, payment_attempts_delay=1, plan_value=1000, plan_tax=0,
                                 plan_tax_return_base=0, currency='COP')

Get a plan

r = client.recurring.get_plan('PLAN_CODE')

Remove a plan

r = client.recurring.delete_plan('PLAN_CODE')

Create a customer

r = client.recurring.create_customer(full_name='Full name', email='customer_test@test.com')

Get a customer

r = client.recurring.get_customer('CUSTOMER_ID')

Delete a customer

r = client.recurring.delete_customer('CUSTOMER_ID')

Create a credit card

r = client.recurring.create_credit_card(customer_id='CUSTOMER_ID', name'Full name', document='32144457', 
                                        number='4111111111111111', exp_month='01', exp_year='2022', type='VISA', 
                                        address='calle 93 125544 Bogota')

Get a credit card

r = client.recurring.get_credit_card('CREDIT_CARD_ID')

Delete a credit card

r = client.recurring.delete_credit_card(customer_id='CUSTOMER_ID', credit_card_id='CREDIT_CARD_ID')

Create a subscription

r = client.recurring.create_subscription(customer_id='CUSTOMER_ID', credit_card_token='CREDIT_CARD_ID', 
                                         plan_code='PLAN_CODE')

Get a subscription

r = client.recurring.get_subscription('SUBSCRIPTION_ID')

Update a subscription

r = client.recurring.update_subscription(subscription_id='SUBSCRIPTION_ID', credit_card_token='CREDIT_CARD_TOKEN')

Delete a subscription

r = client.recurring.delete_subscription('SUBSCRIPTION_ID')

Create an additional charge

r = client.recurring.create_additional_charge(subscription_id='SUBSCRIPTION_ID', description='TEST CHARGE', 
                                              plan_value=1000, plan_tax=0, plan_tax_return_base=0,
                                              currency='COP')

Get an additional charge by identifier

r = client.recurring.get_additional_charge_by_identifier('RECURRING_BILLING_ID')

Get an additional charge by description

r = client.recurring.get_additional_charge_by_description('DESCRIPTION')

Get an additional charge by subscription

r = client.recurring.get_additional_charge_by_subscription('SUBSCRIPTION_ID')

Update an additional charge

r = client.recurring.update_additional_charge(recurring_billing_id='RECURRING_BILLING_ID', description='TEST CHARGE', 
                                              plan_value=1000, plan_tax=0, plan_tax_return_base=0, currency='COP')

Delete an additional charge

r = client.recurring.delete_additional_charge('RECURRING_BILLING_ID')

Get recurring bill by client

import datetime

r = client.recurring.get_recurring_bill_by_client(customer_id='CUSTOMER_ID', 
                                                  date_begin=datetime.datetime.now().replace(year=2017), 
                                                  date_final=datetime.datetime.now())

Get recurring bill by subscription

r = client.recurring.get_recurring_bill_by_subscription('SUBSCRIPTION_ID')

Queries Module

Get order by identifier

r = client.queries.get_order_by_identifier('ORDER_ID')

Get order by reference code

r = client.queries.get_order_by_reference('REFERENCE_CODE')

Get order by transaction

r = client.queries.get_transaction_response('TRANSACTION_ID')

Utils

Get supported credit cards for payments in a country

from payu.utils import get_available_franchise_for_payment
from payu.enumerators import Country, TransactionType

r = get_available_franchise_for_payment(Country.COLOMBIA, TransactionType.AUTHORIZATION)
r = get_available_franchise_for_payment(Country.COLOMBIA, TransactionType.AUTHORIZATION_AND_CAPTURE)

Get supported credit cards for tokenization in a country

from payu.utils import get_available_franchise_for_tokenization
from payu.enumerators import Country, TransactionType

r = get_available_franchise_for_tokenization(Country.COLOMBIA, TransactionType.AUTHORIZATION)
r = get_available_franchise_for_tokenization(Country.COLOMBIA, TransactionType.AUTHORIZATION_AND_CAPTURE)

Check if tokenized payment needs credit card CVV

from payu.utils import has_franchise_cvv_tokenization
from payu.enumerators import Country, Franchise, TransactionType

r = get_available_franchise_for_tokenization(Franchise.VISA, Country.COLOMBIA, TransactionType.AUTHORIZATION_AND_CAPTURE)

TODO

Payments

  • cancel_payment()
  • Support for cash / bank payment methods
  • Support for bank transfer methods

Tokenization

  • create_multiple_tokens()
  • make_multiple_payments()

Recurring Payments

  • update_plan()
  • update_customer()
  • update_credit_card()

Notes

Payment flows:

  • Authorization and Capture as two-steps.
  • Authorization and Capture in one-step also known as Charge.

Countries that have two-step payment flow available:

  • Argentina
  • Brazil
  • Peru

Countries that does not need CVV for tokenized payments.

  • Brazil
  • Colombia
  • Peru

Requirements

Contributing

We are always grateful for any kind of contribution including but not limited to bug reports, code enhancements, bug fixes, and even functionality suggestions.

You can report any bug you find or suggest new functionality with a new issue.

If you want to add yourself some functionality to the wrapper:

  1. Fork it ( https://github.com/Teatrix/payu-python )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Adds my new feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

payu_python_v2-0.1.8.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

payu_python_v2-0.1.8-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file payu_python_v2-0.1.8.tar.gz.

File metadata

  • Download URL: payu_python_v2-0.1.8.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.10

File hashes

Hashes for payu_python_v2-0.1.8.tar.gz
Algorithm Hash digest
SHA256 ac0f78f7c0e751deef9170d8985684313d43636a2e168a1e2aca33a787665dfc
MD5 bda44075965702ec8a252212d1f14422
BLAKE2b-256 94a09a693b6e9d005b9459f603d9d8e120388a750b0051daa1cd351550589aa6

See more details on using hashes here.

File details

Details for the file payu_python_v2-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: payu_python_v2-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.10

File hashes

Hashes for payu_python_v2-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 a0a21c97e4979a6bbce0c9f446241a99d80680b31dcddb22eec321ab0a0012e2
MD5 407a504269b3ee50ea940e3e4d8ef9bb
BLAKE2b-256 a3e702ceb204ecc5eb9b4a33e18ce52346b3ba8c543ff9fe7f7fbdc28537a3b1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page