使用NodeJs后端在应用计费中验证和验证Playstore

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用NodeJs后端在应用计费中验证和验证Playstore相关的知识,希望对你有一定的参考价值。

我已成功将Playstore中的Playstore添加到我的android应用程序中。我正在尝试在我的节点js服务器上验证它。因此,在成功购买后,我将这些购买详细信息发送到我的Firebase数据库。然后根据https://emuneee.com/blog/2015/07/15/google-play-in-app-billing-server-purchase-verification/

我试过以下代码..

var crypto = require('crypto');

var publicKey = "PUBLIC_KEY";
var signedData = {"orderId":"ORDER_ID","packageName":"com.example.app","productId":"id","purchaseTime":1522843791366,"purchaseState":0,"purchaseToken":"something"};
var signature = "signature";
var wasVerified = verifyPurchase(publicKey, signedData, signature);


function verifyPurchase(publicKey, signedData, signature) {
    var decodedPublicKey = getPublicKey(publicKey);
    var verifier = crypto.createVerify('SHA1');
    verifier.update(signedData);
    return verifier.verify(decodedPublicKey, signature, 'base64');
}

function getPublicKey(publicKey) {
    if (!publicKey) {
        return null;
    }
    var key = chunkSplit(publicKey, 64, '
');
    var pkey = '-----BEGIN PUBLIC KEY-----
' + key + '-----END PUBLIC KEY-----
';
    return pkey;
}

function chunkSplit(str, len, end) {
    len = parseInt(len, 10) || 76;

    if (len < 1) {
        return false;
    }
    end = end || '
';
    return str.match(new RegExp('.{0,' + len + '}', 'g')).join(end);
}

但得到了这个错误,

crypto.js:99
  this._handle.update(data, encoding);
               ^

TypeError: Data must be a string or a buffer
    at Verify.update (crypto.js:99:16)

然后我试了一下

https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token

但是获得身份验证错

但我对如何验证感到困惑..需要帮助:(

答案

该错误可以准确地告诉您问题所在。

"Data must be a string or buffer at Verify.update"。所以你知道你用不是字符串或缓冲区的东西调用Verify.update()

你在叫什么?那么根据你的代码,你打电话给verify.update(signedData)。所以signedData不是String或缓冲区。

它是什么?那么根据你的源代码:

var signedData = {"orderId":"ORDER_ID","packageName":"com.example.app","productId":"id","purchaseTime":1522843791366,"purchaseState":0,"purchaseToken":"something"};

啊哈!这是将对象分配给signedData,而不是String(或缓冲区)。如果你转到你链接到的教程,你可以在他们的示例代码中看到,他们分配了一个String

因此,您可以通过执行此操作来修复此错误消息(额外的引号使其成为字符串):

var signedData = '{"orderId":"ORDER_ID","packageName":"com.example.app","productId":"id","purchaseTime":1522843791366,"purchaseState":0,"purchaseToken":"something"}';

但是如果你仔细阅读错误信息,你的进展会更快 - 他们通常会用一点思考来解释这个问题。

以上是关于使用NodeJs后端在应用计费中验证和验证Playstore的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React/NodeJS 身份验证流程中使用 httpOnly cookie 获取用户数据

在 NodeJS 后端使用 JWT 和 Active Directory 身份验证

多个 PayPal 应用程序和验证付款

如何使用 OIDC (vuejs + nodejs) 对前端和后端进行身份验证?

是否可以在 Android Studio 中本地调试 Google Play 的应用内计费?

如何在 xls 中下载由 play 1.2.7 后端在 java 上生成的 html 表的内容