Verificación de firma de compra en la aplicación con PHP openssl

En un intento de seguir algunas de las pautas de seguridad para la compra en la aplicación aquí:http: //developer.android.com/guide/market/billing/billing_best_practices.htm Estoy tratando de validar la firma en un servidor en lugar de hacerlo en la aplicación. Idealmente, me gustaría usar las bibliotecas php openssl y parece que un código como el siguiente debería funcionar:

$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);

Sé que tanto mi firma como mi clave pública son correctas, ¡pero $ ok es 0! La firma que intento usar es una cadena del paquete de compra de la aplicación. Supongo que mi clave es correcta y el problema está en la firma. Cuando intento decodificarlo desde base64 con: openssl enc -base64 -d -in signature -A> signature.bin, tengo la misma cadena con base64_decode (). Algunas ideas

UPD: ¿tampoco entiendo realmente lo que debería pasar en openssl_verify () como $ data? Mis datos se ven así:

$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}]}';

Respuestas a la pregunta(1)

Su respuesta a la pregunta