Unable to parse or decrypt encCard error - Visa In-App Provisioning

mustafagundogdu
New Contributor

Unable to parse or decrypt encCard error - Visa In-App Provisioning

Hello friends

When doing In-App Provisioning for Google Pay, How can I prepare encCard data?

Can you share an example algorithm for c#?

I created ApiKey and SharedSecretKey but I get this response from the service. Can you support me if I am going wrong?

 

ErrorRepsonse: 

"errorResponse": {
"status": 400,
"reason": "invalidParameterEncCard",
"message": "Invalid input parameter(s)",
"details": [{
"location": "encCard",
"message": "Unable to parse or decrypt"
}]}

1 REPLY 1
API_Products
Visa Developer Support Specialist

Re: Unable to parse or decrypt encCard error - Visa In-App Provisioning

Hey @mustafagundogdu,

 

When working with Visa In-App Provisioning for Google Pay, the `encCard` field must be properly encrypted. The error you received indicates that the `encCard` value could not be parsed or decrypted, which suggests an issue with how the encryption was performed.

 

Here’s an example of how to prepare and encrypt the `encCard` data using C#:

1. Generate RSA Key Pair: Usually, this will be provided by Visa. If you need to generate it, use a library like BouncyCastle.

2. Encrypt the Card Data: Use the RSA public key to encrypt the card data.

3. Encode the Encrypted Data: Encode the encrypted data into Base64 format.

 

Here’s a simplified example of encrypting card data using C#:

```csharp
// START 
using System;
using System.Security.Cryptography;
using System.Text;

public class VisaEncryption
{
public static string EncryptCardData(string cardData, string publicKey)
{
// Convert the public key to RSAParameters
var rsaParameters = new RSAParameters
{
Modulus = Convert.FromBase64String(publicKey),
Exponent = new byte[] { 1, 0, 1 } // Common exponent
};

// Create an RSA instance and import the parameters
using (var rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(rsaParameters);

// Encrypt the card data
var encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(cardData), false);

// Convert to Base64 string
return Convert.ToBase64String(encryptedData);
}
}

public static void Main(string[] args)
{
string cardData = "4957030420210454"; // Example card data
string publicKey = "YOUR_RSA_PUBLIC_KEY"; // Replace with your RSA public key

string encCard = EncryptCardData(cardData, publicKey);

Console.WriteLine("Encrypted Card Data: " + encCard);
}
}
// END 
```

 

Steps to follow:

1. Replace `YOUR_RSA_PUBLIC_KEY`: Replace this with your actual RSA public key provided by Visa.

2. Encrypt Card Data: The `EncryptCardData` method will encrypt the card data using the RSA public key and return a Base64 encoded string.

3. Use Encrypted Data: The returned `encCard` value is what you should use in your API request.

If the issue persists, ensure that:

- The RSA public key is correctly formatted and used.
- The card data is correctly formatted before encryption.
- The API Key and Shared Secret Key are correctly configured.




Thanks,

Tee



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