2012-04-14 4 views
1

Я делаю приложение, которое будет включать в себя выставление счетов. У меня есть покупка в противном случае.Как подтвердить информацию о выставлении счетов в приложении с помощью Google Play Market

Приложение ссылается на сервер PHP. Я хочу сохранить информацию о покупке в приложении на своем сервере и подтвердить использование Google Play Market.

Мне удалось сохранить информацию о покупке в приложении на моем сервере, но я не могу подтвердить это с помощью Google Play Market.

Я попытался с помощью this библиотеки, но все, что я вижу:

"Эта библиотека не (пока) поддержка проверки покупки, сделанные через In-App Billing в 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

Возможный дубликат http://stackoverflow.com/questions/5645418/android-in-app-purchase-server-signature-verification-using-php-openssl – Femi

+0

Это другой вопрос имеет подход, который я использовал. http://stackoverflow.com/questions/8763260/verify-sha1withrsa-signature-generated-in-java-android-with-phpseclib –

ответ

0

Да, это вполне возможно. Также google советует вам сделать это в своих настройках безопасности, чтобы сделать это в лучших практиках. После кодового блока является одним из кода, который я использую в производстве благодаря https://gist.github.com/menny

Google Best Practices: https://developer.android.com/google/play/billing/billing_best_practices.html

следующий код возвращает истинным или ложным. Вы можете использовать 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; 
    } 
}