0

Ich arbeite an der Integration der Walmart API. Sie benötigen für jeden API-Aufruf eine digitale Signatur. Mein Code scheint zu funktionieren, bis ich mich mit dem privaten Schlüssel beschäftigen muss. Hier ist meine Funktion, um eine digitale Signatur zu generieren:Wie verwende ich einen bereits vergebenen privaten Schlüssel als private Schlüsselressource in PHP?

//Most of this code is from a Walmart API sample 
function _GetWalmartAuthSignature($URL, $RequestMethod, $TimeStamp, $ConsumerId) { 
    $WalmartPrivateKey = {given PEM formatted string}; 
    //Construct the authentication data we need to sign 
    $AuthData = $ConsumerId."\n"; 
    $AuthData .= $URL."\n"; 
    $AuthData .= $RequestMethod."\n"; 
    $AuthData .= $TimeStamp."\n"; 

//THIS METHOD IS RETURNING FALSE!!!! 
$PrivateKey = openssl_pkey_get_private($WalmartPrivateKey); 

//Sign the data using sha256 hash 
defined("OPENSSL_ALGO_SHA256") ? $Hash = OPENSSL_ALGO_SHA256 : $Hash = "sha256"; 
if (!openssl_sign($AuthData, $Signature, $privKey, $Hash)) { 
    return null; 
} 

//Encode the signature and return 
return base64_encode($Signature); 

}

Die openssl_pkey_get_private() Func hält false zurückgibt. Also meine openssl_sign() Func gibt mir den Fehler: openssl_sign(): gelieferter Schlüssel param nicht in einem privaten Schlüssel

dazu gezwungen werden kann

Ich versuchte zunächst, einen neuen Schlüssel-Ressource, mit

$res = openssl_pkey_new(); 
openssl_pkey_export($res, $privKey); 

und dann Speichern mein $ WalmartPrivateKey an $ privKey, aber ich habe den gleichen Fehler. Ich habe versucht mit openssl_get_private_key(), aber wieder - nichts hat funktioniert.

Ich kenne nur die Grundlagen der öffentlichen/privaten Schlüsselverschlüsselung, und dies ist das erste Mal, dass ich diese Funktionen nutze.

Kann mir jemand helfen?

Antwort

0

Ich hatte ein ähnliches Problem, und es war, weil das PEM-Format falsch war. Stellen Sie sicher, dass Sie die richtigen Anfangs- und Endmarkierungen haben: "----- BEGIN PRIVATE KEY -----", "----- END PRIVATE KEY -----". Beide Marker müssen vor und nach den Wörtern genau 5 Bindestriche haben, und die Wörter müssen Großbuchstaben sein. Viel Glück!

+0

Das war das Problem! Meine Markierungen waren Kleinbuchstaben, also war der private Schlüssel nicht im PEM-Format. – RocketShip

Verwandte Themen