Cybersource создает дайджест в Saleforce APEX - PullRequest
0 голосов
/ 10 июля 2020

У меня проблемы с созданием заголовков для вызовов 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);
}

Спасибо.

...