【发布时间】:2016-02-13 07:58:26
【问题描述】:
我正在使用一个简单的 PHP 脚本来验证 Android 订单以解析客户的下载。
$receipt = $_GET['purchaseData'];
$billInfo = json_decode($receipt,true);
$signature = $_GET['dataSignature'];
$public_key_base64 = "xxxxxxxxxxxxxxxx";
$key = "-----BEGIN PUBLIC KEY-----\n".
chunk_split($public_key_base64, 64,"\n").
'-----END PUBLIC KEY-----';
$key = openssl_get_publickey($key);
$signature = base64_decode($signature);
//$result = openssl_verify($billInfo, $signature, $key);
$result = openssl_verify($receipt, $signature, $key);
if (0 === $result) {
echo "0";
} else if (1 !== $result) {
echo "1";
} else {
echo "Hello World!";
}
//added the var_dump($result); as asked by A-2-A
var_dump($result);
结果是0int(0)
我在发布应用程序后通过应用程序下了一个真实的订单,当我尝试验证订单时,我得到“0”的结果。
我尝试了直接 HTTP 访问
https://domain.com/thankyou.php?purchaseData={"packageName":"com.example.app","orderId":"GPA.1234-5678-1234-98608","productId":"product","developerPayload":"mypurchasetoken","purchaseTime":1455346586453,"purchaseState":0,"developerPayload":"mypurchasetoken","purchaseToken":"ggedobflmccnemedgplmodhp...."}&dataSignature=gwmBf...
我保留第一个问题,因为我的结果仍然是猜测。经过进一步调查,我认为签名没有像谷歌发送的那样以干净整洁的方式被读取。
浏览器将signature=gwmBfgGudpG5iPp3L0OnepNlx 读取为ƒ ~®v‘¹ˆúw
怎样才能让它以正确的方式被阅读?
【问题讨论】:
-
只需检查
var_dump($result);显示的内容。也给我们看看 -
@A-2-A 它显示“int(0)”现在网页显示“0 int(0)”
-
int(0) 据我所知是指未知,但它认为哪个部分是未知的?
标签: php android in-app-billing