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 kannIch 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?
Das war das Problem! Meine Markierungen waren Kleinbuchstaben, also war der private Schlüssel nicht im PEM-Format. – RocketShip