如何使用Google Play电子市场确认应用内结算信息

时间:2012-04-14 08:22:15

标签: php android in-app-purchase in-app-billing

我正在制作一个包含结算的应用程序。我购买了其他工作。

该应用程序链接到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();

1 个答案:

答案 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;
    }
}