我需要通过 php 服务器验证 android 购买数据,但验证总是返回 false。 这是我的 android 代码,以防购买成功:
if (result.isSuccess()) {
//TODO send purchase info to web server, should verify bill info
String postData = "purchase_data=" + purchase.getOriginalJson() + "&"
+ "signature=" + purchase.getSignature();
webView.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));
}
这是我的 PHP 代码:
$receipt = $_POST['purchase_data'];
$billInfo = json_decode($receipt,true);
$signature = $_POST['signature'];
$public_key_base64 = "my base64 public key";
$key = "-----BEGIN PUBLIC KEY-----\n".
chunk_split($public_key_base64, 64,"\n").
'-----END PUBLIC KEY-----';
$key = openssl_get_publickey($key);
$signature = base64_decode($signature);
$result = openssl_verify($billInfo, $signature, $key);
if (0 === $result) {
return false;
} else if (1 !== $result) {
return false;
} else {
return true;
}
返回值始终为 false。谁能告诉我我哪里错了?提前致谢
最佳答案
我发现你弄错了。
$receipt = $_POST['purchase_data'];
$billInfo = json_decode($receipt,true);
...
$result = openssl_verify($billInfo, $signature, $key);
您使用 key 验证了解码对象。所以它总是失败。
尝试这个并获得成功,
$result = openssl_verify($receipt, $signature, $key);
签名验证字符串(purchase_data)未解码 OBJECT。
关于android - 无法通过 php 服务器验证 android inapp 计费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17697051/