transactpro-gw3-client

Transact PRO Gateway3 implementation in Python.


Keywords
GW3, gateway3, integration, gateway, TransactPRO, python, python3
License
MIT
Install
pip install transactpro-gw3-client==1.7.8

Documentation

Transact Pro Gateway v3 Python client library

This library provide ability to make requests to Transact Pro Gateway API v3.

Requirements

  • This library works with Python 3.6 and above.

Installation

Install the latest version with:

python3 -m pip install --user transactpro-gw3-client

Or from sources:

python3 -m pip install --user --upgrade setuptools wheel

git clone https://github.com/TransactPRO/gw3-python-client.git
cd gw3-python-client
python3 setup.py sdist bdist_wheel
pip install --user --upgrade ./dist/*.whl

Documentation

This README provide introduction to the library usage.

Supported operations

  • Transactions

    • SMS
    • DMS HOLD
    • DMS CHARGE
    • CANCEL
    • MOTO SMS
    • MOTO DMS
    • CREDIT
    • P2P
    • B2P
    • INIT RECURRENT DMS
    • RECURRENT DMS
    • INIT RECURRENT SMS
    • RECURRENT SMS
    • REFUND
    • REVERSAL
  • Information

    • HISTORY
    • RECURRENTS
    • REFUNDS
    • RESULT
    • STATUS
    • LIMITS
  • Verifications

    • Verify 3-D Secure enrollment
    • Complete card verification
  • Tokenization

    • Create payment data token
  • Callback processing

    • Verify callback data sign
  • Reporting

    • Get transactions report in CSV format

Basic usage

You can find several examples realisation in examples folder: ExampleScripts

Also you can set up base configuration for your workflow.

Config sets:

  • Base API URL address
  • API version
  • HTTP time out sec
  • SSL verification flag
  • Proxy config

Usage in your implementation:

import gateway

# Changing default configuration
gateway.API_BASE_URL = 'https://custom-api.com/'
gateway.API_VERSION = 'v999.0'
gateway.HTTP_TIME_OUT = '200'
gateway.HTTP_PROXY = {
    'http': 'http://ECommerce:SuperSu@api-proxy:8822',
    'https': 'http://ECommerce:SuperSu@api-proxy:8822'
}
gateway.HTTP_VERIFY_SSL_CERTS = False

Errors

Library may throw following errors:

  • RuntimeError
  • ValueError
  • DigestMissingError
  • DigestMismatchError

Card verification

import gateway

# set init card verification mode for a payment
payment.command_data_set().add_card_verification_mode(gateway.CARD_VERIFICATION_MODE_INIT)

# complete card verification
complete_request = GATEWAY_CLIENT.set_operation().verify_card()
complete_request.data_set().add_gateway_transaction_id(initialPaymentGatewayId)
request = GATEWAY_CLIENT.build_request()
response = GATEWAY_CLIENT.make_request(request)
if response.status != 200:
    raise RuntimeError('Verification failed')

# set card verification mode to verify for subsequent payments
new_payment.command_data_set().add_card_verification_mode(gateway.CARD_VERIFICATION_MODE_VERIFY)

Payment data tokenization

import gateway

# option 1: create a payment with flag to save payment data
payment.command_data_set().add_payment_method_data_source(gateway.DATA_SOURCE_SAVE_TO_GATEWAY)

# option 2: send "create token" request with payment data
operation = GATEWAY_CLIENT.set_operation().create_token()

operation.payment_method_set().add_pan_cardholder_name(first_last_name='John Doe')
operation.payment_method_set().add_pan_expiry_date(mm_yy='12/20')
operation.payment_method_set().add_pan_number(pan_number='4222222222222')
operation.money_data_set().add_payment_currency(iso_4217_ccy='EUR')

request = GATEWAY_CLIENT.build_request()
response = GATEWAY_CLIENT.make_request(request)

# send a payment with flag to load payment data by token
new_payment.command_data_set().add_payment_method_data_source(gateway.DATA_SOURCE_USE_GATEWAY_SAVED_CARDHOLDER_INITIATED)
new_payment.command_data_set().add_payment_method_data_token('initial gateway-transaction-id')

Callback validation

import json

from gateway.crypto.digest import ResponseDigest
from gateway.responses.payment import CallbackResult

response_digest = ResponseDigest(signFromPost)
response_digest.set_original_uri(payment_response.digest.get_uri())        # optional, set if available
response_digest.set_original_cnonce(payment_response.digest.get_cnonce())  # optional, set if available
response_digest.set_body(jsonFromPost)
response_digest.verify(GUID, SECRET_KEY)

parsed_callback = CallbackResult(json.loads(jsonFromPost))
print(parsed_callback.gw.status_text)

Transactions report loading

import gateway

# NB. Merchant GUID/secret must be used instead of account GUID/secret!
GATEWAY_CLIENT.create_auth_data().add_merchant_guid(SOME_MERCHANT_GUID)
GATEWAY_CLIENT.create_auth_data().add_secret_key(SOME_SERCET_KEY)

operation = GATEWAY_CLIENT.set_operation().report()
operation.filter_data().add_dt_created_from(time.time() - 86400)
operation.filter_data().add_dt_finished_to(time.time())

request_data = GATEWAY_CLIENT.build_request()
response = GATEWAY_CLIENT.make_request(request_data)
parsed_response = operation.parse(response)

print(parsed_response.get_headers())
for transaction_data in parsed_response:
    print(transaction_data)

Customization

If you need to load an HTML form from Gateway instead of cardholder browser redirect, a special operation type may be used:

import gateway

GATEWAY_CLIENT.set_operation().retrieve_form(parsed_payment_response)
response = GATEWAY_CLIENT.make_request()
html = response.payload

How to run tests

Tests are based on Unit testing framework (unittest). Then, go to project directory and run all of the tests by executing command in terminal:

python3 -m unittest tests

Or only run one of the suites:

python3 -m unittest tests/test_client.py

About

Submit bugs and feature requests

Bugs and feature request are tracked on GitHub

If you wont to make some contributions

Please review code style guideline and try to keep in accordance with it CodeStyle

License

This library is licensed under the MIT License - see the LICENSE file for details.