【发布时间】:2011-06-16 12:15:31
【问题描述】:
试图遵循应用内的一些安全准则 在这里购买: 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}]}';
【问题讨论】:
-
请正确格式化您的代码,即不要在每行使用反引号将其缩进 4 个空格(或者只需选择行并按 CTRL+K)
标签: php android openssl in-app-purchase signature