我正在使用openssl_verify()方法使用Google Developer Console中的公钥来验证INAPP_PURCHASE_DATA和SIGNATURE。
我正在将应用程序中的数据和签名解析为运行以下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);
?>