Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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应用内计费服务器验证响应_Php_Android - Fatal编程技术网

Php一直给我一个错误的android应用内计费服务器验证响应

Php一直给我一个错误的android应用内计费服务器验证响应,php,android,Php,Android,出于某种原因,我让这个脚本正常工作,但一旦我试图解码JSON,脚本就开始出错。我又回到了原来的脚本,但它仍然不起作用。在下面$结果总是给我0,如果PHP文档是正确的,这意味着验证失败。我仔细检查了public_key.pem,看它是否正确,是否正确。我还检查了signedData和signature是否正在发送以及是否正在发送。这个脚本可能有什么问题 <?php $signed_data = $_POST['signedData']; $signature = $_POST['signat

出于某种原因,我让这个脚本正常工作,但一旦我试图解码JSON,脚本就开始出错。我又回到了原来的脚本,但它仍然不起作用。在下面$结果总是给我0,如果PHP文档是正确的,这意味着验证失败。我仔细检查了public_key.pem,看它是否正确,是否正确。我还检查了signedData和signature是否正在发送以及是否正在发送。这个脚本可能有什么问题

<?php
$signed_data = $_POST['signedData'];
$signature = $_POST['signature'];
$fp = fopen("./public_key.pem", "r");
$cert = fread($fp, 451);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
$signed_data = trim($signed_data);
$signature = base64_decode($signature);

$result = openssl_verify($signed_data, $signature, $pubkeyid, OPENSSL_ALGO_SHA1);
if ($result == 1) {
    echo 'correct';
} else if ($result == 0) {
    echo 'fail';
    echo '||';
    echo $pubkeyid;
    echo '||';
    echo $signed_data;
} else {
    echo 'epic fail';
}
openssl_free_key($pubkeyid);
?>


openssl有一个bug,这里报告的似乎与您遇到的问题相同

您是否有
错误报告(E_ALL);ini设置(“显示错误”,1)?注意:未定义索引:第3行/home/stackits/public|html/verify|script.php中的signedData注意:未定义索引:第4行/home/stackits/public|html/verify|script.php中的signature in/home/stackits/public|html/verify|||script.php失败|资源id | 3|是我。虽然这些变量在工作时我没有更改。如果
$\u POST
有未定义的索引,则脚本被错误地发布到
var\u dump($\u POST)
查看其中的内容(如果有的话)。错误可能来自发送POST的客户端,而不是PHP代码中的…var_dump($_POST);给我数组(0){}我还仔细检查了我的客户端帖子,它也是正确的,这意味着$signature和$signedData都包含数据,并且格式正确。但是显然,
$\u POST
是空的,所以PHP没有收到帖子数据。例如,您的客户端可能通过
$\u GET
错误发送<代码>变量转储($\u请求)
。谢谢!经过18个小时的研究,终于知道这不是我的错,我可以松一口气了。然而,我不明白我能做些什么来解决这个问题?这就是我生成.pem文件的方式吗?可能你唯一能做的就是生成一个新的证书。从那个bug报告中我可以看出,它只是偶尔发生。我猜你在第二次重新编写代码时生成了一个新的证书?实际上,证书无法更改,因为它是由Google开发者面板分配给我的公钥。所以基本上我被搞砸了是因为运气不好?这甚至可能不是我发布的问题的原因。这里的人和你有着完全相同的问题,有着完全相同的代码。事实证明,他们的pem文件在结尾处有新行。不,我遵循了所有这些建议,但没有任何帮助。