0

저는 Walmart API를 통합하려고합니다. 각 API 호출마다 디지털 서명이 필요합니다. 개인 키를 처리해야만 내 코드가 작동하는 것 같습니다.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); 

}

openssl_pkey_get_private() FUNC가 false를 반환 계속 : 여기에 디지털 서명을 생성하는 내 기능입니다. 그럼 내 openssl_sign() FUNC 나에게 오류를 제공합니다 openssl_sign을() : 공급 키 PARAM이

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

를 사용하여, 내가 먼저 새 키 자원을 만드는 시도 개인 키

강요하고 절약 할 수 없다 내 $ WalmartPrivateKey를 $ privKey로 설정했지만 동일한 오류가 발생했습니다. openssl_get_private_key()를 사용해 보았지만 다시는 아무 것도 작동하지 않았습니다.

공개/개인 키 암호화의 기본 지식 만 알고 있으며,이 기능을 처음 사용합니다.

아무도 도와 줄 수 있습니까?

답변

0

PEM 형식이 잘못되어 비슷한 문제가 발생했습니다. 올바른 마침표와 마커가 올바른지 확인하십시오. "----- 시작하기 개인 키 -----", "----- 개인 키 -----". 두 마커 모두 단어 앞뒤에 정확하게 5 개의 대시를 사용해야하며 단어는 모두 대문자 여야합니다. 행운을 빈다!

+0

그게 문제였습니다! 내 마커는 소문자이므로 개인 키는 실제로 PEM 형식이 아닙니다. – RocketShip

관련 문제