Getting Started with Visa Developer
First time to the Visa Developer Center? Watch this tutorial to learn where to find the Visa APIs th...
Watch the recording of my How to Run a Visa Direct Transaction using Python webinar as you follow along with this cheat sheet, including helloword Sample Code for Two-Way SSL & Sample Code for Running a Simple Transaction.
Create a Visa Direct Project on Visa Developer
Python Sample Code for Two-way (Mutual) SSL
import requests
import logging
import unittest
import datetime
import json
#DEBUG = False
DEBUG = True
'''
helloworld
Sample Code for API Key – Two-Way (Mutual) SSL
https://developer.visa.com/
https://developer.visa.com/vdpguide#get-started-overview
https://developer.visa.com/pages/working-with-visa-apis
https://developer.visa.com/pages/working-with-visa-apis/two-way-ssl
'''
# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
print ("START Sample Code for Two-Way (Mutual) SSL")
print(datetime.datetime.now())
date = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
url = 'https://sandbox.api.visa.com/vdp/helloworld'
headers = {}
body = {}
payload = json.loads('''{}
''')
# THIS IS EXAMPLE ONLY how will user_id and password look like
# user_id = '1WM2TT4IHPXC8DQ5I3CH21n1rEBGK-Eyv_oLdzE2VZpDqRn_U'
# password = '19JRVdej9'
user_id = 'YOUR_USER_ID'
password = 'YOUR_PASSWORD'
# THIS IS EXAMPLE ONLY how will cert and key look like
# cert = 'cert.pem'
# key = 'key_83d11ea6-a22d-4e52-b310-e0558816727d.pem'
cert = 'ABSOLUTE_PATH_TO_CERTIFICATE'
key = 'ABSOLUTE_PATH_TO_PRIVATE_KEY'
timeout = 10
try:
response = requests.get( url,
#verify = ('put the CA certificate pem file path here'),
cert = (cert, key),
#headers = headers,
auth = (user_id, password),
#data = body,
#json = payload,
timeout = timeout
#if DEBUG: print (response.text)
)
except Exception as e:
print str(e)
if DEBUG: print (response.headers)
if DEBUG: print (response.content)
if DEBUG: print (response.text.encode('utf8'))
var1 = str(response.status_code)
var2 = '200'
msg = " Two-Way (Mutual) SSL test failed"
assert var1 == var2, msg
# Extrract timestamp and message
print (response.json());
r = response.json()
timestamp = r["timestamp"]
print("timestamp", timestamp)
print("date", date)
message = r["message"]
print("message", message)
print ("END Sample Code for Two-Way (Mutual) SSL\n\n")
Postman Example
Code Generation
import requests
url = "https://sandbox.api.visa.com/vdp/helloworld"
payload = {}
headers = {
'Authorization': 'Basic TU40MUFRVjNCYNWDlOPlVLOEc2TjUyMWtNTFdCd0MTYQ1U3eUJCMTVKWnpJTm44NE5INDo1c3VBdzcweDVCSkDP',
'Content-Type': 'application/json'
}
cert = ('/path/to/cert.pem', '/path/to/key.pem');
response = requests.request("GET", url, headers=headers, data = payload, cert=cert)
print(response.text.encode('utf8'))
Running a Simple Transaction using Two-way (Mutual) SSL
PushFundsTransactions POST
Funds Transfer API
The Funds Transfer API can pull funds from the sender's Visa account (in preparation for pushing funds to a recipient's account) in an Account Funding Transaction (AFT). Additionally, the Funds Transfer API also provides functionality to push funds to the recipient's Visa account in an Original Credit Transaction (OCT).
If a transaction is declined, the Funds Transfer API can also return the funds to the sender's funding source in an Account Funding Transaction Reversal (AFTR). The API has been enhanced to allow originators to send their PushFundsTransactions(OCTs) and PullFundsTransactions(AFTs) to Visa for routing to multiple U.S. debit networks.
Sample Code for Running a Simple Transaction Using Two-way (Mutual) SSL
import requests
import logging
import unittest
import base64
import json
import sys
import os
import datetime
#DEBUG = False
DEBUG = True
'''
Visa Direct
Running a simple transaction using Two-Way (Mutual) SSL
https://developer.visa.com/capabilities/visa_direct/reference#visa_direct__funds_transfer__v1__pushfunds
PushFundsTransactions POST
The PushFundsTransactions resource credits (pushes) funds to a recipient's
Visa account by initiating a financial message called an Original Credit Transaction (OCT).
Funds Transfer API
Latest Version v1
keyboard_arrow_down
The Funds Transfer API can pull funds from the sender's Visa account (in preparation for pushing funds
to a recipient's account) in an Account Funding Transaction (AFT). Additionally, the Funds Transfer
API also provides functionality to push funds to the recipient's Visa account in an Original Credit Transaction (OCT).
If a transaction is declined, the Funds Transfer API can also return the funds to the sender's funding source in an
Account Funding Transaction Reversal (AFTR). The API has been enhanced to allow originators to send their
PushFundsTransactions(OCTs) and PullFundsTransactions(AFTs) to Visa for routing to multiple U.S. debit networks.
'''
# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
print ("START Sample Code for Running a simple transaction using Two-Way (Mutual) SSL")
# PullFundsTransactions POST
# The PullFundsTransactions Resource debits (pulls) funds from a sender's Visa account
# (in preparation for pushing funds to a recipient's account) by initiating a financial message called an
# Account Funding Transaction (AFT)
url = 'https://sandbox.api.visa.com/visadirect/fundstransfer/v1/pushfundstransactions'
# THIS IS EXAMPLE ONLY how will user_id and password look like
# user_id = '1WM2TT4IHPXC8DQ5I3CH21n1rEBGK-Eyv_oLdzE2VZpDqRn_U'
# password = '19JRVdej9'
user_id = 'YOUR_USER_ID'
password = 'YOUR_PASSWORD'
# THIS IS EXAMPLE ONLY how will cert and key look like
# cert = 'cert.pem'
# key = 'key_83d11ea6-a22d-4e52-b310-e0558816727d.pem'
cert = 'ABSOLUTE_PATH_TO_CERTIFICATE'
key = 'ABSOULUTE_PATH_TO_PRIVATE_KEY'
headers = { "content-type": "application/json",
'accept': 'application/json'
}
timeout = 10
# 2020-03-25T19:11:18
#"localTransactionDateTime": "''' + date + '''",
date = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
print(date)
# in our case we are not running AFT transaction
# We have to delete
# "transactionIdentifier": "381228649430015",
payload = json.loads('''
{
"acquirerCountryCode": "840",
"acquiringBin": "408999",
"amount": "124.05",
"businessApplicationId": "AA",
"cardAcceptor": {
"address": {
"country": "USA",
"county": "San Mateo",
"state": "CA",
"zipCode": "94404"
},
"idCode": "CA-IDCode-77765",
"name": "Visa Inc. USA-Foster City",
"terminalId": "TID-9999"
},
"localTransactionDateTime": "''' + date + '''",
"merchantCategoryCode": "6012",
"pointOfServiceData": {
"motoECIIndicator": "0",
"panEntryMode": "90",
"posConditionCode": "00"
},
"recipientName": "rohan",
"recipientPrimaryAccountNumber": "4957030420210496",
"retrievalReferenceNumber": "412770451018",
"senderAccountNumber": "4653459515756154",
"senderAddress": "901 Metro Center Blvd",
"senderCity": "Foster City",
"senderCountryCode": "124",
"senderName": "Mohammed Qasim",
"senderReference": "",
"senderStateCode": "CA",
"sourceOfFundsCode": "05",
"systemsTraceAuditNumber": "451018",
"transactionCurrencyCode": "USD",
"settlementServiceIndicator": "9",
"colombiaNationalServiceData": {
"countryCodeNationalService": "170",
"nationalReimbursementFee": "20.00",
"nationalNetMiscAmountType": "A",
"nationalNetReimbursementFeeBaseAmount": "20.00",
"nationalNetMiscAmount": "10.00",
"addValueTaxReturn": "10.00",
"taxAmountConsumption": "10.00",
"addValueTaxAmount": "10.00",
"costTransactionIndicator": "0",
"emvTransactionIndicator": "1",
"nationalChargebackReason": "11"
}
}
''')
try:
response = requests.post(url,
cert = (cert, key),
headers = headers,
auth = (user_id, password),
json = payload,
timeout=timeout
#if DEBUG: print (response.text)
)
except Exception as e:
print (e)
if DEBUG: print (response.headers)
if DEBUG: print (response.content)
var1 = str(response.status_code)
var2 = '200'
msg = " Two-Way (Mutual) SSL test failed"
assert var1 == var2, msg
print ("END Sample Code for Running a simple transaction using Two-Way (Mutual) SSL\n\n")
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
First time to the Visa Developer Center? Watch this tutorial to learn where to find the Visa APIs th...
Learn how to create a project and where to find test data, credentials and sample code. Leave a comm...
We feel that the Visa Developer Center has come full circle since launch in 2016. It hosts many APIs...
Ecommerce has grown to be a massive source of revenue, bringing in $517 billion to U.S. merchants in...