【发布时间】:2015-01-12 12:08:22
【问题描述】:
我想对在 Android 应用程序中制作的购买收据进行服务器端验证。我正在使用 node.js 后端。
我目前正在尝试使用 google-play-purchase-validator 节点模块 (https://www.npmjs.org/package/google-play-purchase-validator) 来执行此操作,这似乎是执行此操作的最新模块(执行对 google 购买 api 的实时请求)。
在 Google 开发者控制台中,我创建了一个 Google 服务帐户,然后获得了要在模块中使用的电子邮件和密钥,我还将此服务帐户与我的应用程序连接起来,如本文Use service account to verify Google InAppPurchase 中所述)。不幸的是它不起作用。节点模块生成的 jwt 令牌似乎没有正确签名(我收到以下错误:未能签署 JWT,密钥可能无效)。
这里有一些代码:
var Verifier = require('google-play-purchase-validator');
var options = {
email:'myemail@developer.gserviceaccount.com',
key: 'myprivatekey',
};
var verifier = new Verifier(options);
verifier.verify(item.Receipt, function cb(err, response) {
if (err) {
console.log("there was an error validating the receipt");
console.log(err);
}
else{
console.log("sucessfully validated the receipt");
console.log(response);
}
私钥来自一个 .pem 文件,我可以使用以下命令从 google 提供的 .p12 文件生成:
openssl pkcs12 -in downloaded-key-file.p12 -out your-key-file.pem -nodes
google-play-purchase-validator 模块基于其他一些模块(google-oauth-jwt、request、crypto)。我试着调试了一下,一切似乎都正确。
知道我可能错在哪里吗?
保罗
【问题讨论】:
-
这个应用程序只适用于订阅,并且使用过时的 V2 api,有没有人有其他想法来验证 google play 收据?
标签: android node.js validation in-app-billing receipt