Problem on Visa Direct api consuming
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday
yesterday
Problem on Visa Direct api consuming
I'm testing sandbox visaDirect Apis and configure my project with TwoWaySSL,
considering code below, I'm getting succeful on vpd/helloworld, but this error on every single other api (AFT; OCT; QUERY)
Visa API Error: 400 {
responseStatus: {
status: 400,
code: '9125',
severity: 'ERROR',
message: 'Expected input credential was not present',
info: ''
}
}
What could I've missing?
const express = require('express');
const fs = require('fs');
var https = require('https');
const axios = require('axios');
const request = require('request');
const app = express();
const bodyParser = require('body-parser')
var path = require('path');
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(express.json());
app.use(bodyParser.urlencoded({extended: true}));
var username = 'xxxx';
var password = 'yyyy';
const keyPath = path.join(__dirname, 'certs', 'key.pem');
const certPath = path.join(__dirname, 'certs', 'cert.pem');
const caPath = path.join(__dirname, 'certs', 'SBX-2024-Prod-Root.pem');
app.get('/', async (req, res) => {
try{
const agent = new https.Agent({
key: fs.readFileSync(keyPath),
cert: fs.readFileSync(certPath),
//ca: fs.readFileSync(caFile),
//rejectUnauthorized: true
});
httpsAgent: agent,
auth: {
username,
password
},
headers: {
'Accept': 'application/json'
}
});
console.log(`Status: ${response.status}`);
console.log(response.data);
res.json(response.data);
}catch(error){
console.error('Error:', error.message);
res.status(500).json({ error: error.message });
}
/*
request.get(options, (err, res, body) => {
if (err) {
return console.log(err);
}
console.log(`Status: ${res.statusCode}`);
console.log(body);
});
res.send('Hello World');*/
});
app.get('/query', async (req, res) => {
try{
const agent = new https.Agent({
key: fs.readFileSync(keyPath),
cert: fs.readFileSync(certPath),
//ca: fs.readFileSync(caFile),
//rejectUnauthorized: true
});
const response = await axios.get('https://sandbox.api.visa.com/visadirect/v1/transactionquery?acquiringBIN=408999&transactionIdentifie...', {
httpsAgent: agent,
auth: {
username,
password
},
headers: {
'Accept': 'application/json'
}
});
console.log(`Status: ${response.status}`);
console.log(response.data);
res.json(response.data);
}catch(error){
if (error.response) {
console.error('Visa API Error:', error.response.status, error.response.data);
} else {
console.error('Request Error:', error.message);
}
res.status(500).json({ error: error.message });
}
});
app.get('/create', async (req, res) => {
try{
const agent = new https.Agent({
key: fs.readFileSync(keyPath),
cert: fs.readFileSync(certPath),
ca: fs.readFileSync(caPath),
rejectUnauthorized: false
});
const requestBody = {
amount: "100.00", // Monto en la moneda indicada
currencyCode: "840", // Código de moneda (USD = 840)
transactionIdentifier: "381228649430015", // Número único de transacción
sourceAccountNumber: "4005520000011126", // Tarjeta de origen (debe ser válida en sandbox)
sourceCountryCode: "USA",
senderName: "John Doe",
senderAddress: "123 Main Street",
senderCity: "San Francisco",
senderStateCode: "CA",
senderPostalCode: "94105",
senderCountryCode: "USA",
senderReference: "Ref123456",
recipientName: "Jane Doe",
recipientPrimaryAccountNumber: "4957030420210496", // Tarjeta de destino
acquiringBin: "408999",
acquirerCountryCode: "840",
retrievalReferenceNumber: "330000550000", // RRN único (debe ser válido)
systemsTraceAuditNumber: "451000", // Identificador único para Visa
businessApplicationId: "PP", // "PP" para pagos, "FD" para transferencias a débito
transactionCurrencyCode: "840",
merchantCategoryCode: "6012",
senderAccountNumber: "4005520000011126", // Tarjeta de origen
senderPhoneNumber: "6504320000"
};
const options = {
method: 'post',
httpsAgent: agent,
auth: {
username,
password
},
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
data: requestBody
};
const response = await axios(options);
console.log(`Status: ${response.status}`);
console.log(response.data);
res.json(response.data);
}catch(error){
if (error.response) {
console.error('Visa API Error:', error.response.status, error.response.data);
} else {
console.error('Request Error:', error.message);
}
res.status(500).json({ error: error.message });
}
});
app.listen(3050, function () {
console.log('Example app listening on port 3050.');
})