Message Level Encryption using Golang

arnab12
Occasional Visitor

Message Level Encryption using Golang

Hello, I am trying the explore the Visa Developer API's. I was trying to work with the Card-On-File Data Service API. As I saw that Message Level Encryption is necessary for this API, I was following this example: https://community.developer.visa.com/t5/Message-Level-Encryption/How-to-run-GoLang-Sample-Code-for-M...

The thing is everything is running fine, like encrypting the data, doing the API call, getting "Http Status : 200 OK" response. But only problem is when I am trying to decrypt the response message. I am getting the following error:

asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:745 isCompound:true}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} int @4

 

I am getting this error I am trying to load the Private Key from file. My Load Private Key From File function is like this:

//Load Private Key from file
func loadPrivateKey(keyFilePath string) *rsa.PrivateKey {
	keyPem, err := ioutil.ReadFile(keyFilePath)
	if err != nil {
		panic(err)
	}

	block, _ := pem.Decode(keyPem)
	priv, err := x509.ParsePKCS1PrivateKey((*block).Bytes)
	if err != nil {
		panic(err)
	}
	return priv
}

 

I am getting the error when I am trying to use the `ParsePKCS1PrivateKey` method in the above mentioned code.

 

I am new to this Visa API. It would be extremely helpful, if I can get some reference about what I am doing wrong.

 

Full Source Code for this can be found in this GitHub repo: https://github.com/arnab333/golang-visa-card-validation 

7 REPLIES 7
jenn_kh
Community Moderator

Re: Message Level Encryption using Golang

Thank you for reaching out, @arnab12! An agent is looking for a solution for you and will get back to you as soon as possible. Until then, if any community members know a solution, please feel free to share it here. -Jenn

API_Products
Visa Developer Support Specialist

Re: Message Level Encryption using Golang

Hi @arnab12,

 

I ran a sandbox test today using the VDC Playground tool and received a successful request/response payload. Here's a link to the VDC Playground documentation: https://developer.visa.com/pages/visa-developer-center-playground 

 

Please see my sample request/response below and try your test again. Please make sure MLE is enabled and share your test result with us.

 

