У меня проблемы с созданием заголовков для вызовов Cybersource REST. У меня такое ощущение, что я неправильно шифрую. Может ли кто-нибудь из вас, экспертов, сказать мне, что я делаю неправильно, переводя образец Java в APEX?
Java Пример для Digest:
public static String GenerateDigest() throws NoSuchAlgorithmException {
String bodyText = "{ your JSON payload }";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(bodyText.getBytes(StandardCharsets.UTF_8));
byte[] digest = md.digest();
return "SHA-256=" + Base64.getEncoder().encodeToString(digest);
}
APEX:
public static String generateCSDigest(){
Blob data= Blob.valueOf(getSampleJSON());
Blob hash = Crypto.generateDigest('SHA-256', data);
String digString=EncodingUtil.base64Encode(hash);
return 'SHA-256=' + digString;
}
Java Подпись Ha sh Пример:
public static String GenerateSignatureFromParams(String keyString, String signatureParams) throws InvalidKeyException, NoSuchAlgorithmException {
byte[] decodedKey = Base64.getDecoder().decode(keyString);
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "HmacSHA256");
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
hmacSha256.init(originalKey);
hmacSha256.update(signatureParams.getBytes());
byte[] HmachSha256DigestBytes = hmacSha256.doFinal();
return Base64.getEncoder().encodeToString(HmachSha256DigestBytes);}
APEX:
public static String signatureHash(String sigHead){
Blob sigHeadBlog = Blob.valueof(sigHead);
String sigBytes = EncodingUtil.urlEncode(sigHead, 'UTF-8');
Blob decodedSecret = EncodingUtil.base64Decode(merchantsecretKey);
Blob hmacSha256 = Crypto.generateMac('hmacSHA256', blob.valueof(sigBytes),decodedSecret);
return EncodingUtil.base64Encode(hmacSha256);
}
Спасибо.