我想建立一个服务器的node.js验证收到来自AppStore connect
在我已经设置了应用内购买。 我跟了这https://github.com/voltrue2/in-app-purchase库,但我得到一个错误的响应说,我的收据没有定义,并且failed to validate receipt
。 我是我做错了什么在这里。 我还在测试在本地服务器上。 我想它收留了它之前工作Heroku
。 唉,要是我做错了吗?
const iap = require('in-app-purchase');
iap.config({
applePassword: 'MySecretKey',
test: true
});
iap.setup()
.then(() => {
iap.validateOnce(receipt, appleSecretString).then(onSuccess).catch(onError);
})
.catch((error) => {
if (error) {
console.log('Validation error' + error);
}
});
iap.validate(iap.APPLE, function (error, appleResponse) {
console.log(iap.APPLE);
if (error) {
console.log('Failed to validate receipt' + error);
}
if (iap.isValidated(appleResponse)) {
console.log('Validation successful');
}
});
以下是日志
iapserver:收据是没有定义的苹果无法验证receiptError:服务器3000端口+ 0毫秒验证errorReferenceError聆听无法验证购买
从错误是好像你实际上并不传递回执文件到validateOnce
功能。 该代码运行前的某个地方,你需要设置:
const receipt = req.query.receipt;
并且用类似调用您的API:
http://localhost:3000/verifyReceipt?receipt=<YOUR_RECEIPT_DATA>
您可以验证您的收据事先手动,以确保它是有效的。
把这个放在一起,你会得到这样的:
var express = require('express');
var app = express();
const iap = require('in-app-purchase');
app.get('/verifyReceipt', function(req, res){
const receipt = req.query.receipt;
iap.config({
applePassword: 'MySecretKey',
test: true
});
iap.setup()
.then(() => {
iap.validateOnce(receipt, appleSecretString).then(onSuccess).catch(onError);
})
.catch((error) => {
if (error) {
console.log('Validation error' + error);
res.status(400).send({valid: false});
}
});
iap.validate(iap.APPLE, function (error, appleResponse) {
console.log(iap.APPLE);
if (error) {
console.log('Failed to validate receipt' + error);
res.status(400).send({valid: false});
}
if (iap.isValidated(appleResponse)) {
console.log('Validation successful');
res.status(200).send({valid: true});
}
});
});
app.listen(3000);
请注意,这只会验证收据在购买,如果你实现你还需要定期刷新的收据,以确保他们的用户没有取消订阅。 下面是关于执行订阅一个很好的指南: iOS的订阅都要硬