2

アプリ内購入で Android アプリケーションを作成しています。Android Developer Center ページで、購入データ (json) を署名で検証する必要があることがわかります。これにGoogle Code の PHP ツールを使用しようとしましたが、検証に失敗しました。最初に、このライブラリが json ではなく (私が理解しているように)、 と で結合されたフィールドを持つプレーンテキストが必要であることに失敗し:ます|。このプレーンな文字列を分割して取得packageNameし、検証します。次の部分がより興味深いので、コードのこの部分にコメントしました。

$result = openssl_verify($responseData, base64_decode($signature),
  $this->_publicKey, self::SIGNATURE_ALGORITHM);

//openssl_verify returns 1 for a valid signature
if (0 === $result) {
    return false;
} else if (1 !== $result) {
    require_once 'RuntimeException.php';
    throw new AndroidMarket_Licensing_RuntimeException('Unknown error verifying the signature in openssl_verify');
}

$responseData私の購入jsonはどこですか、self::SIGNATURE_ALGORITHMOPENSSL_ALGO_SHA1$this->_publicKeyです:

$key = self::KEY_PREFIX . chunk_split($publicKey, 64, "\n") . self::KEY_SUFFIX;
$key = openssl_get_publickey($key);
if (false === $key) {
    require_once 'InvalidArgumentException.php';
    throw new AndroidMarket_Licensing_InvalidArgumentException('Please pass a Base64-encoded public key from the Market portal');
}
$this->_publicKey = $key;

ここで、公開鍵は base64 公開鍵で、次のようになります。

Note:To find the public key portion of this key pair, open your application's
details in the Developer Console, then click on Services & APIs, and look at the
field titled Your License Key for This Application.

しかし、そのような検証は失敗します。API 3 が新しい (2012 年 12 月) ことを読みましたが、他の多くの記事やチュートリアルはそれに対応していません。この検証を修正するには、何を変更する必要がありますか?

このコードは SHA1 を使用していますが、Android デベロッパー センターのページ (最初のリンク) では、公開鍵は X.509 を使用した RSA であると説明されています...何かアイデアはありますか?

UPD:サーバーに常に「購入はOK」と言って、すべての購入をデータベースに追加しようとしているときに、このエラーが私の失敗であることがわかります。base64_decodeサーバー上では2つの異なる場所にあるため、jsonをbase64のサーバーに持っていくので、それを壊します。このライブラリは、openssl を使用して json を検証するコードの一部で機能します。私が理解しているように、以前のバージョンはパッケージ名を検証するだけです。productIdこれは、jsonから読み取るように簡単に書き直すことができます。

4

0 に答える 0