Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

368
Views
PHP base64_encode() output does not match CryptoJS.enc.Base64()

I’m running into an issue when using PHP to generate the Hmac message signature for use with a snappay hosted payment page.

I confirmed that my snappay staging account is working correctly by creating the signature using the JavaScript cryptojs library and submitting several test transactions.

However, whenever I try using PHP to generate my message signature the snappay API returns an invalid signature error.

After some troubleshooting it appears that the PHP base64 encoded secret key variable is returning different values than the cryptojs base64 encoded variable.

Please see code snippets below. How can I get the PHP to match to cryptojs encoding?

PHP:

$payloadRaw = sprintf(
    '%s%s%s%s%s%s%s%s%s',
    $accountid,
    $customerid,
    $merchantid,
    $transactionamount,
    $currencycode,
    $paymentmode,
    $email,         
    $nonceid,
    $requestTimeStamp
);  
$secret_key = 'p2v9Im9+gr4RRts2MddoZm1DcOY+MK7/1LBqU7Ztpdc=';   // Fake key
$secretkeyBase64 = base64_encode($secret_key); // Does not match JavaScript
$signatureHash = hash_hmac('sha256', $payloadRaw, $secretkeyBase64, true);

JavaScript:

var secretkey = CryptoJS.enc.Base64.parse(secret_key);  
var txtnonce = "<?php echo "$nonceid"?>"; 
var txttimestamp = "<?php echo "$requestTimeStamp"?>";  
var prehash = CryptoJS.enc.Utf8.parse(payloadRaw);    
var hash = CryptoJS.HmacSHA256(prehash, secretkey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
var signatureData = hashInBase64 + ":" + txtnonce + ":" + txttimestamp;
var prehash1 = CryptoJS.enc.Utf8.parse(signatureData);      
var HmacValueJS = prehash1.toString(CryptoJS.enc.Base64);

Input - payloadRaw:

8373936484997002300349998556100.00USDCCsample@email.com6ad552829665012b695bbdf72ae2ab31de7e6eac7a94a6d4fa9412cda1961c7a1649797291

Output - Example Signatures and Secret Key encoding:

Signature Correct JS Base64: ZUUvTjBxMG55NUlteUxvMWVJeUd3cUo3cXViakNOWkpkaytOQUd6U3lSaz06NmFkNTUyODI5NjY1MDEyYjY5NWJiZGY3MmFlMmFiMzFkZTdlNmVhYzdhOTRhNmQ0ZmE5NDEyY2RhMTk2MWM3YToxNjQ5Nzk3Mjkx

SecretKey CryptoJS.enc.Base64.parse JS: a76bfd226f7e82be1146db3631d768666d4370e63e30aeffd4b06a53b66da5d7

Signature Wrong PHP Base64: SnhUMTBWRnZBS2txYThld2JhTlVnenJudzRzMVAvYUpldjlrYXRPS0xvST06NmFkNTUyODI5NjY1MDEyYjY5NWJiZGY3MmFlMmFiMzFkZTdlNmVhYzdhOTRhNmQ0ZmE5NDEyY2RhMTk2MWM3YToxNjQ5Nzk3Mjkx

SecretKey base64_encode PHP: cDJ2OUltOStncjRSUnRzMk1kZG9abTFEY09ZK01LNy8xTEJxVTdadHBkYz0=

about 4 years ago · Santiago Gelvez
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!