android - 无法通过 php 服务器验证 android inapp 计费

标签 android in-app-billing verify

我需要通过 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/

相关文章:

xcode - 在每次 macOS 启动时验证 "Xcode"

android - 收到登录尝试的结果时,FirebaseAuthUI 使应用程序崩溃

Android 应用内计费 : Error consuming sku android. test.purchased(响应:5:Developer Error)

ios - IAP iOS 抛出错误域=SKErrorDomain 代码=0 "Cannot connect to iTunes Store"

android - 应用内结算 v3,找不到 bindService() Intent

c# - ECDSA 使用来自 Java 的公钥和签名验证 C# 中的签名

c# - 验证 JWT token c# 的签名

Android如何获取Ibeacon X轴正负值?

android - apk 到 dex 转换

android - GCM Send-to-Sync 消息