我有一个PHP后端,该后端与Google Play服务集成在一起,可以验证从APP进行的购买。购买信息会返回收据和签名,我需要确认购买是否正确。
我收到:
{
...rest of the data,receipt": {
"orderId":"...","packageName": ...,"productId":" ...,"purchaseTime": ...,"purchaseState": 0,"purchaseToken": ...,"autoRenewing": true
},"signature": ...
}
然后,我使用位于Google Play控制台中的公钥来验证签名。我通过添加----- BEGIN PUBLIC KEY -----和----- END API KEY ----手动将其格式化为PEM。我还将行分为64个大块,还验证了公钥是否与正确的项目相对应。
最后,我使用phpseclib库执行验证,但是它一直失败。
$receipt= $transaction['receipt'];
$rsa = new RSA();
$rsa->loadKey(Yii::$app->params['public_key']);
$verify = $rsa->verify(json_encode($receipt),$signature);
我对收据进行编码,因为verify方法需要一个字符串,但是我不确定此步骤。我是在测试环境中执行此操作的,因此购买不是真实的。我怀疑公钥在某种程度上是不正确的,但是我是从开发工具>服务和API>许可和应用程序计费中获得的。怎么了?