用php进行服务器端签名验证

用php进行服务器端签名验证,php,android,openssl,rsa,in-app-billing,Php,Android,Openssl,Rsa,In App Billing,几周来,我一直在努力验证我的应用程序产品的签名。购买后,我的应用程序将购买数据和签名发送到php服务器,该服务器应验证签名。我尝试了各种不同的方法让它工作,但就是不行。我不明白代码出了什么问题,可能是我发送了错误的数据或发送了错误的数据 我将数据发送到URL中的服务器: String query = "data="+data+"&sign="+signature; URL url = new URL("siteurl/Verify.php?"+query); URLConnection

几周来,我一直在努力验证我的应用程序产品的签名。购买后,我的应用程序将购买数据和签名发送到php服务器,该服务器应验证签名。我尝试了各种不同的方法让它工作,但就是不行。我不明白代码出了什么问题,可能是我发送了错误的数据或发送了错误的数据

我将数据发送到URL中的服务器:

String query = "data="+data+"&sign="+signature;
URL url = new URL("siteurl/Verify.php?"+query);
URLConnection conn = url.openConnection();
其中数据和签名为:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    data = data.getStringExtra("INAPP_PURCHASE_DATA");
    signature = data.getStringExtra("INAPP_DATA_SIGNATURE");
}
用于验证签名的php代码:

$data = $_GET["data"];
$signature = $_GET["sign"];

$pkey = '[my public key from Google copy pasted]';
$key = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($pkey, 64, "\n") . '-----END PUBLIC KEY-----';

$result = openssl_verify($data, base64_decode($signature), $key);
if($result == 0) {
    echo " fail ";
}

if($result == 1) { 
    echo " works ";
}
我翻了很多页想找到一个解决办法,但似乎什么都不管用。 我做错了什么?请帮忙


编辑:为了更清楚,上面的php代码总是在我的应用程序中返回“失败”。

为什么会有startactivityforresult??你是否解码了回音字符串?这不应该是另一种方式:服务器向应用程序发送购买信息吗?否则,什么能阻止坏人伪造购买?@IllegalArgument on activityresult由购买意图调用,返回购买信息。@jww购买数据由谷歌在他们的服务器上与我的私人签名。我正在检查它是否是用我的私钥签名的——如果不是,购买就不合法。