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

时间:2013-04-11 16:03:22

标签: php android in-app-billing

我正在使用应用程序内购买制作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开发者中心页面(第一个链接)上描述了公钥是带有X.509的RSA ......有什么想法吗?

UPD :在尝试让服务器始终说“购买没问题”并将所有购买添加到数据库时,发现此错误是我的失败。我把json带到base64中的服务器,因为在服务器上我base64_decode它在两个不同的地方,所以我打破了它。此库在部分使用openssl验证json的代码中工作。据我所知,Previos版本只是验证包名称;从json读取productId可能很容易重写。

0 个答案:

没有答案