From 04a1ee00448f23a361f6e7e6c8ba3c1fb638f6e3 Mon Sep 17 00:00:00 2001 From: gnongsie Date: Fri, 25 Apr 2025 14:19:06 +0530 Subject: [PATCH] Added sample code for Batch Upload --- Data/ConfigurationForBatchUpload.js | 75 ++++++++++++++++++ Resource/qaebc2.p12 | Bin 0 -> 4929 bytes Resource/qaebc2.rgdltnd0.csv | 5 ++ .../upload-transaction-batch.js | 48 +++++++++++ 4 files changed, 128 insertions(+) create mode 100644 Data/ConfigurationForBatchUpload.js create mode 100644 Resource/qaebc2.p12 create mode 100644 Resource/qaebc2.rgdltnd0.csv create mode 100644 Samples/TransactionBatches/upload-transaction-batch.js diff --git a/Data/ConfigurationForBatchUpload.js b/Data/ConfigurationForBatchUpload.js new file mode 100644 index 0000000..b1cf7e1 --- /dev/null +++ b/Data/ConfigurationForBatchUpload.js @@ -0,0 +1,75 @@ +'use strict'; + +/* +* Merchant configuration properties are taken from Configuration module +*/ + +// common parameters +const AuthenticationType = 'jwt'; +const RunEnvironment = 'apitest.cybersource.com'; +const MerchantId = 'qaebc2'; + +// http_signature parameters +const MerchantKeyId = ''; +const MerchantSecretKey = ''; + +// jwt parameters +const KeysDirectory = 'Resource'; +const KeyFileName = 'qaebc2'; +const KeyAlias = 'qaebc2'; +const KeyPass = '?Test1234'; + +//meta key parameters +const UseMetaKey = false; +const PortfolioID = ''; + +// logging parameters +const EnableLog = true; +const LogFileName = 'cybs'; +const LogDirectory = 'log'; +const LogfileMaxSize = '5242880'; //10 MB In Bytes +const EnableMasking = true; + +/* +PEM Key file path for decoding JWE Response Enter the folder path where the .pem file is located. +It is optional property, require adding only during JWE decryption. +*/ +const PemFileDirectory = 'Resource/NetworkTokenCert.pem'; + +//Add the property if required to override the cybs default developerId in all request body +const DefaultDeveloperId = ''; + +// Constructor for Configuration +function Configuration() { + + var configObj = { + 'authenticationType': AuthenticationType, + 'runEnvironment': RunEnvironment, + + 'merchantID': MerchantId, + 'merchantKeyId': MerchantKeyId, + 'merchantsecretKey': MerchantSecretKey, + + 'keyAlias': KeyAlias, + 'keyPass': KeyPass, + 'keyFileName': KeyFileName, + 'keysDirectory': KeysDirectory, + + 'useMetaKey': UseMetaKey, + 'portfolioID': PortfolioID, + 'pemFileDirectory': PemFileDirectory, + 'defaultDeveloperId': DefaultDeveloperId, + 'logConfiguration': { + 'enableLog': EnableLog, + 'logFileName': LogFileName, + 'logDirectory': LogDirectory, + 'logFileMaxSize': LogfileMaxSize, + 'loggingLevel': 'debug', + 'enableMasking': EnableMasking + } + }; + return configObj; + +} + +module.exports = Configuration; diff --git a/Resource/qaebc2.p12 b/Resource/qaebc2.p12 new file mode 100644 index 0000000000000000000000000000000000000000..a66a4e26c3f3fb490651b6cdaeda737a405de531 GIT binary patch literal 4929 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 literal 0 HcmV?d00001 diff --git a/Resource/qaebc2.rgdltnd0.csv b/Resource/qaebc2.rgdltnd0.csv new file mode 100644 index 0000000..0b8df03 --- /dev/null +++ b/Resource/qaebc2.rgdltnd0.csv @@ -0,0 +1,5 @@ +merchantID=qaebc2,batchID=rgdltnd0,recordCount=2,statusEmail=ynachire@visa.com,targetAPIVersion=1.86,creationDate=2025-03-05,reference= +merchantID,merchantReferenceCode,merchantDefinedData_field1,ccAuthService_run,billTo_firstName,billTo_lastName,billTo_email,billTo_street1,billTo_city,billTo_state,billTo_country,billTo_postalCode,card_accountNumber,card_expirationMonth,card_expirationYear,card_cardType,purchaseTotals_currency,purchaseTotals_grandTotalAmount,item_#_productCode +qaebc2,1,4837,true,Jay,Smith,ynachire@visa.com,8 Mission Street,San Francisco,CA,US,94101,4111111111111111,12,2036,001,GBP,8.00,1 +qaebc2,2,7209,true,Jay,Smith,ynachire@visa.com,8 Mission Street,San Francisco,CA,US,94101,4111111111111111,12,2036,001,GBP,8.00,1 +END,SUM=16.00 \ No newline at end of file diff --git a/Samples/TransactionBatches/upload-transaction-batch.js b/Samples/TransactionBatches/upload-transaction-batch.js new file mode 100644 index 0000000..59e0ad8 --- /dev/null +++ b/Samples/TransactionBatches/upload-transaction-batch.js @@ -0,0 +1,48 @@ +'use strict'; + +var cybersourceRestApi = require('cybersource-rest-client'); +var path = require('path'); +var filePath = path.resolve('Data/ConfigurationForBatchUpload.js'); +var configuration = require(filePath); + +function upload_transaction_batch(callback) { + try { + var configObject = new configuration(); + var apiClient = new cybersourceRestApi.ApiClient(); + var fileToUpload = 'Resource/qaebc2.rgdltnd0.csv'; + + var opts = []; + + var instance = new cybersourceRestApi.TransactionBatchesApi(configObject, apiClient); + + instance.uploadTransactionBatch(fileToUpload, function (error, data, response) { + if (error) { + console.log('\nError : ' + JSON.stringify(error)); + } + else if (data) { + console.log('\nData : ' + JSON.stringify(data)); + } + + console.log('\nResponse : ' + JSON.stringify(response)); + console.log('\nResponse Code of Upload Transaction Batch : ' + JSON.stringify(response['status'])); + var status = response['status']; + write_log_audit(status); + callback(error, data, response); + }); + } + catch (error) { + console.log('\nException on calling the API : ' + error); + } +} + +function write_log_audit(status) { + var filename = path.basename(__filename).split(".")[0]; + console.log(`[Sample Code Testing] [${filename}] ${status}`); +} + +if (require.main === module) { + upload_transaction_batch(function () { + console.log('\nUploadTransactionBatch end.'); + }); +} +module.exports.upload_transaction_batch = upload_transaction_batch;