1

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 です。どこが間違っているか誰が教えてくれる?前もって感謝します

4

1 に答える 1

3

あなたが間違えたものを見つけました。

$receipt = $_POST['purchase_data'];
$billInfo = json_decode($receipt,true);
...
$result = openssl_verify($billInfo, $signature, $key);

キーでデコードされたオブジェクトを検証しました。だから必ず失敗する。

これを試して成功し、

$result = openssl_verify($receipt, $signature, $key);

署名検証文字列 (purchase_data) がデコードされていません。

于 2013-07-30T05:12:54.397 に答える