В попытке следовать некоторым правилам безопасности для покупки в приложении здесь: 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}]}';
Посмотрите на OAuth.php. Я думаю, вы можете получить его на googlecode.com. Он использует openssl_verify (). Я думаю, что данные $, которые они используют, являются URL-адресом