Я использую метод openssl_verify () для проверки INAPP_PURCHASE_DATA и SIGNATURE с использованием открытого ключа из консоли разработчика Google.
Я анализирую данные и подпись из моего приложения по URL-адресу, по которому работает следующий код php. Пока я делаю пробную покупку в своем приложении для Android, мой скрипт работает нормально, однако возвращаемое значение всегда равно нулю.
Может кто-нибудь сказать, что не так с кодом?
Есть ли проблема с форматами двух вышеуказанных полей?
Также кто-нибудь может предложить лучший способ разбора параметров в моем php-скрипте?
Вот код, который я использую
<?php
$signed_data = $_REQUEST["signed_data"];
$signature = $_REQUEST["signature"];
$public_key_base64 = "......";
function verify_market_in_app($signed_data, $signature, $public_key_base64)
{
$key = "-----BEGIN PUBLIC KEY-----\n".
chunk_split($public_key_base64, 64,"\n").
'-----END PUBLIC KEY-----';
//using PHP to create an RSA key
$key = openssl_get_publickey($key);
//$signature should be in binary format, but it comes as BASE64.
//So, I'll convert it.
$signature = base64_decode($signature);
//using PHP's native support to verify the signature
$result = openssl_verify(
$signed_data,
$signature,
$key,
OPENSSL_ALGO_SHA1);
echo $result;
if (0 === $result)
{
echo "false";
return false;
}
else if (1 !== $result)
{
echo "false";
return false;
}
else
{
echo "true";
return true;
}
}
verify_market_in_app($signed_data, $signature, $public_key_base64);
?>