我正在整合 Walmart API。他们需要对每个 API 调用进行数字签名。在我必须处理私钥之前,我的代码似乎正在运行。这是我生成数字签名的函数:
//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);
}
openssl_pkey_get_private() 函数不断返回 false。那么我的 openssl_sign() func 给了我错误:openssl_sign(): 提供的密钥参数不能被强制转换为私钥
我首先尝试创建一个新的关键资源,使用
$res = openssl_pkey_new();
openssl_pkey_export($res, $privKey);
然后将我的 $WalmartPrivateKey 保存到 $privKey,但我遇到了同样的错误。我尝试使用 openssl_get_private_key(),但同样 - 没有任何效果。
我只知道公钥/私钥加密的基础知识,这是我第一次使用这些功能。
谁能帮我吗?
我有一个类似的问题,这是因为 PEM 格式错误。确保您有正确的开始和结束标记:“-----BEGIN PRIVATE KEY-----”、“-----END PRIVATE KEY-----”。两个标记必须在单词前后正好有 5 个破折号,并且单词必须全部大写。祝你好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句