使用PHP openssl进行应用内购买签名验证


In-app purchase signature verification with PHP openssl

尝试遵循应用内的一些安全准则在此处购买:http://developer.android.com/guide/market/billing/billing_best_practices.html我正在尝试在服务器上而不是在应用程序iteself。理想情况下,我希望使用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!我尝试使用的签名是应用程序购买捆绑包中的字符串。我想我的钥匙是对的,问题出在签名上。当我尝试用openssl enc-base64-d-in-signature-A>signature.bin从base64解码它时,我得到了与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()我认为他们使用的$data是一个URL

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