Android应用内结算版本3 - 服务器端验证

liste 发布于 2019-03-09 android 最后更新 2019-03-09 14:34 3 浏览

我正在使用应用程序内购买的Android应用程序。在Android Developer Center page上,我看到我必须验证购买数据(json)和签名。我试图使用PHP tool from Google Code做这件事,但验证失败。首先失败的是,这个图书馆希望从我不是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开发人员中心页面(第一个链接)描述了公钥是RSA与X.509 ...任何想法? UPD:当试图让服务器总是说'购买是好的'并且将所有购买添加到数据库时,发现这个错误是我的失败。我把json带到base64的服务器上,因为在服务器上我base64_decode在两个不同的地方,所以我打破它。这个库在使用openssl验证json的代码中起作用。据我所知,Previos版本只是验证包名;这可能很容易被重写为从json读取productId
已邀请: