Signature vertification failed in Google Play purchase
我有一个 PHP 后端,它与 Google Play 服务集成以验证从 APP 进行的购买。购买信息返回收据和签名,我需要验证购买是否正确。
我收到:
1 2 3 4 5 6 7 8 9 10 11 12 13 | { ...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 库来执行验证,但一直失败。
1 2 3 4 | $receipt= $transaction['receipt']; $rsa = new RSA(); $rsa->loadKey(Yii::$app->params['public_key']); $verify = $rsa->verify(json_encode($receipt), $signature); |
我对收据进行了编码,因为验证方法需要一个字符串,但我不确定这一步。我是在测试环境中执行此操作的,因此购买不是真实的。我怀疑公钥不正确,但我是从开发工具>服务中得到的
我会说:发布您尝试验证的签名、明文并发布您用于验证的密钥。事实上,在我看来,(1)签名很可能是 base64 编码的(即你需要通过
将签名填充更改为 PKCS1