Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Android应用内计费版本3-服务器端验证_Php_Android_In App Billing - Fatal编程技术网

Php Android应用内计费版本3-服务器端验证

Php Android应用内计费版本3-服务器端验证,php,android,in-app-billing,Php,Android,In App Billing,我正在通过应用内购买来制作Android应用程序。在上,我看到我必须用签名验证购买数据(json)。我正在尝试为此使用,但验证失败。首先失败的是,这个库希望从我这里得到的不是json(据我所知),而是一些带有字段的纯文本,加上:和|。它拆分这个普通字符串以获取packageName,并对其进行验证。我对这部分代码进行了注释,因为下一部分更有趣: $result = openssl_verify($responseData, base64_decode($signature), $this-&

我正在通过应用内购买来制作Android应用程序。在上,我看到我必须用签名验证购买数据(json)。我正在尝试为此使用,但验证失败。首先失败的是,这个库希望从我这里得到的不是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\u ALGORITHM
OPENSSL\u algou\u SHA1
$this->\u 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中的服务器,因为在服务器上,我在两个不同的位置对它进行解码,所以我破坏了它。该库在使用openssl验证json的部分代码中工作。据我所知,Previos版本只需验证包名;从json中读取
productId
可能很容易重写。

那么您是如何根据收到的签名验证json{“orderId”:“…”、“packageName”:“…”、“productId”:“test_02”、“purchaseTime”:1368638654000、“purchaseState”:0、“purchaseToken”:“tilkecvnyrndrvftczate”}的呢?正如我所看到的,这个库无法处理这个问题。你能粘贴完整的签名验证方法吗?因为我有同样的问题。这就是我试图使用的,但仍然没有运气:。我注意到它看起来很像你的代码,我不知道键的前缀和后缀是否相同。谢谢