我正在制作一个包含结算的应用程序。我购买了其他工作。
该应用程序链接到PHP服务器。我想在我的服务器上保存应用内购买信息,并使用Google Play Market确认。
我已设法在我的服务器上保存应用内购买信息,但我无法通过Google Play Market确认。
我尝试过使用this库,但我看到的只有:
“此库尚未支持验证通过Google Play的应用内结算进行的购买。”
我想做的是什么?如果是这样,怎么样?
这是我的PHP:
$signedData = $request['signedData'];
$signature = $request['signature'];
$signedData = str_replace('\\', '', $signedData);
$signature = str_replace('\\', '', $signature);
define('PUBLIC_KEY', 'MY GOOGLE MARKET PUBLIC KEY');
define('PACKAGE_NAME', 'MY APP PACKAGE NAME');
$validator = new AndroidMarket_Licensing_ResponseValidator(PUBLIC_KEY, PACKAGE_NAME);
$valid = $validator->verify($signedData, $signature);
if($valid){
$result['respon'] = 'sucessed';
} else {
$result['respon'] = 'fail';
}
SendData($result);
$db -> close();
答案 0 :(得分:0)
是的,它完全有可能。此外,谷歌建议您在其安全设置中执行此操作,以便在最佳实践中执行此操作。以下代码块是我在生产中使用的代码之一,这要归功于 https://gist.github.com/menny
Google Best Practices:https://developer.android.com/google/play/billing/billing_best_practices.html
以下代码返回true或false。您可以使用packageName和orderId来实现其唯一性,这样任何人都无法进行重放攻击。
问题的答案:
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);
if (0 === $result)
{
return false;
}
else if (1 !== $result)
{
return false;
}
else
{
return true;
}
}