2

この問題に関する多くの投稿を見て、考えられる多くの解決策をテストしましたが、検証は常に誤りでした。

したがって、この両方のパラメーターを POST 経由で PHP サーバーに渡します。

String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");<br>
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");

これは私が使用する方法です:

$result = openssl_verify($responseData, base64_decode($signature),
              key, OPENSSL_ALGO_SHA1);

メソッドを使用してjson_decode、 purchaseData が正しいことを確認しました。base64_decodeまた、dataSignatureにも使用します。

これは、Google パブリッシャー アカウントで持っている公開鍵を使用して鍵を作成する方法です。

const KEY_PREFIX = "-----BEGIN PUBLIC KEY-----\n";<br>
const KEY_SUFFIX = '-----END PUBLIC KEY-----';

$key = self::KEY_PREFIX . chunk_split($publicKey, 64, "\n") . self::KEY_SUFFIX;

テストは、Google Play にアップロードされたゲームのアカウント テストで実行されるため、アプリ内購入は本物ですが、料金は発生しません。

ここで何が欠けていますか?

4

1 に答える 1

0

キーをフォーマットしましたが、PEM から公開キーを抽出する必要がある 1 つの手順がありません。

手順は次のとおりです。

$key = self::KEY_PREFIX . chunk_split($publicKey, 64, "\n") . self::KEY_SUFFIX;
$key = openssl_get_publickey($key);
$result = openssl_verify($responseData, base64_decode($signature), $key, OPENSSL_ALGO_SHA1);
于 2014-02-26T18:31:50.153 に答える