Our Demo Application generates a JSON message and submits Push Fund Transaction request to your APIClient SDK. Before submitting the message, we ran the JSON message in your test tool available in the API documentation, and we got the response, 200, SUCCESS, which we assume that the message is correct and a push transaction has been initiated.
But when we run the same message through the APIClient SDK, it gives 400 error message. To add more to our concerns, the call to the restTemplate raises a Throwable exception instead of going to the next line of code. Due to this, we were not able to see the cause why the API call is failing. But since it works fine in the test tool on the API documentation page, we feel this is something else.
For your information, we download the pem file and added them into a JKS file and provided the JKS path to the APIClient.
Am I missing anything?
Solved! Go to Solution
Hey @mpays4visa,
I'd be happy to help you resolve the issue. Please provide the following information so I can help you out:
1. End Point
2. Request Header
3. Request Body
4. Response Header (include the x-correlation-id)
5. Response Body
Using SoapUI, you can find the x-correlation-id in the Raw Tab of the response header.
Sorry for the delay. We were trying to find the information that you requested. Here is the detail,
1. End point
https://sandbox.api.visa.com/visadirect/fundstransfer/v1/pushfundstransactions
2. Request Header
{Accept=[application/json], Content-Type=[application/json], Authorization=[Basic SE02RjVaVTlaVlVSUDI0V1RTQlUyMXkxV1laeml1bWZaXzMwTFd2SUg3VUFrZDVpWTp4NURLUDJtcmhVNUIxMDMzeFBxSXRBNDRObzJaSW5HZGs=], User-Agent=[VDP_SampleCode_Java]}
3. Request Body (This is the same json picked up from your FundTransfer Junit test case)
{"businessApplicationId": "AA", "transactionIdentifier": "381228649430015", "cardAcceptor": {"idCode": "CA-IDCode-77765", "address": {"county": "San Mateo", "country": "USA", "state": "CA", "zipCode": "94404"}, "terminalId": "TID-9999", "name": "Visa Inc. USA-Foster City"}, "senderAddress": "901 Metro Center Blvd", "sourceOfFundsCode": "05", "recipientName": "rohan", "senderName": "Mohammed Qasim", "senderStateCode": "CA", "merchantCategoryCode": "6012", "acquirerCountryCode": "840", "senderReference": "", "recipientPrimaryAccountNumber": "4957030420210496", "retrievalReferenceNumber": "412770451018", "senderAccountNumber": "4653459515756154", "transactionCurrencyCode": "USD", "acquiringBin": "408999", "pointOfServiceData": {"posConditionCode": "00", "panEntryMode": "90", "motoECIIndicator": "0"}, "senderCity": "Foster City", "localTransactionDateTime": "2016-11-17T00:39:13", "amount": "124.05", "systemsTraceAuditNumber": "451018", "senderCountryCode": "124"}
4. Response Header (include the x-correlation-id)
{Server=[nginx], Content-Type=[application/json;charset=UTF-8], Content-Length=[156], X-SERVED-BY=[l73c013], X-CORRELATION-ID=[1573013261_242_1195081098_l73c013_VDP_WS], X-APP-STATUS=[400, 400], X-Backside-Transport=[FAIL FAIL,FAIL FAIL], X-Cnection=[Keep-Alive, close, close], X-Application-Error-Code=[3001], X-Global-Transaction-ID=[458484be5dc2470d170e3f1f], X-Frame-Options=[SAMEORIGIN], X-XSS-Protection=[1; mode=block], X-Content-Type-Options=[nosniff], Strict-Transport-Security=[max-age=2592000;includeSubdomains], Cache-Control=[no-cache, no-store, must-revalidate], Pragma=[no-cache], Expires=[-1], Content-Language=[en-US], Date=[Wed, 06 Nov 2019 04:07:41 GMT], Connection=[close]}
5. Response Body
[123, 10, 32, 32, 34, 101, 114, 114, 111, 114, 77, 101, 115, 115, 97, 103, 101, 34, 32, 58, 32, 34, 77, 101, 115, 115, 97, 103, 101, 32, 104, 97, 115, 32, 102, 97, 105, 108, 101, 100, 32, 118, 97, 108, 105, 100, 97, 116, 105, 111, 110, 58, 32, 115, 101, 110, 100, 101, 114, 80, 114, 105, 109, 97, 114, 121, 65, 99, 99, 111, 117, 110, 116, 78, 117, 109, 98, 101, 114, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 99, 111, 110, 116, 101, 110, 116, 32, 102, 111, 117, 110, 100, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 101, 108, 101, 109, 101, 110, 116, 32, 39, 115, 101, 110, 100, 101, 114, 80, 114, 105, 109, 97, 114, 121, 65, 99, 99, 111, 117, 110, 116, 78, 117, 109, 98, 101, 114, 39, 34, 10, 125]
waiting for your response.
Hey @mpays4visa,
Thanks for your patience. I've submitted ticket INC8784065 for the engineering team to look at the issue. I'll reach out to you once I get an update.
Hey @mpays4visa,
We have verified the X-Correlation-ID and we could see the below exception, could you please share the successful transaction details to verify?
RESPONSE:
2019-11-06 04:07:41,317 LL="INFO" CR="1573013261_242_1195081098_l73c013_VDP_WS" RE="1573013261242" DE="14.1.1" TR="tomcat-http--13" LN="o.a.c.i.LoggingOutInterceptor" Outbound Message
---------------------------
ID: 748720
Response-Code: 400
Content-Type: application/json
Headers: {Content-Type=[application/json], X-Application-Error-Code=[3001], Date=[Wed, 06 Nov 2019 04:07:41 GMT]}
Payload: {
"errorMessage" : "Message has failed validation: senderPrimaryAccountNumber: XXXX"
}
Hi,
It seems this is differing from our requirements. We will be doing a pull transaction ourselves from our existing payment processing gateway, and once it is successful, we would be passing that reference number in the sender reference number. We do not want to share the sender card number because this is not part of the visa payment processing platform. Is this possible? I was under the impression that it is possible when I saw that the sender account number is not a mandatory field in Visa Push Transaction API. Kindly confirm.
Please check the request body in my previous message. For your convenience, I paste them here again,
{"businessApplicationId": "AA", "transactionIdentifier": "381228649430015", "cardAcceptor": {"idCode": "CA-IDCode-77765", "address": {"county": "San Mateo", "country": "USA", "state": "CA", "zipCode": "94404"}, "terminalId": "TID-9999", "name": "Visa Inc. USA-Foster City"}, "senderAddress": "901 Metro Center Blvd", "sourceOfFundsCode": "05", "recipientName": "rohan", "senderName": "Mohammed Qasim", "senderStateCode": "CA", "merchantCategoryCode": "6012", "acquirerCountryCode": "840", "senderReference": "", "recipientPrimaryAccountNumber": "4957030420210496", "retrievalReferenceNumber": "412770451018", "senderAccountNumber": "4653459515756154", "transactionCurrencyCode": "USD", "acquiringBin": "408999", "pointOfServiceData": {"posConditionCode": "00", "panEntryMode": "90", "motoECIIndicator": "0"}, "senderCity": "Foster City", "localTransactionDateTime": "2016-11-17T00:39:13", "amount": "124.05", "systemsTraceAuditNumber": "451018", "senderCountryCode": "124"}
If you notice, the sender account number is indeed populated and taken from your test data set. Please let us know why it fails. We have tried the same request again today, the response header of which is provided below,
{Server=[nginx], Content-Type=[application/json;charset=UTF-8], Content-Length=[208], X-SERVED-BY=[l73c016], X-CORRELATION-ID=[1573794307_253_1540600169_l73c016_VDP_WS], X-APP-STATUS=[400, 400], X-Backside-Transport=[FAIL FAIL,FAIL FAIL], X-Cnection=[Keep-Alive, close, close], X-Application-Error-Code=[3001], X-Global-Transaction-ID=[458484be5dce32031fcb93ed], X-Frame-Options=[SAMEORIGIN], X-XSS-Protection=[1; mode=block], X-Content-Type-Options=[nosniff], Strict-Transport-Security=[max-age=2592000;includeSubdomains], Cache-Control=[no-cache, no-store, must-revalidate], Pragma=[no-cache], Expires=[-1], Content-Language=[en-US], Date=[Fri, 15 Nov 2019 05:05:07 GMT], Connection=[close]}
Thanks for your quick and prompt response. Regards,
Hey @mpays4visa,
The account number being used in the request seems to be invalid and hence the validation is failing. Please pass the request with right pan information.
Please note, when you create a test App in our sandbox you will receive test data in your App. The test data for your Visa Developer application is available in the Dashboard under test data in the left navigation, this will ensure that you are using valid data that has been provisioned for specific scenarios. You will basically have a table per API that is split into the Request and Response sections and the values on the Request section are meant to be populated in the payload with the intention of obtaining results specified in the Response section.
Sandbox data is limited to what is provided in the Test Data tables and is not integrated to the Visa Network and you cannot test real data in sandbox.
Please let us know if you're issue is resolved.
Hi,
Please find attached the test data and our request data. It is still failing.
Our Test data is as below,
class PushfundspostPayload {
businessApplicationId: AA
retrievalReferenceNumber: 330000550000
cardAcceptor: class CardAcceptor {
idCode: CA-IDCode-77765
address: class Address {
county: San Mateo
country: USA
state: CA
zipCode: 94404
}
name: Acceptor 1
terminalId: TID-9999
}
messageReasonCode: null
senderAddress: 901 Metro Center Blvd
senderCity: Foster City
sourceOfFundsCode: 05
recipientName: rohan
senderMiddleInitial: null
senderName: Aditya
recipientState: null
surcharge: null
senderStateCode: CA
merchantCategoryCode: 6012
senderLastName: null
pointOfServiceData: class PointOfServiceData {
posConditionCode: 0
panEntryMode: 90
motoECIIndicator: 0
}
sharingGroupCode: null
acquirerCountryCode: 840
senderReference:
recipientPrimaryAccountNumber: 4761360055652118
recipientLastName: null
nationalReimbursementFee: null
senderPostalCode: null
senderFirstName: null
senderAccountNumber: 4957030420210496
feeProgramIndicator: null
senderIdentificationNumberBusiness: null
transactionCurrencyCode: USD
acquiringBin: 408999
accountType: null
merchantPseudoAbaNumber: null
transactionIdentifier: 291
localTransactionDateTime: 2019-11-19T10:49:15
recipientFirstName: null
amount: 1200.0
senderDateOfBirth: null
recipientMiddleInitial: null
recipientCardExpiryDate: null
recipientCountryCode: null
senderIdentificationNumberIndividual: null
systemsTraceAuditNumber: 451000
senderCountryCode: 94404
merchantVerificationValue: null
}
The request header is
{Accept=[application/json], Content-Type=[application/json], Authorization=[Basic SE02RjVaVTlaVlVSUDI0V1RTQlUyMXkxV1laeml1bWZaXzMwTFd2SUg3VUFrZDVpWTp4NURLUDJtcmhVNUIxMDMzeFBxSXRBNDRObzJaSW5HZGs=], User-Agent=[VDP_SampleCode_Java]}
The response header is
{Server=[nginx], Content-Type=[application/json;charset=UTF-8], Content-Length=[208], X-SERVED-BY=[l73c017], X-CORRELATION-ID=[1574140843_008_1084320266_l73c017_VDP_WS], X-APP-STATUS=[400, 400], X-Backside-Transport=[FAIL FAIL,FAIL FAIL], X-Cnection=[Keep-Alive, close, close], X-Application-Error-Code=[3001], X-Global-Transaction-ID=[458484be5dd37bab232b78fd], X-Frame-Options=[SAMEORIGIN], X-XSS-Protection=[1; mode=block], X-Content-Type-Options=[nosniff], Strict-Transport-Security=[max-age=2592000;includeSubdomains], Cache-Control=[no-cache, no-store, must-revalidate], Pragma=[no-cache], Expires=[-1], Content-Language=[en-US], Date=[Tue, 19 Nov 2019 05:20:43 GMT], Connection=[close]}