我看过很多关于这个问题的帖子并测试了许多可能的解决方案,但验证总是错误的。
所以,我通过 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 Publisher 帐户中的公钥形成密钥的方式:
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 中上传游戏的帐户测试来执行的,因此应用内购买是真实的,但不收取任何费用。
我在这里缺少什么?