Проверка подписи покупки в приложении с помощью PHP openssl - PullRequest
10 голосов
/ 16 июня 2011

В попытке следовать некоторым рекомендациям по безопасности для покупки в приложении здесь: http://developer.android.com/guide/market/billing/billing_best_practices.html Я пытаюсь выполнить проверку подписи на сервере, а не в самом приложении.В идеале я хотел бы использовать библиотеки php openssl, и похоже, что следующий код должен работать:

$public_key_str = file_get_contents("./pubKey/out");
$public_key_str = trim($public_key_str);
$key = openssl_get_publickey($public_key_str);
if(!$key)
{
echo 'Can\'t get public key';
}
$signature = base64_decode( $signature );
$ok = openssl_verify($data, $signature, $key);
var_dump($ok);

Я знаю, что моя подпись и открытый ключ верны, но $ ok равно 0!Подпись, которую я пытаюсь использовать, является строкой из комплекта покупки приложения.Угадай, мой ключ правильный, а проблема в подписи.Когда я пытаюсь декодировать его из base64 с помощью: openssl enc -base64 -d -in signature -A> signature.bin, я получаю строку с base64_decode ().Любые идеи?

UPD: также я действительно не понимаю, что я должен передать в openssl_verify () как $ data?Мои данные выглядят так:

$data = '{"nonce":5550262978898439313,"orders":[{"notificationId":"android.test.purchased","orderId":"transactionId.android.test.purchased","packageName":"com.ads.testbilling","productId":"android.test.purchased","purchaseTime":1308224646237,"purchaseState":0}]}';

1 Ответ

1 голос
/ 27 августа 2011

Посмотрите на OAuth.php. Я думаю, вы можете получить его на googlecode.com. Он использует openssl_verify (). Я думаю, что $ data, которые они используют, это URL

http://oauth.googlecode.com/svn/code/php/OAuth.php

...