End Point https://sandbox.api.visa.com/cofds-web/v1/datainfo
Method POST
Request
{
"requestHeader": {
"requestMessageId": "6da6b8b024532a2e0eacb1af58581",
"messageDateTime": "2019-02-35 05:25:12.327"
},
"requestData": {
"pANs": [4072208010000000],
"group": "STANDARD"
}
}
Response
{
"responseHeader": {
"numRecordsReturned": 1,
"responseMessageId": "1655141787_207_2009057326_c6795c5-4_VDP_WS",
"requestMessageId": "6da6b8b024532a2e0eacb1af58581",
"messageDateTime": "2022-06-13 17:36:27.297"
},
"responseData": {
"panList": [{"panData": {
"panResponseMsg": "Success",
"pAN": "4072208010000000",
"merchants": [
{
"mrchDbaName": "EDF ENERGY",
"mrchName": "EDF ENERGY",
"totalTranCount": "2",
"cardAcceptorId": "54421241",
"mrchDbaId": "20599",
"lastTranCurrency": "GBP",
"sponsoredMerchantId": "ABCD",
"lastMrchTranDt": "2019-04-26",
"vAUUpdateStatus": "N",
"lastTranAmtUSD": "517.63",
"acctNumOld4Digit": "",
"mCC": "4900",
"tokenPANReplacementStatus": "N",
"paymentFacilitatorId": "ABCD",
"lastTranAmt": "400.0",
"tokenReqstrId": "0000000",
"vAULastUpdateDate": "",
"mrchAddr": "TELEDOC 228 PARIS 12 PARIS 75012 PARIS FRANCE",
"mrchURL": "",
"confidenceInd": "C",
"tranTypeDetails": [{
"lastTranCurrency": "GBP",
"lastTranAmt": "400.0",
"lastTranAmtUSD": "517.63",
"tranCount": 2,
"lastTranDateTime": "2019-04-26 09:49:11.000",
"tranType": "MAIL_TELEPHONE"
}],
"tokenPANReplacementDate": "",
"lastTranDateTime": "2019-04-26 09:49:11.000",
"mrchPhoneNum": "0000000"
},
{
"mrchDbaName": "EDF ENERGY",
"mrchName": "EDF ENERGY",
"totalTranCount": "2",
"cardAcceptorId": "54421241",
"mrchDbaId": "20599",
"lastTranCurrency": "GBP",
"sponsoredMerchantId": "ABCD",
"lastMrchTranDt": "2019-04-26",
"vAUUpdateStatus": "N",
"lastTranAmtUSD": "517.63",
"acctNumOld4Digit": "",
"mCC": "4900",
"tokenPANReplacementStatus": "N",
"paymentFacilitatorId": "ABCD",
"lastTranAmt": "400.0",
"tokenReqstrId": "0000000",
"vAULastUpdateDate": "",
"mrchAddr": "TELEDOC 228 PARIS 12 PARIS 75012 PARIS FRANCE",
"mrchURL": "",
"confidenceInd": "C",
"tranTypeDetails": [{
"lastTranCurrency": "GBP",
"lastTranAmt": "400.0",
"lastTranAmtUSD": "517.63",
"tranCount": 2,
"lastTranDateTime": "2019-04-26 09:49:11.000",
"tranType": "MAIL_TELEPHONE"
}],
"tokenPANReplacementDate": "",
"lastTranDateTime": "2019-04-26 09:49:11.000",
"mrchPhoneNum": "0000000"
},
{
"mrchDbaName": "EDF ENERGY",
"mrchName": "EDF ENERGY",
"totalTranCount": "11",
"cardAcceptorId": "54421241",
"mrchDbaId": "20599",
"lastTranCurrency": "USD",
"sponsoredMerchantId": "ABCD",
"lastMrchTranDt": "2020-05-16",
"vAUUpdateStatus": "N",
"lastTranAmtUSD": "230.0",
"acctNumOld4Digit": "",
"mCC": "4900",
"tokenPANReplacementStatus": "N",
"paymentFacilitatorId": "ABCD",
"lastTranAmt": "198.0",
"tokenReqstrId": "0000000",
"vAULastUpdateDate": "",
"mrchAddr": "TELEDOC 228 PARIS 12 PARIS 75012 PARIS FRANCE",
"mrchURL": "",
"confidenceInd": "C",
"tranTypeDetails": [
{
"lastTranCurrency": "GBP",
"lastTranAmt": "345.08",
"lastTranAmtUSD": "345.08",
"tranCount": 3,
"lastTranDateTime": "2020-04-26 09:49:11.000",
"tranType": "SCHEDULED_RECURRING"
},
{
"lastTranCurrency": "USD",
"lastTranAmt": "180.99",
"lastTranAmtUSD": "180.99",
"tranCount": 4,
"lastTranDateTime": "2020-02-18 16:40:10.000",
"tranType": "INSTALLMENT"
},
{
"lastTranCurrency": "USD",
"lastTranAmt": "198.0",
"lastTranAmtUSD": "230.0",
"tranCount": 4,
"lastTranDateTime": "2020-05-16 15:36:28.000",
"tranType": "UNSCHEDULED_RECURRING"
}
],
"tokenPANReplacementDate": "",
"lastTranDateTime": "2020-05-16 15:36:28.000",
"mrchPhoneNum": "0000000"
},
{
"mrchDbaName": "EDF ENERGY",
"mrchName": "EDF ENERGY",
"totalTranCount": "4",
"cardAcceptorId": "54421241",
"mrchDbaId": "20599",
"lastTranCurrency": "GBP",
"sponsoredMerchantId": "ABCD",
"lastMrchTranDt": "2020-04-26",
"vAUUpdateStatus": "N",
"lastTranAmtUSD": "517.63",
"acctNumOld4Digit": "",
"mCC": "4900",
"tokenPANReplacementStatus": "N",
"paymentFacilitatorId": "ABCD",
"lastTranAmt": "400.0",
"tokenReqstrId": "0000000",
"vAULastUpdateDate": "",
"mrchAddr": "TELEDOC 228 PARIS 12 PARIS 75012 PARIS FRANCE",
"mrchURL": "",
"confidenceInd": "C",
"tranTypeDetails": [
{
"lastTranCurrency": "GBP",
"lastTranAmt": "400.0",
"lastTranAmtUSD": "517.63",
"tranCount": 2,
"lastTranDateTime": "2020-04-26 09:49:11.000",
"tranType": "MAIL_TELEPHONE"
},
{
"lastTranCurrency": "USD",
"lastTranAmt": "180.99",
"lastTranAmtUSD": "180.99",
"tranCount": 2,
"lastTranDateTime": "2020-02-18 16:40:10.000",
"tranType": "ECOM_OTHER"
},
{
"lastTranCurrency": "USD",
"lastTranAmt": "159.0",
"lastTranAmtUSD": "229.0",
"tranCount": 3,
"lastTranDateTime": "2020-05-16 15:36:28.000",
"tranType": "AUTH_VERIFICATION"
}
],
"tokenPANReplacementDate": "",
"lastTranDateTime": "2020-04-26 09:49:11.000",
"mrchPhoneNum": "0000000"
},
{
"mrchDbaName": "ITUNES MUSIC STORE",
"mrchName": "APL ITUNES COM BILL",
"totalTranCount": "1",
"cardAcceptorId": "337186000108778",
"mrchDbaId": "1624",
"lastTranCurrency": "USD",
"sponsoredMerchantId": "ABCD",
"lastMrchTranDt": "2020-02-08",
"vAUUpdateStatus": "Y",
"lastTranAmtUSD": "18.99",
"acctNumOld4Digit": "9024",
"mCC": "5734",
"tokenPANReplacementStatus": "N",
"paymentFacilitatorId": "ABCD",
"lastTranAmt": "18.99",
"tokenReqstrId": "00000000",
"vAULastUpdateDate": "2020-09-12",
"mrchAddr": "",
"mrchURL": "",
"confidenceInd": "C",
"tranTypeDetails": [{
"lastTranCurrency": "USD",
"lastTranAmt": "18.99",
"lastTranAmtUSD": "18.99",
"tranCount": 1,
"lastTranDateTime": "2020-02-08 16:40:10.000",
"tranType": "ECOM_OTHER"
}],
"tokenPANReplacementDate": "",
"lastTranDateTime": "2020-02-08 16:40:10.000",
"mrchPhoneNum": "866-712-7753"
},
{
"mrchDbaName": "OTHER RECREATION SERVICES",
"mrchName": "BT CAMPS SOUTH CAROL",
"totalTranCount": "0",
"cardAcceptorId": "000445199040996",
"mrchDbaId": "2836",
"sponsoredMerchantId": "ABCD",
"lastMrchTranDt": "",
"vAUUpdateStatus": "Y",
"acctNumOld4Digit": "9024",
"mCC": "7999",
"tokenPANReplacementStatus": "N",
"paymentFacilitatorId": "ABCD",
"lastTranAmt": "0",
"tokenReqstrId": "00000000",
"vAULastUpdateDate": "2020-09-12",
"mrchAddr": "",
"mrchURL": "www.citigroup.com",
"confidenceInd": "E",
"tranTypeDetails": [{
"lastTranCurrency": "USD",
"lastTranAmt": "159.0",
"lastTranAmtUSD": "159.0",
"tranCount": 1,
"lastTranDateTime": "2020-05-11 15:36:28.000",
"tranType": "AUTH_VERIFICATION"
}],
"tokenPANReplacementDate": "",
"mrchPhoneNum": ""
}
]
}}],
"group": "STANDARD"
},
"status": {
"statusDescription": "COF Service - Success",
"statusCode": "CDI000"
}
}
Response Header
Status Code: 200 OK
Server : nginx
Date : Mon, 13 Jun 2022 17:36:27 GMT
Content-Type : application/json;charset=UTF-8
Content-Length : 8172
Connection : keep-alive
X-SERVED-BY : c6795c5-4
X-CORRELATION-ID : 1655141787_207_2009057326_c6795c5-4_VDP_WS
X-APP-STATUS : 200
encrypted : true
Content-Language : en-US
Cache-Control : no-cache, no-store, must-revalidate
X-Frame-Options : SAMEORIGIN
X-XSS-Protection : 0
X-Content-Type-Options : nosniff
Strict-Transport-Security : max-age=31536000;includeSubdomains
Pragma : no-cache
Expires : -1
X-XSS-Protection : 1; mode=block
X-Content-Type-Options : nosniff
Strict-Transport-Security : max-age=31536000;includeSubdomains;always

 




