2012-04-14 38 views
1

我提出一個應用程序,包括計費。我有購買工作,否則。如何確認應用程序內與谷歌結算信息播放市場

該應用程序鏈接到一個PHP服務器。我想將應用內購買信息保存在我的服務器上,並使用Google Play Market進行確認。

我已成功地挽救我的服務器上的應用程序內購買信息,但我無法與谷歌確認遊戲市場。

我一直在使用this庫試過,但我看到的是:

「這個庫沒有(還)支持驗證通過谷歌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

的http://stackoverflow.com/questions/5645418/android-in-app-purchase-server-signature-verification-using-php-openssl – Femi 2012-04-14 08:28:57

+0

這可能重複其他問題有我最終使用的方法。 http://stackoverflow.com/questions/8763260/verify-sha1withrsa-signature-generated-in-java-android-with-phpseclib – 2012-10-01 22:32:33

回答

0

是的,它是完全可能的。另外谷歌建議你在他們的安全設置中做到這一點,在最佳做法中做到這一點。下面的代碼塊的代碼,我在生產中由於使用 https://gist.github.com/menny

谷歌最佳實踐之一: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; 
    } 
} 
相關問題