gpt4 book ai didi

google-play - Google Play 购买中签名验证失败

转载 作者:行者123 更新时间:2023-12-02 09:41:39 38 4
gpt4 key购买 nike

我有一个 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);

我对收据进行了编码,因为验证方法需要一个字符串,但我不确定这一步。我是在测试环境中执行此操作的,因此购买不是真实的。我怀疑公钥不正确,但我是从开发工具 > 服务和 API > 许可和应用计费中得到的。有什么问题?

最佳答案

我会说:发布您要验证的签名、明文并发布您用于验证的 key 。事实上,在我看来,(1)签名是 base64 编码的(即,您需要通过 base64_decode 运行它和(2)Google 正在使用 PKCS1 填充,而 phpseclib 默认为签名的 PSS 填充. 您可以通过执行 $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1); 将签名填充更改为 PKCS1

关于google-play - Google Play 购买中签名验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59356777/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com