Из-за ошибки кажется, что вы фактически не передаете файл квитанции в функцию 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-подписки жесткие