Thanks,

Diana



Was your question answered? Don't forget to click on "Accept as Solution" to help other devs find the answer to the same question.

API_Products
Visa Developer Support Specialist

Re: Message Level Encryption using Golang

Hi @arnab12,

 

Is the issue fixed? Please share your test result with us and let me know if I can take you off my contact list. 




Thanks,

Diana



Was your question answered? Don't forget to click on "Accept as Solution" to help other devs find the answer to the same question.

arnab12
Occasional Visitor

Re: Message Level Encryption using Golang

Sorry for the late reply. No, the issue is not fixed. I am sending the same payload, but still getting the error. Maybe it is language specific error. I am using Go and was following this docs: https://community.developer.visa.com/t5/Message-Level-Encryption/How-to-run-GoLang-Sample-Code-for-M...

 

Currently, what I see is that, the API call is successfull, as I am getting HTTP Status "200". But when I am trying to decrypt the response payload. I am getting that error.

API_Products
Visa Developer Support Specialist

Re: Message Level Encryption using Golang

Hi @arnab12

 

Please provide the following information for further investigation of the error:

1. Endpoint
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.




Thanks,

Diana



Was your question answered? Don't forget to click on "Accept as Solution" to help other devs find the answer to the same question.

API_Products
Visa Developer Support Specialist

Re: Message Level Encryption using Golang

Hi @arnab12,

 

Are you still experiencing an error? If so, please answer the questions I've asked of you in my prior post that was addressed to you. If the error is fixed, please let me know so that I can take you off my contact list. 




Thanks,

Diana



Was your question answered? Don't forget to click on "Accept as Solution" to help other devs find the answer to the same question.

API_Products
Visa Developer Support Specialist

Re: Message Level Encryption using Golang

Hi @arnab12,

 

I haven't received a reply from you, hence, I'll take you off my contact list. Please do not hesitate to reach out to the developer community if you need further assistance. 




Thanks,

Diana



Was your question answered? Don't forget to click on "Accept as Solution" to help other devs find the answer to the same question.